diff options
742 files changed, 3641 insertions, 3448 deletions
diff --git a/.cirrus.yml b/.cirrus.yml index 3dd9fcff7f..d58782ce67 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -1,38 +1,19 @@ env: CIRRUS_CLONE_DEPTH: 1 -freebsd_1st_task: +freebsd_12_task: freebsd_instance: image_family: freebsd-12-1 - cpu: 4 - memory: 4G - install_script: ASSUME_ALWAYS_YES=yes pkg bootstrap -f ; pkg install -y - bash curl cyrus-sasl git glib gmake gnutls gsed - nettle perl5 pixman pkgconf png usbredir + cpu: 8 + memory: 8G + install_script: + - ASSUME_ALWAYS_YES=yes pkg bootstrap -f ; + - pkg install -y bash curl cyrus-sasl git glib gmake gnutls gsed + nettle perl5 pixman pkgconf png usbredir script: - mkdir build - cd build - - ../configure --disable-user --target-list-exclude='alpha-softmmu - ppc64-softmmu ppc-softmmu riscv32-softmmu riscv64-softmmu s390x-softmmu - sparc64-softmmu sparc-softmmu x86_64-softmmu i386-softmmu' - --enable-werror || { cat config.log; exit 1; } - - gmake -j$(sysctl -n hw.ncpu) - - gmake -j$(sysctl -n hw.ncpu) check - -freebsd_2nd_task: - freebsd_instance: - image_family: freebsd-12-1 - cpu: 4 - memory: 4G - install_script: ASSUME_ALWAYS_YES=yes pkg bootstrap -f ; pkg install -y - bash curl cyrus-sasl git glib gmake gnutls gtk3 gsed libepoxy mesa-libs - nettle perl5 pixman pkgconf png SDL2 usbredir - script: - - ./configure --enable-werror --target-list='alpha-softmmu ppc64-softmmu - ppc-softmmu riscv32-softmmu riscv64-softmmu s390x-softmmu - sparc64-softmmu sparc-softmmu x86_64-softmmu i386-softmmu - sparc-bsd-user sparc64-bsd-user x86_64-bsd-user i386-bsd-user' - || { cat config.log; exit 1; } + - ../configure --enable-werror || { cat config.log; exit 1; } - gmake -j$(sysctl -n hw.ncpu) - gmake -j$(sysctl -n hw.ncpu) check @@ -63,3 +44,66 @@ macos_xcode_task: --enable-werror --cc=clang || { cat config.log; exit 1; } - gmake -j$(sysctl -n hw.ncpu) - gmake check + +windows_msys2_task: + windows_container: + image: cirrusci/windowsservercore:cmake + os_version: 2019 + cpu: 8 + memory: 8G + env: + MSYS: winsymlinks:nativestrict + MSYSTEM: MINGW64 + CHERE_INVOKING: 1 + printenv_script: + - C:\tools\msys64\usr\bin\bash.exe -lc 'printenv' + install_script: + - C:\tools\msys64\usr\bin\bash.exe -lc "cd /c/tools && + curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz" + - C:\tools\msys64\usr\bin\bash.exe -lc "cd /c/tools && + curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz.sig" + - C:\tools\msys64\usr\bin\bash.exe -lc "cd /c/tools && + pacman -U --noconfirm msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz" + - C:\tools\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -Sy" + - C:\tools\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -S --needed + bash pacman pacman-mirrors msys2-runtime" + - taskkill /F /IM gpg-agent.exe + - C:\tools\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -Su" + - C:\tools\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -S --needed + base-devel + git + mingw-w64-x86_64-python + mingw-w64-x86_64-python-setuptools + mingw-w64-x86_64-toolchain + mingw-w64-x86_64-capstone + mingw-w64-x86_64-SDL2 + mingw-w64-x86_64-SDL2_image + mingw-w64-x86_64-gtk3 + mingw-w64-x86_64-glib2 + mingw-w64-x86_64-ninja + mingw-w64-x86_64-make + mingw-w64-x86_64-lzo2 + mingw-w64-x86_64-zstd + mingw-w64-x86_64-libjpeg-turbo + mingw-w64-x86_64-pixman + mingw-w64-x86_64-libgcrypt + mingw-w64-x86_64-libpng + mingw-w64-x86_64-libssh + mingw-w64-x86_64-libxml2 + mingw-w64-x86_64-snappy + mingw-w64-x86_64-libusb + mingw-w64-x86_64-usbredir + mingw-w64-x86_64-libtasn1 + mingw-w64-x86_64-nettle + mingw-w64-x86_64-cyrus-sasl + mingw-w64-x86_64-curl + mingw-w64-x86_64-gnutls + mingw-w64-x86_64-zstd" + script: + - C:\tools\msys64\usr\bin\bash.exe -lc "mkdir build" + - C:\tools\msys64\usr\bin\bash.exe -lc "cd build && ../configure + --python=python3 --ninja=ninja + --target-list-exclude=i386-softmmu,arm-softmmu,ppc-softmmu,mips-softmmu" + - C:\tools\msys64\usr\bin\bash.exe -lc "cd build && make -j$NUMBER_OF_PROCESSORS" + test_script: + - C:\tools\msys64\usr\bin\bash.exe -lc "cd build && make V=1 check" diff --git a/.gitignore b/.gitignore index b6fdd34ddf..5515f595e6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,163 +1,11 @@ /GNUmakefile /build/ -/.doctrees -/config-devices.* -/config-host.* -/config-target.* -/config.status -/config-temp -/tools/virtiofsd/50-qemu-virtiofsd.json -/elf2dmp -/trace-events-all -/trace/generated-events.h -/trace/generated-events.c -/trace/generated-helpers-wrappers.h -/trace/generated-helpers.h -/trace/generated-helpers.c -/trace/generated-tcg-tracers.h -/ui/shader/texture-blit-frag.h -/ui/shader/texture-blit-vert.h -/ui/shader/texture-blit-flip-vert.h -/ui/input-keymap-*.c.inc -*-timestamp -/*-softmmu -/*-darwin-user -/*-linux-user -/*-bsd-user -/ivshmem-client -/ivshmem-server -/libdis* -/libuser -/linux-headers/asm -/qga/qapi-generated -/qapi-gen-timestamp -/qapi/qapi-builtin-types.[ch] -/qapi/qapi-builtin-visit.[ch] -/qapi/qapi-commands-*.[ch] -**/qapi/qapi-commands.[ch] -**/qapi/qapi-emit-events.[ch] -/qapi/qapi-events-*.[ch] -**/qapi/qapi-events.[ch] -**/qapi/qapi-init-commands.[ch] -**/qapi/qapi-introspect.[ch] -/qapi/qapi-types-*.[ch] -**/qapi/qapi-types.[ch] -/qapi/qapi-visit-*.[ch] -!/qapi/qapi-visit-core.c -**/qapi/qapi-visit.[ch] -**/qapi/qapi-doc.texi -/qemu-edid -/qemu-img -/qemu-nbd -/qemu-options.def -/qemu-options.texi -/qemu-img-cmds.texi -/qemu-img-cmds.h -/qemu-io -/qemu-ga -/qemu-bridge-helper -/qemu-keymap -/qemu-monitor.texi -/qemu-monitor-info.texi -/qemu-storage-daemon -/qemu-version.h -/qemu-version.h.tmp -/module_block.h -/scsi/qemu-pr-helper -/vhost-user-scsi -/vhost-user-blk -/vhost-user-gpu -/vhost-user-input -/fsdev/virtfs-proxy-helper -*.tmp -*.[1-9] -*.a -*.aux -*.cp -*.exe -*.msi -*.dll -*.so -*.fn -*.ky -*.log -*.pdf -*.pod -*.cps -*.fns -*.kys -*.pg -*.pyc -*.toc -*.tp -*.vr -*.d -!/.gitlab-ci.d -!/scripts/qemu-guest-agent/fsfreeze-hook.d -*.o .sdk -*.gcda -*.gcno -*.gcov -/pc-bios/bios-pq/status -/pc-bios/edk2-*.fd -/pc-bios/vgabios-pq/status -/pc-bios/optionrom/linuxboot.asm -/pc-bios/optionrom/linuxboot.bin -/pc-bios/optionrom/linuxboot.raw -/pc-bios/optionrom/linuxboot.img -/pc-bios/optionrom/linuxboot_dma.asm -/pc-bios/optionrom/linuxboot_dma.bin -/pc-bios/optionrom/linuxboot_dma.raw -/pc-bios/optionrom/linuxboot_dma.img -/pc-bios/optionrom/pvh.asm -/pc-bios/optionrom/pvh.bin -/pc-bios/optionrom/pvh.raw -/pc-bios/optionrom/pvh.img -/pc-bios/optionrom/multiboot.asm -/pc-bios/optionrom/multiboot.bin -/pc-bios/optionrom/multiboot.raw -/pc-bios/optionrom/multiboot.img -/pc-bios/optionrom/kvmvapic.asm -/pc-bios/optionrom/kvmvapic.bin -/pc-bios/optionrom/kvmvapic.raw -/pc-bios/optionrom/kvmvapic.img -/pc-bios/s390-ccw/s390-ccw.elf -/pc-bios/s390-ccw/s390-ccw.img -/docs/built -/docs/interop/qemu-ga-qapi.texi -/docs/interop/qemu-ga-ref.html -/docs/interop/qemu-ga-ref.info* -/docs/interop/qemu-ga-ref.txt -/docs/interop/qemu-qmp-qapi.texi -/docs/interop/qemu-qmp-ref.html -/docs/interop/qemu-qmp-ref.info* -/docs/interop/qemu-qmp-ref.txt -/docs/version.texi -/contrib/vhost-user-gpu/50-qemu-gpu.json -*.tps .stgit-* .git-submodule-status cscope.* tags TAGS -docker-src.* *~ *.ast_raw *.depend_raw -trace.c -trace-ust.h -trace-ust.h -trace-dtrace.h -trace-dtrace.dtrace -trace-root.h -trace-root.c -trace-ust-root.h -trace-ust-root.h -trace-ust-all.h -trace-ust-all.c -trace-dtrace-root.h -trace-dtrace-root.dtrace -trace-ust-all.h -trace-ust-all.c -/target/arm/decode-sve.c.inc diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 72e8604579..a18e18b57e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -134,7 +134,7 @@ build-system-fedora: variables: IMAGE: fedora CONFIGURE_ARGS: --disable-gcrypt --enable-nettle - TARGETS: tricore-softmmu unicore32-softmmu microblaze-softmmu mips-softmmu + TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu MAKE_CHECK_ARGS: check-build artifacts: @@ -166,7 +166,7 @@ build-system-centos: variables: IMAGE: centos8 CONFIGURE_ARGS: --disable-nettle --enable-gcrypt - TARGETS: ppc64-softmmu lm32-softmmu or1k-softmmu s390x-softmmu + TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu MAKE_CHECK_ARGS: check-build artifacts: @@ -254,6 +254,17 @@ build-clang: ppc-softmmu s390x-softmmu arm-linux-user MAKE_CHECK_ARGS: check +# These targets are on the way out +build-deprecated: + <<: *native_build_job_definition + variables: + IMAGE: debian-all-test-cross + CONFIGURE_ARGS: --disable-docs --disable-tools + MAKE_CHECK_ARGS: check-tcg + TARGETS: ppc64abi32-linux-user tilegx-linux-user lm32-softmmu + unicore32-softmmu + allow_failure: true + build-oss-fuzz: <<: *native_build_job_definition variables: diff --git a/.shippable.yml b/.shippable.yml index 89d8be4291..0b4fd6df1d 100644 --- a/.shippable.yml +++ b/.shippable.yml @@ -8,7 +8,7 @@ env: - IMAGE=debian-amd64 TARGET_LIST=x86_64-softmmu,x86_64-linux-user - IMAGE=debian-win32-cross - TARGET_LIST=arm-softmmu,i386-softmmu,lm32-softmmu + TARGET_LIST=arm-softmmu,i386-softmmu - IMAGE=debian-win64-cross TARGET_LIST=aarch64-softmmu,sparc64-softmmu,x86_64-softmmu - IMAGE=debian-armel-cross diff --git a/.travis.yml b/.travis.yml index 65341634d0..c75221dca3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -344,10 +344,9 @@ jobs: # Run check-tcg against linux-user (with plugins) # we skip sparc64-linux-user until it has been fixed somewhat # we skip cris-linux-user as it doesn't use the common run loop - # we skip ppc64abi32-linux-user as it seems to have a broken libc - name: "GCC plugins check-tcg (user)" env: - - CONFIG="--disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user,ppc64abi32-linux-user" + - CONFIG="--disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user" - TEST_BUILD_CMD="make build-tcg" - TEST_CMD="make check-tcg" - CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-debug-tcg" diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index 63ef6af9a1..ad8b315b35 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -2013,7 +2013,7 @@ static int kvm_init(MachineState *ms) #endif QLIST_INIT(&s->kvm_parked_vcpus); s->vmfd = -1; - s->fd = qemu_open("/dev/kvm", O_RDWR); + s->fd = qemu_open_old("/dev/kvm", O_RDWR); if (s->fd == -1) { fprintf(stderr, "Could not access KVM kernel module: %m\n"); ret = -errno; diff --git a/authz/list.c b/authz/list.c index 8e904bfc93..28b990931a 100644 --- a/authz/list.c +++ b/authz/list.c @@ -252,7 +252,6 @@ static const TypeInfo qauthz_list_info = { .name = TYPE_QAUTHZ_LIST, .instance_size = sizeof(QAuthZList), .instance_finalize = qauthz_list_finalize, - .class_size = sizeof(QAuthZListClass), .class_init = qauthz_list_class_init, .interfaces = (InterfaceInfo[]) { { TYPE_USER_CREATABLE }, diff --git a/authz/listfile.c b/authz/listfile.c index 666df872ad..cd6163aa40 100644 --- a/authz/listfile.c +++ b/authz/listfile.c @@ -263,7 +263,6 @@ static const TypeInfo qauthz_list_file_info = { .instance_init = qauthz_list_file_init, .instance_size = sizeof(QAuthZListFile), .instance_finalize = qauthz_list_file_finalize, - .class_size = sizeof(QAuthZListFileClass), .class_init = qauthz_list_file_class_init, .interfaces = (InterfaceInfo[]) { { TYPE_USER_CREATABLE }, diff --git a/authz/pamacct.c b/authz/pamacct.c index 3c6be43916..c91593bbd8 100644 --- a/authz/pamacct.c +++ b/authz/pamacct.c @@ -129,7 +129,6 @@ static const TypeInfo qauthz_pam_info = { .name = TYPE_QAUTHZ_PAM, .instance_size = sizeof(QAuthZPAM), .instance_finalize = qauthz_pam_finalize, - .class_size = sizeof(QAuthZPAMClass), .class_init = qauthz_pam_class_init, .interfaces = (InterfaceInfo[]) { { TYPE_USER_CREATABLE }, diff --git a/authz/simple.c b/authz/simple.c index 84954b80a5..ee061e980d 100644 --- a/authz/simple.c +++ b/authz/simple.c @@ -96,7 +96,6 @@ static const TypeInfo qauthz_simple_info = { .name = TYPE_QAUTHZ_SIMPLE, .instance_size = sizeof(QAuthZSimple), .instance_finalize = qauthz_simple_finalize, - .class_size = sizeof(QAuthZSimpleClass), .class_init = qauthz_simple_class_init, .interfaces = (InterfaceInfo[]) { { TYPE_USER_CREATABLE }, diff --git a/backends/cryptodev-builtin.c b/backends/cryptodev-builtin.c index f047ad0362..c6edb1b28a 100644 --- a/backends/cryptodev-builtin.c +++ b/backends/cryptodev-builtin.c @@ -35,10 +35,7 @@ */ #define TYPE_CRYPTODEV_BACKEND_BUILTIN "cryptodev-backend-builtin" -typedef struct CryptoDevBackendBuiltin - CryptoDevBackendBuiltin; -DECLARE_INSTANCE_CHECKER(CryptoDevBackendBuiltin, CRYPTODEV_BACKEND_BUILTIN, - TYPE_CRYPTODEV_BACKEND_BUILTIN) +OBJECT_DECLARE_SIMPLE_TYPE(CryptoDevBackendBuiltin, CRYPTODEV_BACKEND_BUILTIN) typedef struct CryptoDevBackendBuiltinSession { diff --git a/backends/cryptodev-vhost-user.c b/backends/cryptodev-vhost-user.c index 41089dede1..60ec4908aa 100644 --- a/backends/cryptodev-vhost-user.c +++ b/backends/cryptodev-vhost-user.c @@ -39,9 +39,7 @@ */ #define TYPE_CRYPTODEV_BACKEND_VHOST_USER "cryptodev-vhost-user" -typedef struct CryptoDevBackendVhostUser CryptoDevBackendVhostUser; -DECLARE_INSTANCE_CHECKER(CryptoDevBackendVhostUser, CRYPTODEV_BACKEND_VHOST_USER, - TYPE_CRYPTODEV_BACKEND_VHOST_USER) +OBJECT_DECLARE_SIMPLE_TYPE(CryptoDevBackendVhostUser, CRYPTODEV_BACKEND_VHOST_USER) struct CryptoDevBackendVhostUser { diff --git a/backends/dbus-vmstate.c b/backends/dbus-vmstate.c index a13461edea..bd050e8e9c 100644 --- a/backends/dbus-vmstate.c +++ b/backends/dbus-vmstate.c @@ -23,8 +23,8 @@ #define TYPE_DBUS_VMSTATE "dbus-vmstate" -OBJECT_DECLARE_SIMPLE_TYPE(DBusVMState, dbus_vmstate, - DBUS_VMSTATE, ObjectClass) +OBJECT_DECLARE_SIMPLE_TYPE(DBusVMState, + DBUS_VMSTATE) struct DBusVMState { @@ -483,7 +483,6 @@ static const TypeInfo dbus_vmstate_info = { .parent = TYPE_OBJECT, .instance_size = sizeof(DBusVMState), .instance_finalize = dbus_vmstate_finalize, - .class_size = sizeof(DBusVMStateClass), .class_init = dbus_vmstate_class_init, .interfaces = (InterfaceInfo[]) { { TYPE_USER_CREATABLE }, diff --git a/backends/hostmem-file.c b/backends/hostmem-file.c index a3b2e8209e..40e1e5b3e3 100644 --- a/backends/hostmem-file.c +++ b/backends/hostmem-file.c @@ -19,9 +19,7 @@ #include "qom/object_interfaces.h" #include "qom/object.h" -typedef struct HostMemoryBackendFile HostMemoryBackendFile; -DECLARE_INSTANCE_CHECKER(HostMemoryBackendFile, MEMORY_BACKEND_FILE, - TYPE_MEMORY_BACKEND_FILE) +OBJECT_DECLARE_SIMPLE_TYPE(HostMemoryBackendFile, MEMORY_BACKEND_FILE) struct HostMemoryBackendFile { diff --git a/backends/hostmem-memfd.c b/backends/hostmem-memfd.c index 8cf6bcbda2..e5626d4330 100644 --- a/backends/hostmem-memfd.c +++ b/backends/hostmem-memfd.c @@ -21,9 +21,7 @@ #define TYPE_MEMORY_BACKEND_MEMFD "memory-backend-memfd" -typedef struct HostMemoryBackendMemfd HostMemoryBackendMemfd; -DECLARE_INSTANCE_CHECKER(HostMemoryBackendMemfd, MEMORY_BACKEND_MEMFD, - TYPE_MEMORY_BACKEND_MEMFD) +OBJECT_DECLARE_SIMPLE_TYPE(HostMemoryBackendMemfd, MEMORY_BACKEND_MEMFD) struct HostMemoryBackendMemfd { diff --git a/backends/rng-builtin.c b/backends/rng-builtin.c index 459be97a5a..f38dff117d 100644 --- a/backends/rng-builtin.c +++ b/backends/rng-builtin.c @@ -11,9 +11,7 @@ #include "qemu/guest-random.h" #include "qom/object.h" -typedef struct RngBuiltin RngBuiltin; -DECLARE_INSTANCE_CHECKER(RngBuiltin, RNG_BUILTIN, - TYPE_RNG_BUILTIN) +OBJECT_DECLARE_SIMPLE_TYPE(RngBuiltin, RNG_BUILTIN) struct RngBuiltin { RngBackend parent; diff --git a/backends/rng-egd.c b/backends/rng-egd.c index d905fe657c..20198ff26e 100644 --- a/backends/rng-egd.c +++ b/backends/rng-egd.c @@ -19,9 +19,7 @@ #include "qom/object.h" #define TYPE_RNG_EGD "rng-egd" -typedef struct RngEgd RngEgd; -DECLARE_INSTANCE_CHECKER(RngEgd, RNG_EGD, - TYPE_RNG_EGD) +OBJECT_DECLARE_SIMPLE_TYPE(RngEgd, RNG_EGD) struct RngEgd { RngBackend parent; diff --git a/backends/rng-random.c b/backends/rng-random.c index 32998d8ee7..245b12ab24 100644 --- a/backends/rng-random.c +++ b/backends/rng-random.c @@ -75,7 +75,7 @@ static void rng_random_opened(RngBackend *b, Error **errp) error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "filename", "a valid filename"); } else { - s->fd = qemu_open(s->filename, O_RDONLY | O_NONBLOCK); + s->fd = qemu_open_old(s->filename, O_RDONLY | O_NONBLOCK); if (s->fd == -1) { error_setg_file_open(errp, errno, s->filename); } diff --git a/backends/tpm/tpm_emulator.c b/backends/tpm/tpm_emulator.c index 13657d9aba..201cd38503 100644 --- a/backends/tpm/tpm_emulator.c +++ b/backends/tpm/tpm_emulator.c @@ -45,9 +45,7 @@ #include "qom/object.h" #define TYPE_TPM_EMULATOR "tpm-emulator" -typedef struct TPMEmulator TPMEmulator; -DECLARE_INSTANCE_CHECKER(TPMEmulator, TPM_EMULATOR, - TYPE_TPM_EMULATOR) +OBJECT_DECLARE_SIMPLE_TYPE(TPMEmulator, TPM_EMULATOR) #define TPM_EMULATOR_IMPLEMENTS_ALL_CAPS(S, cap) (((S)->caps & (cap)) == (cap)) diff --git a/backends/tpm/tpm_passthrough.c b/backends/tpm/tpm_passthrough.c index 10722e0a41..8f6f4998a5 100644 --- a/backends/tpm/tpm_passthrough.c +++ b/backends/tpm/tpm_passthrough.c @@ -36,9 +36,7 @@ #include "qom/object.h" #define TYPE_TPM_PASSTHROUGH "tpm-passthrough" -typedef struct TPMPassthruState TPMPassthruState; -DECLARE_INSTANCE_CHECKER(TPMPassthruState, TPM_PASSTHROUGH, - TYPE_TPM_PASSTHROUGH) +OBJECT_DECLARE_SIMPLE_TYPE(TPMPassthruState, TPM_PASSTHROUGH) /* data structures */ struct TPMPassthruState { @@ -218,7 +216,7 @@ static int tpm_passthrough_open_sysfs_cancel(TPMPassthruState *tpm_pt) char path[PATH_MAX]; if (tpm_pt->options->cancel_path) { - fd = qemu_open(tpm_pt->options->cancel_path, O_WRONLY); + fd = qemu_open_old(tpm_pt->options->cancel_path, O_WRONLY); if (fd < 0) { error_report("tpm_passthrough: Could not open TPM cancel path: %s", strerror(errno)); @@ -236,11 +234,11 @@ static int tpm_passthrough_open_sysfs_cancel(TPMPassthruState *tpm_pt) dev++; if (snprintf(path, sizeof(path), "/sys/class/tpm/%s/device/cancel", dev) < sizeof(path)) { - fd = qemu_open(path, O_WRONLY); + fd = qemu_open_old(path, O_WRONLY); if (fd < 0) { if (snprintf(path, sizeof(path), "/sys/class/misc/%s/device/cancel", dev) < sizeof(path)) { - fd = qemu_open(path, O_WRONLY); + fd = qemu_open_old(path, O_WRONLY); } } } @@ -272,7 +270,7 @@ tpm_passthrough_handle_device_opts(TPMPassthruState *tpm_pt, QemuOpts *opts) } tpm_pt->tpm_dev = value ? value : TPM_PASSTHROUGH_DEFAULT_DEVICE; - tpm_pt->tpm_fd = qemu_open(tpm_pt->tpm_dev, O_RDWR); + tpm_pt->tpm_fd = qemu_open_old(tpm_pt->tpm_dev, O_RDWR); if (tpm_pt->tpm_fd < 0) { error_report("Cannot access TPM device using '%s': %s", tpm_pt->tpm_dev, strerror(errno)); diff --git a/backends/vhost-user.c b/backends/vhost-user.c index 9e6e198546..ae8362d721 100644 --- a/backends/vhost-user.c +++ b/backends/vhost-user.c @@ -197,7 +197,6 @@ static const TypeInfo vhost_user_backend_info = { .instance_size = sizeof(VhostUserBackend), .instance_init = vhost_user_backend_init, .instance_finalize = vhost_user_backend_finalize, - .class_size = sizeof(VhostUserBackendClass), }; static void register_types(void) diff --git a/block/file-posix.c b/block/file-posix.c index 9a00d4190a..c63926d592 100644 --- a/block/file-posix.c +++ b/block/file-posix.c @@ -630,11 +630,10 @@ static int raw_open_common(BlockDriverState *bs, QDict *options, raw_parse_flags(bdrv_flags, &s->open_flags, false); s->fd = -1; - fd = qemu_open(filename, s->open_flags, 0644); + fd = qemu_open(filename, s->open_flags, errp); ret = fd < 0 ? -errno : 0; if (ret < 0) { - error_setg_file_open(errp, -ret, filename); if (ret == -EROFS) { ret = -EACCES; } @@ -1037,10 +1036,8 @@ static int raw_reconfigure_getfd(BlockDriverState *bs, int flags, const char *normalized_filename = bs->filename; ret = raw_normalize_devicepath(&normalized_filename, errp); if (ret >= 0) { - assert(!(*open_flags & O_CREAT)); - fd = qemu_open(normalized_filename, *open_flags); + fd = qemu_open(normalized_filename, *open_flags, errp); if (fd == -1) { - error_setg_errno(errp, errno, "Could not reopen file"); return -1; } } @@ -2411,10 +2408,9 @@ raw_co_create(BlockdevCreateOptions *options, Error **errp) } /* Create file */ - fd = qemu_open(file_opts->filename, O_RDWR | O_CREAT | O_BINARY, 0644); + fd = qemu_create(file_opts->filename, O_RDWR | O_BINARY, 0644, errp); if (fd < 0) { result = -errno; - error_setg_errno(errp, -result, "Could not create file"); goto out; } @@ -3335,7 +3331,7 @@ static bool setup_cdrom(char *bsd_path, Error **errp) for (index = 0; index < num_of_test_partitions; index++) { snprintf(test_partition, sizeof(test_partition), "%ss%d", bsd_path, index); - fd = qemu_open(test_partition, O_RDONLY | O_BINARY | O_LARGEFILE); + fd = qemu_open(test_partition, O_RDONLY | O_BINARY | O_LARGEFILE, NULL); if (fd >= 0) { partition_found = true; qemu_close(fd); @@ -3653,7 +3649,7 @@ static int cdrom_probe_device(const char *filename) int prio = 0; struct stat st; - fd = qemu_open(filename, O_RDONLY | O_NONBLOCK); + fd = qemu_open(filename, O_RDONLY | O_NONBLOCK, NULL); if (fd < 0) { goto out; } @@ -3787,7 +3783,7 @@ static int cdrom_reopen(BlockDriverState *bs) */ if (s->fd >= 0) qemu_close(s->fd); - fd = qemu_open(bs->filename, s->open_flags, 0644); + fd = qemu_open(bs->filename, s->open_flags, NULL); if (fd < 0) { s->fd = -1; return -EIO; diff --git a/block/file-win32.c b/block/file-win32.c index e2900c3a51..2642088bd6 100644 --- a/block/file-win32.c +++ b/block/file-win32.c @@ -596,10 +596,9 @@ static int raw_co_create(BlockdevCreateOptions *options, Error **errp) return -EINVAL; } - fd = qemu_open(file_opts->filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, - 0644); + fd = qemu_create(file_opts->filename, O_WRONLY | O_TRUNC | O_BINARY, + 0644, errp); if (fd < 0) { - error_setg_errno(errp, errno, "Could not create file"); return -EIO; } set_sparse(fd); diff --git a/block/vvfat.c b/block/vvfat.c index 36b53c8757..5abb90e7c7 100644 --- a/block/vvfat.c +++ b/block/vvfat.c @@ -1352,7 +1352,8 @@ static int open_file(BDRVVVFATState* s,mapping_t* mapping) if(!s->current_mapping || strcmp(s->current_mapping->path,mapping->path)) { /* open file */ - int fd = qemu_open(mapping->path, O_RDONLY | O_BINARY | O_LARGEFILE); + int fd = qemu_open_old(mapping->path, + O_RDONLY | O_BINARY | O_LARGEFILE); if(fd<0) return -1; vvfat_close_current_file(s); @@ -2513,7 +2514,7 @@ static int commit_one_file(BDRVVVFATState* s, for (i = s->cluster_size; i < offset; i += s->cluster_size) c = modified_fat_get(s, c); - fd = qemu_open(mapping->path, O_RDWR | O_CREAT | O_BINARY, 0666); + fd = qemu_open_old(mapping->path, O_RDWR | O_CREAT | O_BINARY, 0666); if (fd < 0) { fprintf(stderr, "Could not open %s... (%s, %d)\n", mapping->path, strerror(errno), errno); diff --git a/chardev/char-fd.c b/chardev/char-fd.c index c2d8101106..1cd62f2779 100644 --- a/chardev/char-fd.c +++ b/chardev/char-fd.c @@ -119,7 +119,7 @@ int qmp_chardev_open_file_source(char *src, int flags, Error **errp) { int fd = -1; - TFR(fd = qemu_open(src, flags, 0666)); + TFR(fd = qemu_open_old(src, flags, 0666)); if (fd == -1) { error_setg_file_open(errp, errno, src); } diff --git a/chardev/char-pipe.c b/chardev/char-pipe.c index fd12c9e63b..7eca5d9a56 100644 --- a/chardev/char-pipe.c +++ b/chardev/char-pipe.c @@ -132,8 +132,8 @@ static void qemu_chr_open_pipe(Chardev *chr, filename_in = g_strdup_printf("%s.in", filename); filename_out = g_strdup_printf("%s.out", filename); - TFR(fd_in = qemu_open(filename_in, O_RDWR | O_BINARY)); - TFR(fd_out = qemu_open(filename_out, O_RDWR | O_BINARY)); + TFR(fd_in = qemu_open_old(filename_in, O_RDWR | O_BINARY)); + TFR(fd_out = qemu_open_old(filename_out, O_RDWR | O_BINARY)); g_free(filename_in); g_free(filename_out); if (fd_in < 0 || fd_out < 0) { @@ -143,7 +143,7 @@ static void qemu_chr_open_pipe(Chardev *chr, if (fd_out >= 0) { close(fd_out); } - TFR(fd_in = fd_out = qemu_open(filename, O_RDWR | O_BINARY)); + TFR(fd_in = fd_out = qemu_open_old(filename, O_RDWR | O_BINARY)); if (fd_in < 0) { error_setg_file_open(errp, errno, filename); return; diff --git a/chardev/char.c b/chardev/char.c index 77e7ec814f..6b85099c03 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -235,7 +235,7 @@ static void qemu_char_open(Chardev *chr, ChardevBackend *backend, } else { flags |= O_TRUNC; } - chr->logfd = qemu_open(common->logfile, flags, 0666); + chr->logfd = qemu_open_old(common->logfile, flags, 0666); if (chr->logfd < 0) { error_setg_errno(errp, errno, "Unable to open logfile %s", @@ -280,6 +280,9 @@ supported_whpx_target() { return 1 } +deprecated_targets_list=ppc64abi32-linux-user,tilegx-linux-user,lm32-softmmu,unicore32-softmmu +deprecated_features="" + supported_target() { case "$1" in *-softmmu) @@ -301,6 +304,12 @@ supported_target() { return 1 ;; esac + + # if a deprecated target is enabled we note it here + if echo "$deprecated_targets_list" | grep -q "$1"; then + add_to deprecated_features $1 + fi + test "$tcg" = "yes" && return 0 supported_kvm_target "$1" && return 0 supported_xen_target "$1" && return 0 @@ -542,8 +551,6 @@ gettext="" bogus_os="no" malloc_trim="" -deprecated_features="" - # parse CC options first for opt do optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') @@ -1722,22 +1729,19 @@ if [ "$bsd_user" = "yes" ]; then mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak" fi -if test -z "$target_list_exclude" -a -z "$target_list"; then - # if the user doesn't specify anything lets skip deprecating stuff - target_list_exclude=ppc64abi32-linux-user +# If the user doesn't explicitly specify a deprecated target we will +# skip it. +if test -z "$target_list"; then + if test -z "$target_list_exclude"; then + target_list_exclude="$deprecated_targets_list" + else + target_list_exclude="$target_list_exclude,$deprecated_targets_list" + fi fi -exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g') for config in $mak_wilds; do target="$(basename "$config" .mak)" - exclude="no" - for excl in $exclude_list; do - if test "$excl" = "$target"; then - exclude="yes" - break; - fi - done - if test "$exclude" = "no"; then + if echo "$target_list_exclude" | grep -vq "$target"; then default_target_list="${default_target_list} $target" fi done @@ -7668,7 +7672,6 @@ case "$target_name" in TARGET_SYSTBL_ABI=common,nospu,32 echo "TARGET_ABI32=y" >> $config_target_mak gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" - deprecated_features="ppc64abi32 ${deprecated_features}" ;; riscv32) TARGET_BASE_ARCH=riscv diff --git a/crypto/secret_keyring.c b/crypto/secret_keyring.c index 8bfc58ebf4..10d8bc48a0 100644 --- a/crypto/secret_keyring.c +++ b/crypto/secret_keyring.c @@ -129,7 +129,6 @@ static const TypeInfo qcrypto_secret_info = { .parent = TYPE_QCRYPTO_SECRET_COMMON, .name = TYPE_QCRYPTO_SECRET_KEYRING, .instance_size = sizeof(QCryptoSecretKeyring), - .class_size = sizeof(QCryptoSecretKeyringClass), .class_init = qcrypto_secret_keyring_class_init, .interfaces = (InterfaceInfo[]) { { TYPE_USER_CREATABLE }, diff --git a/docs/hyperv.txt b/docs/hyperv.txt index 6518b716a9..5df00da54f 100644 --- a/docs/hyperv.txt +++ b/docs/hyperv.txt @@ -49,7 +49,7 @@ more efficiently. In particular, this enlightenment allows paravirtualized ====================== Enables paravirtualized spinlocks. The parameter indicates how many times spinlock acquisition should be attempted before indicating the situation to the -hypervisor. A special value 0xffffffff indicates "never to retry". +hypervisor. A special value 0xffffffff indicates "never notify". 3.4. hv-vpindex ================ diff --git a/docs/system/arm/aspeed.rst b/docs/system/arm/aspeed.rst index fe45840fbe..b7a176659c 100644 --- a/docs/system/arm/aspeed.rst +++ b/docs/system/arm/aspeed.rst @@ -83,3 +83,21 @@ The image should be attached as an MTD drive. Run : $ qemu-system-arm -M romulus-bmc -nic user \ -drive file=flash-romulus,format=raw,if=mtd -nographic + +Options specific to Aspeed machines are : + + * ``execute-in-place`` which emulates the boot from the CE0 flash + device by using the FMC controller to load the instructions, and + not simply from RAM. This takes a little longer. + + * ``fmc-model`` to change the FMC Flash model. FW needs support for + the chip model to boot. + + * ``spi-model`` to change the SPI Flash model. + +For instance, to start the ``ast2500-evb`` machine with a different +FMC chip and a bigger (64M) SPI chip, use : + +.. code-block:: bash + + -M ast2500-evb,fmc-model=mx25l25635e,spi-model=mx66u51235f diff --git a/dump/dump.c b/dump/dump.c index 383bc7876b..13fda440a4 100644 --- a/dump/dump.c +++ b/dump/dump.c @@ -1994,7 +1994,7 @@ void qmp_dump_guest_memory(bool paging, const char *file, #endif if (strstart(file, "file:", &p)) { - fd = qemu_open(p, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, S_IRUSR); + fd = qemu_open_old(p, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, S_IRUSR); if (fd < 0) { error_setg_file_open(errp, errno, p); return; diff --git a/fsdev/file-op-9p.h b/fsdev/file-op-9p.h index f2f7772c86..d51cec2f3b 100644 --- a/fsdev/file-op-9p.h +++ b/fsdev/file-op-9p.h @@ -64,6 +64,10 @@ typedef struct ExtendedOps { */ #define V9FS_REMAP_INODES 0x00000200 #define V9FS_FORBID_MULTIDEVS 0x00000400 +/* + * Disables certain performance warnings from being logged on host side. + */ +#define V9FS_NO_PERF_WARN 0x00000800 #define V9FS_SEC_MASK 0x0000003C diff --git a/hw/9pfs/9p-synth.c b/hw/9pfs/9p-synth.c index 7eb210ffa8..cec8c0eefc 100644 --- a/hw/9pfs/9p-synth.c +++ b/hw/9pfs/9p-synth.c @@ -541,6 +541,8 @@ static int synth_init(FsContext *ctx, Error **errp) QLIST_INIT(&synth_root.child); qemu_mutex_init(&synth_mutex); + ctx->export_flags |= V9FS_NO_PERF_WARN; + /* Add "." and ".." entries for root */ v9fs_add_dir_node(&synth_root, synth_root.attr->mode, "..", synth_root.attr, synth_root.attr->inode); diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c index 7bb994bbf2..741d222c3f 100644 --- a/hw/9pfs/9p.c +++ b/hw/9pfs/9p.c @@ -1353,6 +1353,15 @@ static void coroutine_fn v9fs_version(void *opaque) goto out; } + /* 8192 is the default msize of Linux clients */ + if (s->msize <= 8192 && !(s->ctx.export_flags & V9FS_NO_PERF_WARN)) { + warn_report_once( + "9p: degraded performance: a reasonable high msize should be " + "chosen on client/guest side (chosen msize is <= 8192). See " + "https://wiki.qemu.org/Documentation/9psetup#msize for details." + ); + } + marshal: err = pdu_marshal(pdu, offset, "ds", s->msize, &version); if (err < 0) { diff --git a/hw/9pfs/virtio-9p.h b/hw/9pfs/virtio-9p.h index ff70c5a971..20fa118f3a 100644 --- a/hw/9pfs/virtio-9p.h +++ b/hw/9pfs/virtio-9p.h @@ -13,10 +13,8 @@ struct V9fsVirtioState { VirtQueueElement *elems[MAX_REQ]; V9fsState state; }; -typedef struct V9fsVirtioState V9fsVirtioState; #define TYPE_VIRTIO_9P "virtio-9p-device" -DECLARE_INSTANCE_CHECKER(V9fsVirtioState, VIRTIO_9P, - TYPE_VIRTIO_9P) +OBJECT_DECLARE_SIMPLE_TYPE(V9fsVirtioState, VIRTIO_9P) #endif diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c index b8abdefa1c..6df400e1ee 100644 --- a/hw/acpi/generic_event_device.c +++ b/hw/acpi/generic_event_device.c @@ -20,6 +20,7 @@ #include "hw/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/error-report.h" +#include "sysemu/runstate.h" static const uint32_t ged_supported_events[] = { ACPI_GED_MEM_HOTPLUG_EVT, @@ -141,6 +142,14 @@ void build_ged_aml(Aml *table, const char *name, HotplugHandler *hotplug_dev, aml_append(table, dev); } +void acpi_dsdt_add_power_button(Aml *scope) +{ + Aml *dev = aml_device(ACPI_POWER_BUTTON_DEVICE); + aml_append(dev, aml_name_decl("_HID", aml_string("PNP0C0C"))); + aml_append(dev, aml_name_decl("_UID", aml_int(0))); + aml_append(scope, dev); +} + /* Memory read by the GED _EVT AML dynamic method */ static uint64_t ged_evt_read(void *opaque, hwaddr addr, unsigned size) { @@ -176,6 +185,45 @@ static const MemoryRegionOps ged_evt_ops = { }, }; +static uint64_t ged_regs_read(void *opaque, hwaddr addr, unsigned size) +{ + return 0; +} + +static void ged_regs_write(void *opaque, hwaddr addr, uint64_t data, + unsigned int size) +{ + bool slp_en; + int slp_typ; + + switch (addr) { + case ACPI_GED_REG_SLEEP_CTL: + slp_typ = (data >> 2) & 0x07; + slp_en = (data >> 5) & 0x01; + if (slp_en && slp_typ == 5) { + qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN); + } + return; + case ACPI_GED_REG_SLEEP_STS: + return; + case ACPI_GED_REG_RESET: + if (data == ACPI_GED_RESET_VALUE) { + qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN); + } + return; + } +} + +static const MemoryRegionOps ged_regs_ops = { + .read = ged_regs_read, + .write = ged_regs_write, + .endianness = DEVICE_LITTLE_ENDIAN, + .valid = { + .min_access_size = 1, + .max_access_size = 1, + }, +}; + static void acpi_ged_device_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { @@ -332,6 +380,10 @@ static void acpi_ged_initfn(Object *obj) sysbus_init_mmio(sbd, &s->container_memhp); acpi_memory_hotplug_init(&s->container_memhp, OBJECT(dev), &s->memhp_state, 0); + + memory_region_init_io(&ged_st->regs, obj, &ged_regs_ops, ged_st, + TYPE_ACPI_GED "-regs", ACPI_GED_REG_COUNT); + sysbus_init_mmio(sbd, &ged_st->regs); } static void acpi_ged_class_init(ObjectClass *class, void *data) diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c index 1574f7db3e..832f8fba82 100644 --- a/hw/acpi/piix4.c +++ b/hw/acpi/piix4.c @@ -91,10 +91,8 @@ struct PIIX4PMState { MemHotplugState acpi_memory_hotplug; }; -typedef struct PIIX4PMState PIIX4PMState; -DECLARE_INSTANCE_CHECKER(PIIX4PMState, PIIX4_PM, - TYPE_PIIX4_PM) +OBJECT_DECLARE_SIMPLE_TYPE(PIIX4PMState, PIIX4_PM) static void piix4_acpi_system_hot_add_init(MemoryRegion *parent, PCIBus *bus, PIIX4PMState *s); diff --git a/hw/alpha/typhoon.c b/hw/alpha/typhoon.c index d02b14d89f..a42b319812 100644 --- a/hw/alpha/typhoon.c +++ b/hw/alpha/typhoon.c @@ -50,9 +50,7 @@ typedef struct TyphoonPchip { TyphoonWindow win[4]; } TyphoonPchip; -typedef struct TyphoonState TyphoonState; -DECLARE_INSTANCE_CHECKER(TyphoonState, TYPHOON_PCI_HOST_BRIDGE, - TYPE_TYPHOON_PCI_HOST_BRIDGE) +OBJECT_DECLARE_SIMPLE_TYPE(TyphoonState, TYPHOON_PCI_HOST_BRIDGE) struct TyphoonState { PCIHostState parent_obj; diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c index 8bfb1c79dd..bdb981d2f8 100644 --- a/hw/arm/aspeed.c +++ b/hw/arm/aspeed.c @@ -41,6 +41,8 @@ struct AspeedMachineState { MemoryRegion ram_container; MemoryRegion max_ram; bool mmio_exec; + char *fmc_model; + char *spi_model; }; /* Palmetto hardware value: 0x120CE416 */ @@ -332,8 +334,10 @@ static void aspeed_machine_init(MachineState *machine) "max_ram", max_ram_size - ram_size); memory_region_add_subregion(&bmc->ram_container, ram_size, &bmc->max_ram); - aspeed_board_init_flashes(&bmc->soc.fmc, amc->fmc_model); - aspeed_board_init_flashes(&bmc->soc.spi[0], amc->spi_model); + aspeed_board_init_flashes(&bmc->soc.fmc, bmc->fmc_model ? + bmc->fmc_model : amc->fmc_model); + aspeed_board_init_flashes(&bmc->soc.spi[0], bmc->spi_model ? + bmc->spi_model : amc->spi_model); /* Install first FMC flash content as a boot rom. */ if (drive0) { @@ -570,6 +574,34 @@ static void aspeed_machine_instance_init(Object *obj) ASPEED_MACHINE(obj)->mmio_exec = false; } +static char *aspeed_get_fmc_model(Object *obj, Error **errp) +{ + AspeedMachineState *bmc = ASPEED_MACHINE(obj); + return g_strdup(bmc->fmc_model); +} + +static void aspeed_set_fmc_model(Object *obj, const char *value, Error **errp) +{ + AspeedMachineState *bmc = ASPEED_MACHINE(obj); + + g_free(bmc->fmc_model); + bmc->fmc_model = g_strdup(value); +} + +static char *aspeed_get_spi_model(Object *obj, Error **errp) +{ + AspeedMachineState *bmc = ASPEED_MACHINE(obj); + return g_strdup(bmc->spi_model); +} + +static void aspeed_set_spi_model(Object *obj, const char *value, Error **errp) +{ + AspeedMachineState *bmc = ASPEED_MACHINE(obj); + + g_free(bmc->spi_model); + bmc->spi_model = g_strdup(value); +} + static void aspeed_machine_class_props_init(ObjectClass *oc) { object_class_property_add_bool(oc, "execute-in-place", @@ -577,6 +609,15 @@ static void aspeed_machine_class_props_init(ObjectClass *oc) aspeed_set_mmio_exec); object_class_property_set_description(oc, "execute-in-place", "boot directly from CE0 flash device"); + + object_class_property_add_str(oc, "fmc-model", aspeed_get_fmc_model, + aspeed_set_fmc_model); + object_class_property_set_description(oc, "fmc-model", + "Change the FMC Flash model"); + object_class_property_add_str(oc, "spi-model", aspeed_get_spi_model, + aspeed_set_spi_model); + object_class_property_set_description(oc, "spi-model", + "Change the SPI Flash model"); } static int aspeed_soc_num_cpus(const char *soc_name) diff --git a/hw/arm/aspeed_ast2600.c b/hw/arm/aspeed_ast2600.c index 9d95e42143..1450bde7cf 100644 --- a/hw/arm/aspeed_ast2600.c +++ b/hw/arm/aspeed_ast2600.c @@ -325,11 +325,9 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp) } /* UART - attach an 8250 to the IO space as our UART5 */ - if (serial_hd(0)) { - qemu_irq uart5 = aspeed_soc_get_irq(s, ASPEED_DEV_UART5); - serial_mm_init(get_system_memory(), sc->memmap[ASPEED_DEV_UART5], 2, - uart5, 38400, serial_hd(0), DEVICE_LITTLE_ENDIAN); - } + serial_mm_init(get_system_memory(), sc->memmap[ASPEED_DEV_UART5], 2, + aspeed_soc_get_irq(s, ASPEED_DEV_UART5), + 38400, serial_hd(0), DEVICE_LITTLE_ENDIAN); /* I2C */ object_property_set_link(OBJECT(&s->i2c), "dram", OBJECT(s->dram_mr), diff --git a/hw/arm/aspeed_soc.c b/hw/arm/aspeed_soc.c index 35be126db6..7eefd54ac0 100644 --- a/hw/arm/aspeed_soc.c +++ b/hw/arm/aspeed_soc.c @@ -283,11 +283,9 @@ static void aspeed_soc_realize(DeviceState *dev, Error **errp) } /* UART - attach an 8250 to the IO space as our UART5 */ - if (serial_hd(0)) { - qemu_irq uart5 = aspeed_soc_get_irq(s, ASPEED_DEV_UART5); - serial_mm_init(get_system_memory(), sc->memmap[ASPEED_DEV_UART5], 2, - uart5, 38400, serial_hd(0), DEVICE_LITTLE_ENDIAN); - } + serial_mm_init(get_system_memory(), sc->memmap[ASPEED_DEV_UART5], 2, + aspeed_soc_get_irq(s, ASPEED_DEV_UART5), 38400, + serial_hd(0), DEVICE_LITTLE_ENDIAN); /* I2C */ object_property_set_link(OBJECT(&s->i2c), "dram", OBJECT(s->dram_mr), diff --git a/hw/arm/collie.c b/hw/arm/collie.c index a49f4a1c7c..8df31e2793 100644 --- a/hw/arm/collie.c +++ b/hw/arm/collie.c @@ -25,11 +25,9 @@ struct CollieMachineState { StrongARMState *sa1110; }; -typedef struct CollieMachineState CollieMachineState; #define TYPE_COLLIE_MACHINE MACHINE_TYPE_NAME("collie") -DECLARE_INSTANCE_CHECKER(CollieMachineState, COLLIE_MACHINE, - TYPE_COLLIE_MACHINE) +OBJECT_DECLARE_SIMPLE_TYPE(CollieMachineState, COLLIE_MACHINE) static struct arm_boot_info collie_binfo = { .loader_start = SA_SDCS0, diff --git a/hw/arm/highbank.c b/hw/arm/highbank.c index e2ace803ef..7da984171b 100644 --- a/hw/arm/highbank.c +++ b/hw/arm/highbank.c @@ -156,9 +156,7 @@ static const MemoryRegionOps hb_mem_ops = { }; #define TYPE_HIGHBANK_REGISTERS "highbank-regs" -typedef struct HighbankRegsState HighbankRegsState; -DECLARE_INSTANCE_CHECKER(HighbankRegsState, HIGHBANK_REGISTERS, - TYPE_HIGHBANK_REGISTERS) +OBJECT_DECLARE_SIMPLE_TYPE(HighbankRegsState, HIGHBANK_REGISTERS) struct HighbankRegsState { /*< private >*/ diff --git a/hw/arm/integratorcp.c b/hw/arm/integratorcp.c index 19989b61b9..de670b08a9 100644 --- a/hw/arm/integratorcp.c +++ b/hw/arm/integratorcp.c @@ -29,9 +29,7 @@ #include "qom/object.h" #define TYPE_INTEGRATOR_CM "integrator_core" -typedef struct IntegratorCMState IntegratorCMState; -DECLARE_INSTANCE_CHECKER(IntegratorCMState, INTEGRATOR_CM, - TYPE_INTEGRATOR_CM) +OBJECT_DECLARE_SIMPLE_TYPE(IntegratorCMState, INTEGRATOR_CM) struct IntegratorCMState { /*< private >*/ @@ -328,9 +326,7 @@ static void integratorcm_realize(DeviceState *d, Error **errp) /* Primary interrupt controller. */ #define TYPE_INTEGRATOR_PIC "integrator_pic" -typedef struct icp_pic_state icp_pic_state; -DECLARE_INSTANCE_CHECKER(icp_pic_state, INTEGRATOR_PIC, - TYPE_INTEGRATOR_PIC) +OBJECT_DECLARE_SIMPLE_TYPE(icp_pic_state, INTEGRATOR_PIC) struct icp_pic_state { /*< private >*/ @@ -468,9 +464,7 @@ static void icp_pic_init(Object *obj) /* CP control registers. */ #define TYPE_ICP_CONTROL_REGS "icp-ctrl-regs" -typedef struct ICPCtrlRegsState ICPCtrlRegsState; -DECLARE_INSTANCE_CHECKER(ICPCtrlRegsState, ICP_CONTROL_REGS, - TYPE_ICP_CONTROL_REGS) +OBJECT_DECLARE_SIMPLE_TYPE(ICPCtrlRegsState, ICP_CONTROL_REGS) struct ICPCtrlRegsState { /*< private >*/ diff --git a/hw/arm/microbit.c b/hw/arm/microbit.c index 9a4a3d357a..0947491cb9 100644 --- a/hw/arm/microbit.c +++ b/hw/arm/microbit.c @@ -26,12 +26,10 @@ struct MicrobitMachineState { NRF51State nrf51; MicrobitI2CState i2c; }; -typedef struct MicrobitMachineState MicrobitMachineState; #define TYPE_MICROBIT_MACHINE MACHINE_TYPE_NAME("microbit") -DECLARE_INSTANCE_CHECKER(MicrobitMachineState, MICROBIT_MACHINE, - TYPE_MICROBIT_MACHINE) +OBJECT_DECLARE_SIMPLE_TYPE(MicrobitMachineState, MICROBIT_MACHINE) static void microbit_init(MachineState *machine) { diff --git a/hw/arm/mps2-tz.c b/hw/arm/mps2-tz.c index dbf7d63dc8..3707876d6d 100644 --- a/hw/arm/mps2-tz.c +++ b/hw/arm/mps2-tz.c @@ -77,7 +77,6 @@ struct MPS2TZMachineClass { uint32_t scc_id; const char *armsse_type; }; -typedef struct MPS2TZMachineClass MPS2TZMachineClass; struct MPS2TZMachineState { MachineState parent; @@ -102,14 +101,12 @@ struct MPS2TZMachineState { DeviceState *lan9118; SplitIRQ cpu_irq_splitter[MPS2TZ_NUMIRQ]; }; -typedef struct MPS2TZMachineState MPS2TZMachineState; #define TYPE_MPS2TZ_MACHINE "mps2tz" #define TYPE_MPS2TZ_AN505_MACHINE MACHINE_TYPE_NAME("mps2-an505") #define TYPE_MPS2TZ_AN521_MACHINE MACHINE_TYPE_NAME("mps2-an521") -DECLARE_OBJ_CHECKERS(MPS2TZMachineState, MPS2TZMachineClass, - MPS2TZ_MACHINE, TYPE_MPS2TZ_MACHINE) +OBJECT_DECLARE_TYPE(MPS2TZMachineState, MPS2TZMachineClass, MPS2TZ_MACHINE) /* Main SYSCLK frequency in Hz */ #define SYSCLK_FRQ 20000000 diff --git a/hw/arm/mps2.c b/hw/arm/mps2.c index 5d47160850..9a8b23c64c 100644 --- a/hw/arm/mps2.c +++ b/hw/arm/mps2.c @@ -63,7 +63,6 @@ struct MPS2MachineClass { hwaddr ethernet_base; hwaddr psram_base; }; -typedef struct MPS2MachineClass MPS2MachineClass; struct MPS2MachineState { MachineState parent; @@ -85,7 +84,6 @@ struct MPS2MachineState { CMSDKAPBDualTimer dualtimer; CMSDKAPBWatchdog watchdog; }; -typedef struct MPS2MachineState MPS2MachineState; #define TYPE_MPS2_MACHINE "mps2" #define TYPE_MPS2_AN385_MACHINE MACHINE_TYPE_NAME("mps2-an385") @@ -93,8 +91,7 @@ typedef struct MPS2MachineState MPS2MachineState; #define TYPE_MPS2_AN500_MACHINE MACHINE_TYPE_NAME("mps2-an500") #define TYPE_MPS2_AN511_MACHINE MACHINE_TYPE_NAME("mps2-an511") -DECLARE_OBJ_CHECKERS(MPS2MachineState, MPS2MachineClass, - MPS2_MACHINE, TYPE_MPS2_MACHINE) +OBJECT_DECLARE_TYPE(MPS2MachineState, MPS2MachineClass, MPS2_MACHINE) /* Main SYSCLK frequency in Hz */ #define SYSCLK_FRQ 25000000 diff --git a/hw/arm/musca.c b/hw/arm/musca.c index 16015255c8..b50157f63a 100644 --- a/hw/arm/musca.c +++ b/hw/arm/musca.c @@ -55,7 +55,6 @@ struct MuscaMachineClass { const MPCInfo *mpc_info; int num_mpcs; }; -typedef struct MuscaMachineClass MuscaMachineClass; struct MuscaMachineState { MachineState parent; @@ -84,14 +83,12 @@ struct MuscaMachineState { UnimplementedDeviceState gpio; UnimplementedDeviceState cryptoisland; }; -typedef struct MuscaMachineState MuscaMachineState; #define TYPE_MUSCA_MACHINE "musca" #define TYPE_MUSCA_A_MACHINE MACHINE_TYPE_NAME("musca-a") #define TYPE_MUSCA_B1_MACHINE MACHINE_TYPE_NAME("musca-b1") -DECLARE_OBJ_CHECKERS(MuscaMachineState, MuscaMachineClass, - MUSCA_MACHINE, TYPE_MUSCA_MACHINE) +OBJECT_DECLARE_TYPE(MuscaMachineState, MuscaMachineClass, MUSCA_MACHINE) /* * Main SYSCLK frequency in Hz diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c index 2117a04171..5eb3f969fb 100644 --- a/hw/arm/musicpal.c +++ b/hw/arm/musicpal.c @@ -155,9 +155,7 @@ typedef struct mv88w8618_rx_desc { } mv88w8618_rx_desc; #define TYPE_MV88W8618_ETH "mv88w8618_eth" -typedef struct mv88w8618_eth_state mv88w8618_eth_state; -DECLARE_INSTANCE_CHECKER(mv88w8618_eth_state, MV88W8618_ETH, - TYPE_MV88W8618_ETH) +OBJECT_DECLARE_SIMPLE_TYPE(mv88w8618_eth_state, MV88W8618_ETH) struct mv88w8618_eth_state { /*< private >*/ @@ -485,9 +483,7 @@ static const TypeInfo mv88w8618_eth_info = { #define MP_LCD_TEXTCOLOR 0xe0e0ff /* RRGGBB */ #define TYPE_MUSICPAL_LCD "musicpal_lcd" -typedef struct musicpal_lcd_state musicpal_lcd_state; -DECLARE_INSTANCE_CHECKER(musicpal_lcd_state, MUSICPAL_LCD, - TYPE_MUSICPAL_LCD) +OBJECT_DECLARE_SIMPLE_TYPE(musicpal_lcd_state, MUSICPAL_LCD) struct musicpal_lcd_state { /*< private >*/ @@ -703,9 +699,7 @@ static const TypeInfo musicpal_lcd_info = { #define MP_PIC_ENABLE_CLR 0x0C #define TYPE_MV88W8618_PIC "mv88w8618_pic" -typedef struct mv88w8618_pic_state mv88w8618_pic_state; -DECLARE_INSTANCE_CHECKER(mv88w8618_pic_state, MV88W8618_PIC, - TYPE_MV88W8618_PIC) +OBJECT_DECLARE_SIMPLE_TYPE(mv88w8618_pic_state, MV88W8618_PIC) struct mv88w8618_pic_state { /*< private >*/ @@ -841,9 +835,7 @@ typedef struct mv88w8618_timer_state { } mv88w8618_timer_state; #define TYPE_MV88W8618_PIT "mv88w8618_pit" -typedef struct mv88w8618_pit_state mv88w8618_pit_state; -DECLARE_INSTANCE_CHECKER(mv88w8618_pit_state, MV88W8618_PIT, - TYPE_MV88W8618_PIT) +OBJECT_DECLARE_SIMPLE_TYPE(mv88w8618_pit_state, MV88W8618_PIT) struct mv88w8618_pit_state { /*< private >*/ @@ -1009,9 +1001,7 @@ static const TypeInfo mv88w8618_pit_info = { #define MP_FLASHCFG_CFGR0 0x04 #define TYPE_MV88W8618_FLASHCFG "mv88w8618_flashcfg" -typedef struct mv88w8618_flashcfg_state mv88w8618_flashcfg_state; -DECLARE_INSTANCE_CHECKER(mv88w8618_flashcfg_state, MV88W8618_FLASHCFG, - TYPE_MV88W8618_FLASHCFG) +OBJECT_DECLARE_SIMPLE_TYPE(mv88w8618_flashcfg_state, MV88W8618_FLASHCFG) struct mv88w8618_flashcfg_state { /*< private >*/ @@ -1100,11 +1090,9 @@ struct MusicPalMiscState { SysBusDevice parent_obj; MemoryRegion iomem; }; -typedef struct MusicPalMiscState MusicPalMiscState; #define TYPE_MUSICPAL_MISC "musicpal-misc" -DECLARE_INSTANCE_CHECKER(MusicPalMiscState, MUSICPAL_MISC, - TYPE_MUSICPAL_MISC) +OBJECT_DECLARE_SIMPLE_TYPE(MusicPalMiscState, MUSICPAL_MISC) static uint64_t musicpal_misc_read(void *opaque, hwaddr offset, unsigned size) @@ -1209,9 +1197,7 @@ static void mv88w8618_wlan_realize(DeviceState *dev, Error **errp) #define MP_OE_LCD_BRIGHTNESS 0x0007 #define TYPE_MUSICPAL_GPIO "musicpal_gpio" -typedef struct musicpal_gpio_state musicpal_gpio_state; -DECLARE_INSTANCE_CHECKER(musicpal_gpio_state, MUSICPAL_GPIO, - TYPE_MUSICPAL_GPIO) +OBJECT_DECLARE_SIMPLE_TYPE(musicpal_gpio_state, MUSICPAL_GPIO) struct musicpal_gpio_state { /*< private >*/ @@ -1460,9 +1446,7 @@ static const TypeInfo musicpal_gpio_info = { #define MP_KEY_BTN_NAVIGATION (1 << 7) #define TYPE_MUSICPAL_KEY "musicpal_key" -typedef struct musicpal_key_state musicpal_key_state; -DECLARE_INSTANCE_CHECKER(musicpal_key_state, MUSICPAL_KEY, - TYPE_MUSICPAL_KEY) +OBJECT_DECLARE_SIMPLE_TYPE(musicpal_key_state, MUSICPAL_KEY) struct musicpal_key_state { /*< private >*/ diff --git a/hw/arm/palm.c b/hw/arm/palm.c index abc6495489..4e3dc5fbbf 100644 --- a/hw/arm/palm.c +++ b/hw/arm/palm.c @@ -133,9 +133,7 @@ static void palmte_button_event(void *opaque, int keycode) */ #define TYPE_PALM_MISC_GPIO "palm-misc-gpio" -typedef struct PalmMiscGPIOState PalmMiscGPIOState; -DECLARE_INSTANCE_CHECKER(PalmMiscGPIOState, PALM_MISC_GPIO, - TYPE_PALM_MISC_GPIO) +OBJECT_DECLARE_SIMPLE_TYPE(PalmMiscGPIOState, PALM_MISC_GPIO) struct PalmMiscGPIOState { SysBusDevice parent_obj; diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c index 33074dbf82..591776ba88 100644 --- a/hw/arm/pxa2xx.c +++ b/hw/arm/pxa2xx.c @@ -470,9 +470,7 @@ static const VMStateDescription vmstate_pxa2xx_mm = { }; #define TYPE_PXA2XX_SSP "pxa2xx-ssp" -typedef struct PXA2xxSSPState PXA2xxSSPState; -DECLARE_INSTANCE_CHECKER(PXA2xxSSPState, PXA2XX_SSP, - TYPE_PXA2XX_SSP) +OBJECT_DECLARE_SIMPLE_TYPE(PXA2xxSSPState, PXA2XX_SSP) /* Synchronous Serial Ports */ struct PXA2xxSSPState { @@ -811,9 +809,7 @@ static void pxa2xx_ssp_init(Object *obj) #define PIAR 0x38 /* RTC Periodic Interrupt Alarm register */ #define TYPE_PXA2XX_RTC "pxa2xx_rtc" -typedef struct PXA2xxRTCState PXA2xxRTCState; -DECLARE_INSTANCE_CHECKER(PXA2xxRTCState, PXA2XX_RTC, - TYPE_PXA2XX_RTC) +OBJECT_DECLARE_SIMPLE_TYPE(PXA2xxRTCState, PXA2XX_RTC) struct PXA2xxRTCState { /*< private >*/ @@ -1245,9 +1241,7 @@ static const TypeInfo pxa2xx_rtc_sysbus_info = { /* I2C Interface */ #define TYPE_PXA2XX_I2C_SLAVE "pxa2xx-i2c-slave" -typedef struct PXA2xxI2CSlaveState PXA2xxI2CSlaveState; -DECLARE_INSTANCE_CHECKER(PXA2xxI2CSlaveState, PXA2XX_I2C_SLAVE, - TYPE_PXA2XX_I2C_SLAVE) +OBJECT_DECLARE_SIMPLE_TYPE(PXA2xxI2CSlaveState, PXA2XX_I2C_SLAVE) struct PXA2xxI2CSlaveState { I2CSlave parent_obj; diff --git a/hw/arm/pxa2xx_gpio.c b/hw/arm/pxa2xx_gpio.c index 16bbe4fb70..e7c3d99224 100644 --- a/hw/arm/pxa2xx_gpio.c +++ b/hw/arm/pxa2xx_gpio.c @@ -22,9 +22,7 @@ #define PXA2XX_GPIO_BANKS 4 #define TYPE_PXA2XX_GPIO "pxa2xx-gpio" -typedef struct PXA2xxGPIOInfo PXA2xxGPIOInfo; -DECLARE_INSTANCE_CHECKER(PXA2xxGPIOInfo, PXA2XX_GPIO, - TYPE_PXA2XX_GPIO) +OBJECT_DECLARE_SIMPLE_TYPE(PXA2xxGPIOInfo, PXA2XX_GPIO) struct PXA2xxGPIOInfo { /*< private >*/ diff --git a/hw/arm/pxa2xx_pic.c b/hw/arm/pxa2xx_pic.c index cb52a9dff3..cf6cb2a373 100644 --- a/hw/arm/pxa2xx_pic.c +++ b/hw/arm/pxa2xx_pic.c @@ -38,9 +38,7 @@ #define PXA2XX_PIC_SRCS 40 #define TYPE_PXA2XX_PIC "pxa2xx_pic" -typedef struct PXA2xxPICState PXA2xxPICState; -DECLARE_INSTANCE_CHECKER(PXA2xxPICState, PXA2XX_PIC, - TYPE_PXA2XX_PIC) +OBJECT_DECLARE_SIMPLE_TYPE(PXA2xxPICState, PXA2XX_PIC) struct PXA2xxPICState { /*< private >*/ diff --git a/hw/arm/sbsa-ref.c b/hw/arm/sbsa-ref.c index ac68b4640d..bcb2cb4761 100644 --- a/hw/arm/sbsa-ref.c +++ b/hw/arm/sbsa-ref.c @@ -95,11 +95,9 @@ struct SBSAMachineState { DeviceState *gic; PFlashCFI01 *flash[2]; }; -typedef struct SBSAMachineState SBSAMachineState; #define TYPE_SBSA_MACHINE MACHINE_TYPE_NAME("sbsa-ref") -DECLARE_INSTANCE_CHECKER(SBSAMachineState, SBSA_MACHINE, - TYPE_SBSA_MACHINE) +OBJECT_DECLARE_SIMPLE_TYPE(SBSAMachineState, SBSA_MACHINE) static const MemMapEntry sbsa_ref_memmap[] = { /* 512M boot ROM */ diff --git a/hw/arm/spitz.c b/hw/arm/spitz.c index a7ad667f06..32bdeacfd3 100644 --- a/hw/arm/spitz.c +++ b/hw/arm/spitz.c @@ -43,7 +43,6 @@ struct SpitzMachineClass { enum spitz_model_e model; int arm_id; }; -typedef struct SpitzMachineClass SpitzMachineClass; struct SpitzMachineState { MachineState parent; @@ -56,11 +55,9 @@ struct SpitzMachineState { DeviceState *scp1; DeviceState *misc_gpio; }; -typedef struct SpitzMachineState SpitzMachineState; #define TYPE_SPITZ_MACHINE "spitz-common" -DECLARE_OBJ_CHECKERS(SpitzMachineState, SpitzMachineClass, - SPITZ_MACHINE, TYPE_SPITZ_MACHINE) +OBJECT_DECLARE_TYPE(SpitzMachineState, SpitzMachineClass, SPITZ_MACHINE) #define zaurus_printf(format, ...) \ fprintf(stderr, "%s: " format, __func__, ##__VA_ARGS__) @@ -84,9 +81,7 @@ DECLARE_OBJ_CHECKERS(SpitzMachineState, SpitzMachineClass, #define FLASHCTL_NCE (FLASHCTL_CE0 | FLASHCTL_CE1) #define TYPE_SL_NAND "sl-nand" -typedef struct SLNANDState SLNANDState; -DECLARE_INSTANCE_CHECKER(SLNANDState, SL_NAND, - TYPE_SL_NAND) +OBJECT_DECLARE_SIMPLE_TYPE(SLNANDState, SL_NAND) struct SLNANDState { SysBusDevice parent_obj; @@ -262,9 +257,7 @@ static const int spitz_gpiomap[5] = { }; #define TYPE_SPITZ_KEYBOARD "spitz-keyboard" -typedef struct SpitzKeyboardState SpitzKeyboardState; -DECLARE_INSTANCE_CHECKER(SpitzKeyboardState, SPITZ_KEYBOARD, - TYPE_SPITZ_KEYBOARD) +OBJECT_DECLARE_SIMPLE_TYPE(SpitzKeyboardState, SPITZ_KEYBOARD) struct SpitzKeyboardState { SysBusDevice parent_obj; @@ -582,9 +575,7 @@ static void spitz_keyboard_realize(DeviceState *dev, Error **errp) #define LCDTG_POLCTRL 0x07 #define TYPE_SPITZ_LCDTG "spitz-lcdtg" -typedef struct SpitzLCDTG SpitzLCDTG; -DECLARE_INSTANCE_CHECKER(SpitzLCDTG, SPITZ_LCDTG, - TYPE_SPITZ_LCDTG) +OBJECT_DECLARE_SIMPLE_TYPE(SpitzLCDTG, SPITZ_LCDTG) struct SpitzLCDTG { SSISlave ssidev; @@ -672,9 +663,7 @@ static void spitz_lcdtg_realize(SSISlave *ssi, Error **errp) #define SPITZ_GPIO_TP_INT 11 #define TYPE_CORGI_SSP "corgi-ssp" -typedef struct CorgiSSPState CorgiSSPState; -DECLARE_INSTANCE_CHECKER(CorgiSSPState, CORGI_SSP, - TYPE_CORGI_SSP) +OBJECT_DECLARE_SIMPLE_TYPE(CorgiSSPState, CORGI_SSP) /* "Demux" the signal based on current chipselect */ struct CorgiSSPState { @@ -825,9 +814,7 @@ static void spitz_akita_i2c_setup(PXA2xxState *cpu) * + named GPIO output "adc-temp": the ADC value, to be wired up to the max111x */ #define TYPE_SPITZ_MISC_GPIO "spitz-misc-gpio" -typedef struct SpitzMiscGPIOState SpitzMiscGPIOState; -DECLARE_INSTANCE_CHECKER(SpitzMiscGPIOState, SPITZ_MISC_GPIO, - TYPE_SPITZ_MISC_GPIO) +OBJECT_DECLARE_SIMPLE_TYPE(SpitzMiscGPIOState, SPITZ_MISC_GPIO) struct SpitzMiscGPIOState { SysBusDevice parent_obj; diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c index d6fc4a4681..1237f5af02 100644 --- a/hw/arm/stellaris.c +++ b/hw/arm/stellaris.c @@ -58,9 +58,7 @@ typedef const struct { /* General purpose timer module. */ #define TYPE_STELLARIS_GPTM "stellaris-gptm" -typedef struct gptm_state gptm_state; -DECLARE_INSTANCE_CHECKER(gptm_state, STELLARIS_GPTM, - TYPE_STELLARIS_GPTM) +OBJECT_DECLARE_SIMPLE_TYPE(gptm_state, STELLARIS_GPTM) struct gptm_state { SysBusDevice parent_obj; @@ -721,9 +719,7 @@ static int stellaris_sys_init(uint32_t base, qemu_irq irq, /* I2C controller. */ #define TYPE_STELLARIS_I2C "stellaris-i2c" -typedef struct stellaris_i2c_state stellaris_i2c_state; -DECLARE_INSTANCE_CHECKER(stellaris_i2c_state, STELLARIS_I2C, - TYPE_STELLARIS_I2C) +OBJECT_DECLARE_SIMPLE_TYPE(stellaris_i2c_state, STELLARIS_I2C) struct stellaris_i2c_state { SysBusDevice parent_obj; diff --git a/hw/arm/strongarm.c b/hw/arm/strongarm.c index 0fe829b868..d7133eea6f 100644 --- a/hw/arm/strongarm.c +++ b/hw/arm/strongarm.c @@ -85,9 +85,7 @@ static struct { /* Interrupt Controller */ #define TYPE_STRONGARM_PIC "strongarm_pic" -typedef struct StrongARMPICState StrongARMPICState; -DECLARE_INSTANCE_CHECKER(StrongARMPICState, STRONGARM_PIC, - TYPE_STRONGARM_PIC) +OBJECT_DECLARE_SIMPLE_TYPE(StrongARMPICState, STRONGARM_PIC) struct StrongARMPICState { SysBusDevice parent_obj; @@ -254,9 +252,7 @@ static const TypeInfo strongarm_pic_info = { * f = 32 768 / (RTTR_trim + 1) */ #define TYPE_STRONGARM_RTC "strongarm-rtc" -typedef struct StrongARMRTCState StrongARMRTCState; -DECLARE_INSTANCE_CHECKER(StrongARMRTCState, STRONGARM_RTC, - TYPE_STRONGARM_RTC) +OBJECT_DECLARE_SIMPLE_TYPE(StrongARMRTCState, STRONGARM_RTC) struct StrongARMRTCState { SysBusDevice parent_obj; @@ -481,9 +477,7 @@ static const TypeInfo strongarm_rtc_sysbus_info = { #define GAFR 0x1c #define TYPE_STRONGARM_GPIO "strongarm-gpio" -typedef struct StrongARMGPIOInfo StrongARMGPIOInfo; -DECLARE_INSTANCE_CHECKER(StrongARMGPIOInfo, STRONGARM_GPIO, - TYPE_STRONGARM_GPIO) +OBJECT_DECLARE_SIMPLE_TYPE(StrongARMGPIOInfo, STRONGARM_GPIO) struct StrongARMGPIOInfo { SysBusDevice busdev; @@ -720,9 +714,7 @@ static const TypeInfo strongarm_gpio_info = { #define PPFR 0x10 #define TYPE_STRONGARM_PPC "strongarm-ppc" -typedef struct StrongARMPPCInfo StrongARMPPCInfo; -DECLARE_INSTANCE_CHECKER(StrongARMPPCInfo, STRONGARM_PPC, - TYPE_STRONGARM_PPC) +OBJECT_DECLARE_SIMPLE_TYPE(StrongARMPPCInfo, STRONGARM_PPC) struct StrongARMPPCInfo { SysBusDevice parent_obj; @@ -921,9 +913,7 @@ static const TypeInfo strongarm_ppc_info = { #define RX_FIFO_ROR (1 << 10) #define TYPE_STRONGARM_UART "strongarm-uart" -typedef struct StrongARMUARTState StrongARMUARTState; -DECLARE_INSTANCE_CHECKER(StrongARMUARTState, STRONGARM_UART, - TYPE_STRONGARM_UART) +OBJECT_DECLARE_SIMPLE_TYPE(StrongARMUARTState, STRONGARM_UART) struct StrongARMUARTState { SysBusDevice parent_obj; @@ -1353,9 +1343,7 @@ static const TypeInfo strongarm_uart_info = { /* Synchronous Serial Ports */ #define TYPE_STRONGARM_SSP "strongarm-ssp" -typedef struct StrongARMSSPState StrongARMSSPState; -DECLARE_INSTANCE_CHECKER(StrongARMSSPState, STRONGARM_SSP, - TYPE_STRONGARM_SSP) +OBJECT_DECLARE_SIMPLE_TYPE(StrongARMSSPState, STRONGARM_SSP) struct StrongARMSSPState { SysBusDevice parent_obj; diff --git a/hw/arm/tosa.c b/hw/arm/tosa.c index 2ef6c7b288..c196f0d2f8 100644 --- a/hw/arm/tosa.c +++ b/hw/arm/tosa.c @@ -75,9 +75,7 @@ static void tosa_microdrive_attach(PXA2xxState *cpu) */ #define TYPE_TOSA_MISC_GPIO "tosa-misc-gpio" -typedef struct TosaMiscGPIOState TosaMiscGPIOState; -DECLARE_INSTANCE_CHECKER(TosaMiscGPIOState, TOSA_MISC_GPIO, - TYPE_TOSA_MISC_GPIO) +OBJECT_DECLARE_SIMPLE_TYPE(TosaMiscGPIOState, TOSA_MISC_GPIO) struct TosaMiscGPIOState { SysBusDevice parent_obj; @@ -172,9 +170,7 @@ static void tosa_ssp_realize(SSISlave *dev, Error **errp) } #define TYPE_TOSA_DAC "tosa_dac" -typedef struct TosaDACState TosaDACState; -DECLARE_INSTANCE_CHECKER(TosaDACState, TOSA_DAC, - TYPE_TOSA_DAC) +OBJECT_DECLARE_SIMPLE_TYPE(TosaDACState, TOSA_DAC) struct TosaDACState { I2CSlave parent_obj; diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c index 2ba69f24b7..84d4677abb 100644 --- a/hw/arm/versatilepb.c +++ b/hw/arm/versatilepb.c @@ -35,9 +35,7 @@ /* Primary interrupt controller. */ #define TYPE_VERSATILE_PB_SIC "versatilepb_sic" -typedef struct vpb_sic_state vpb_sic_state; -DECLARE_INSTANCE_CHECKER(vpb_sic_state, VERSATILE_PB_SIC, - TYPE_VERSATILE_PB_SIC) +OBJECT_DECLARE_SIMPLE_TYPE(vpb_sic_state, VERSATILE_PB_SIC) struct vpb_sic_state { SysBusDevice parent_obj; diff --git a/hw/arm/vexpress.c b/hw/arm/vexpress.c index 01bb4bba1e..94ff094ab3 100644 --- a/hw/arm/vexpress.c +++ b/hw/arm/vexpress.c @@ -171,20 +171,17 @@ struct VexpressMachineClass { MachineClass parent; VEDBoardInfo *daughterboard; }; -typedef struct VexpressMachineClass VexpressMachineClass; struct VexpressMachineState { MachineState parent; bool secure; bool virt; }; -typedef struct VexpressMachineState VexpressMachineState; #define TYPE_VEXPRESS_MACHINE "vexpress" #define TYPE_VEXPRESS_A9_MACHINE MACHINE_TYPE_NAME("vexpress-a9") #define TYPE_VEXPRESS_A15_MACHINE MACHINE_TYPE_NAME("vexpress-a15") -DECLARE_OBJ_CHECKERS(VexpressMachineState, VexpressMachineClass, - VEXPRESS_MACHINE, TYPE_VEXPRESS_MACHINE) +OBJECT_DECLARE_TYPE(VexpressMachineState, VexpressMachineClass, VEXPRESS_MACHINE) typedef void DBoardInitFn(const VexpressMachineState *machine, ram_addr_t ram_size, diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index 9efd7a3881..6bff5e3738 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -357,14 +357,6 @@ static void acpi_dsdt_add_gpio(Aml *scope, const MemMapEntry *gpio_memmap, aml_append(scope, dev); } -static void acpi_dsdt_add_power_button(Aml *scope) -{ - Aml *dev = aml_device(ACPI_POWER_BUTTON_DEVICE); - aml_append(dev, aml_name_decl("_HID", aml_string("PNP0C0C"))); - aml_append(dev, aml_name_decl("_UID", aml_int(0))); - aml_append(scope, dev); -} - static void acpi_dsdt_add_tpm(Aml *scope, VirtMachineState *vms) { PlatformBusDevice *pbus = PLATFORM_BUS_DEVICE(vms->platform_bus_dev); diff --git a/hw/arm/xilinx_zynq.c b/hw/arm/xilinx_zynq.c index f45e71e89b..2c0bff4fa6 100644 --- a/hw/arm/xilinx_zynq.c +++ b/hw/arm/xilinx_zynq.c @@ -40,9 +40,7 @@ #include "qom/object.h" #define TYPE_ZYNQ_MACHINE MACHINE_TYPE_NAME("xilinx-zynq-a9") -typedef struct ZynqMachineState ZynqMachineState; -DECLARE_INSTANCE_CHECKER(ZynqMachineState, ZYNQ_MACHINE, - TYPE_ZYNQ_MACHINE) +OBJECT_DECLARE_SIMPLE_TYPE(ZynqMachineState, ZYNQ_MACHINE) /* board base frequency: 33.333333 MHz */ #define PS_CLK_FREQUENCY (100 * 1000 * 1000 / 3) diff --git a/hw/arm/xlnx-versal-virt.c b/hw/arm/xlnx-versal-virt.c index 1f9409eb32..03e23201b1 100644 --- a/hw/arm/xlnx-versal-virt.c +++ b/hw/arm/xlnx-versal-virt.c @@ -25,9 +25,7 @@ #include "qom/object.h" #define TYPE_XLNX_VERSAL_VIRT_MACHINE MACHINE_TYPE_NAME("xlnx-versal-virt") -typedef struct VersalVirt VersalVirt; -DECLARE_INSTANCE_CHECKER(VersalVirt, XLNX_VERSAL_VIRT_MACHINE, - TYPE_XLNX_VERSAL_VIRT_MACHINE) +OBJECT_DECLARE_SIMPLE_TYPE(VersalVirt, XLNX_VERSAL_VIRT_MACHINE) struct VersalVirt { MachineState parent_obj; diff --git a/hw/arm/xlnx-zcu102.c b/hw/arm/xlnx-zcu102.c index 19d5a4d4e0..066571a972 100644 --- a/hw/arm/xlnx-zcu102.c +++ b/hw/arm/xlnx-zcu102.c @@ -36,11 +36,9 @@ struct XlnxZCU102 { struct arm_boot_info binfo; }; -typedef struct XlnxZCU102 XlnxZCU102; #define TYPE_ZCU102_MACHINE MACHINE_TYPE_NAME("xlnx-zcu102") -DECLARE_INSTANCE_CHECKER(XlnxZCU102, ZCU102_MACHINE, - TYPE_ZCU102_MACHINE) +OBJECT_DECLARE_SIMPLE_TYPE(XlnxZCU102, ZCU102_MACHINE) static bool zcu102_get_secure(Object *obj, Error **errp) diff --git a/hw/arm/z2.c b/hw/arm/z2.c index 72ecb6df29..4fc5699dae 100644 --- a/hw/arm/z2.c +++ b/hw/arm/z2.c @@ -111,11 +111,9 @@ struct ZipitLCD { uint32_t cur_reg; int pos; }; -typedef struct ZipitLCD ZipitLCD; #define TYPE_ZIPIT_LCD "zipit-lcd" -DECLARE_INSTANCE_CHECKER(ZipitLCD, ZIPIT_LCD, - TYPE_ZIPIT_LCD) +OBJECT_DECLARE_SIMPLE_TYPE(ZipitLCD, ZIPIT_LCD) static uint32_t zipit_lcd_transfer(SSISlave *dev, uint32_t value) { @@ -198,9 +196,7 @@ static const TypeInfo zipit_lcd_info = { }; #define TYPE_AER915 "aer915" -typedef struct AER915State AER915State; -DECLARE_INSTANCE_CHECKER(AER915State, AER915, - TYPE_AER915) +OBJECT_DECLARE_SIMPLE_TYPE(AER915State, AER915) struct AER915State { I2CSlave parent_obj; diff --git a/hw/audio/ac97.c b/hw/audio/ac97.c index eb8a7f032d..3cb8131060 100644 --- a/hw/audio/ac97.c +++ b/hw/audio/ac97.c @@ -127,9 +127,7 @@ enum { #define MUTE_SHIFT 15 #define TYPE_AC97 "AC97" -typedef struct AC97LinkState AC97LinkState; -DECLARE_INSTANCE_CHECKER(AC97LinkState, AC97, - TYPE_AC97) +OBJECT_DECLARE_SIMPLE_TYPE(AC97LinkState, AC97) #define REC_MASK 7 enum { diff --git a/hw/audio/adlib.c b/hw/audio/adlib.c index 870116e324..42d50d2fdc 100644 --- a/hw/audio/adlib.c +++ b/hw/audio/adlib.c @@ -52,9 +52,7 @@ #define SHIFT 1 #define TYPE_ADLIB "adlib" -typedef struct AdlibState AdlibState; -DECLARE_INSTANCE_CHECKER(AdlibState, ADLIB, - TYPE_ADLIB) +OBJECT_DECLARE_SIMPLE_TYPE(AdlibState, ADLIB) struct AdlibState { ISADevice parent_obj; diff --git a/hw/audio/es1370.c b/hw/audio/es1370.c index a824f8949e..6904589814 100644 --- a/hw/audio/es1370.c +++ b/hw/audio/es1370.c @@ -293,8 +293,7 @@ struct chan_bits { }; #define TYPE_ES1370 "ES1370" -DECLARE_INSTANCE_CHECKER(ES1370State, ES1370, - TYPE_ES1370) +OBJECT_DECLARE_SIMPLE_TYPE(ES1370State, ES1370) static void es1370_dac1_calc_freq (ES1370State *s, uint32_t ctl, uint32_t *old_freq, uint32_t *new_freq); diff --git a/hw/audio/gus.c b/hw/audio/gus.c index 307fd48315..e8719ee117 100644 --- a/hw/audio/gus.c +++ b/hw/audio/gus.c @@ -43,9 +43,7 @@ #endif #define TYPE_GUS "gus" -typedef struct GUSState GUSState; -DECLARE_INSTANCE_CHECKER(GUSState, GUS, - TYPE_GUS) +OBJECT_DECLARE_SIMPLE_TYPE(GUSState, GUS) struct GUSState { ISADevice dev; diff --git a/hw/audio/hda-codec.c b/hw/audio/hda-codec.c index 77d31b91a4..feb8f9e2bb 100644 --- a/hw/audio/hda-codec.c +++ b/hw/audio/hda-codec.c @@ -172,8 +172,7 @@ struct HDAAudioStream { }; #define TYPE_HDA_AUDIO "hda-audio" -DECLARE_INSTANCE_CHECKER(HDAAudioState, HDA_AUDIO, - TYPE_HDA_AUDIO) +OBJECT_DECLARE_SIMPLE_TYPE(HDAAudioState, HDA_AUDIO) struct HDAAudioState { HDACodecDevice hda; diff --git a/hw/audio/intel-hda.h b/hw/audio/intel-hda.h index f5cce18fa3..f78c1833e3 100644 --- a/hw/audio/intel-hda.h +++ b/hw/audio/intel-hda.h @@ -9,12 +9,10 @@ #define TYPE_HDA_CODEC_DEVICE "hda-codec" OBJECT_DECLARE_TYPE(HDACodecDevice, HDACodecDeviceClass, - hda_codec_device, HDA_CODEC_DEVICE) + HDA_CODEC_DEVICE) #define TYPE_HDA_BUS "HDA" -typedef struct HDACodecBus HDACodecBus; -DECLARE_INSTANCE_CHECKER(HDACodecBus, HDA_BUS, - TYPE_HDA_BUS) +OBJECT_DECLARE_SIMPLE_TYPE(HDACodecBus, HDA_BUS) typedef void (*hda_codec_response_func)(HDACodecDevice *dev, diff --git a/hw/audio/marvell_88w8618.c b/hw/audio/marvell_88w8618.c index c8641562cc..e6c09bdb8e 100644 --- a/hw/audio/marvell_88w8618.c +++ b/hw/audio/marvell_88w8618.c @@ -43,9 +43,7 @@ #define MP_AUDIO_CLOCK_24MHZ (1 << 9) #define MP_AUDIO_MONO (1 << 14) -typedef struct mv88w8618_audio_state mv88w8618_audio_state; -DECLARE_INSTANCE_CHECKER(mv88w8618_audio_state, MV88W8618_AUDIO, - TYPE_MV88W8618_AUDIO) +OBJECT_DECLARE_SIMPLE_TYPE(mv88w8618_audio_state, MV88W8618_AUDIO) struct mv88w8618_audio_state { SysBusDevice parent_obj; diff --git a/hw/audio/milkymist-ac97.c b/hw/audio/milkymist-ac97.c index 7893539019..04b39f8345 100644 --- a/hw/audio/milkymist-ac97.c +++ b/hw/audio/milkymist-ac97.c @@ -56,9 +56,7 @@ enum { }; #define TYPE_MILKYMIST_AC97 "milkymist-ac97" -typedef struct MilkymistAC97State MilkymistAC97State; -DECLARE_INSTANCE_CHECKER(MilkymistAC97State, MILKYMIST_AC97, - TYPE_MILKYMIST_AC97) +OBJECT_DECLARE_SIMPLE_TYPE(MilkymistAC97State, MILKYMIST_AC97) struct MilkymistAC97State { SysBusDevice parent_obj; diff --git a/hw/audio/pcspk.c b/hw/audio/pcspk.c index cbee8855fb..b056c05387 100644 --- a/hw/audio/pcspk.c +++ b/hw/audio/pcspk.c @@ -40,9 +40,7 @@ #define PCSPK_MAX_FREQ (PCSPK_SAMPLE_RATE >> 1) #define PCSPK_MIN_COUNT DIV_ROUND_UP(PIT_FREQ, PCSPK_MAX_FREQ) -typedef struct PCSpkState PCSpkState; -DECLARE_INSTANCE_CHECKER(PCSpkState, PC_SPEAKER, - TYPE_PC_SPEAKER) +OBJECT_DECLARE_SIMPLE_TYPE(PCSpkState, PC_SPEAKER) struct PCSpkState { ISADevice parent_obj; diff --git a/hw/audio/pl041.c b/hw/audio/pl041.c index 570a234b72..03acd4fe34 100644 --- a/hw/audio/pl041.c +++ b/hw/audio/pl041.c @@ -78,9 +78,7 @@ typedef struct { } pl041_channel; #define TYPE_PL041 "pl041" -typedef struct PL041State PL041State; -DECLARE_INSTANCE_CHECKER(PL041State, PL041, - TYPE_PL041) +OBJECT_DECLARE_SIMPLE_TYPE(PL041State, PL041) struct PL041State { SysBusDevice parent_obj; diff --git a/hw/audio/sb16.c b/hw/audio/sb16.c index 6aa2c0fb93..8b20700410 100644 --- a/hw/audio/sb16.c +++ b/hw/audio/sb16.c @@ -50,9 +50,7 @@ static const char e3[] = "COPYRIGHT (C) CREATIVE TECHNOLOGY LTD, 1992."; #define TYPE_SB16 "sb16" -typedef struct SB16State SB16State; -DECLARE_INSTANCE_CHECKER(SB16State, SB16, - TYPE_SB16) +OBJECT_DECLARE_SIMPLE_TYPE(SB16State, SB16) struct SB16State { ISADevice parent_obj; diff --git a/hw/audio/wm8750.c b/hw/audio/wm8750.c index 7d6fcfec03..b5722b37c3 100644 --- a/hw/audio/wm8750.c +++ b/hw/audio/wm8750.c @@ -27,9 +27,7 @@ typedef struct { int dac_hz; } WMRate; -typedef struct WM8750State WM8750State; -DECLARE_INSTANCE_CHECKER(WM8750State, WM8750, - TYPE_WM8750) +OBJECT_DECLARE_SIMPLE_TYPE(WM8750State, WM8750) struct WM8750State { I2CSlave parent_obj; diff --git a/hw/block/fdc.c b/hw/block/fdc.c index 224bac504f..4c2c35e223 100644 --- a/hw/block/fdc.c +++ b/hw/block/fdc.c @@ -65,9 +65,7 @@ /* qdev floppy bus */ #define TYPE_FLOPPY_BUS "floppy-bus" -typedef struct FloppyBus FloppyBus; -DECLARE_INSTANCE_CHECKER(FloppyBus, FLOPPY_BUS, - TYPE_FLOPPY_BUS) +OBJECT_DECLARE_SIMPLE_TYPE(FloppyBus, FLOPPY_BUS) typedef struct FDCtrl FDCtrl; typedef struct FDrive FDrive; @@ -497,9 +495,7 @@ static const BlockDevOps fd_block_ops = { #define TYPE_FLOPPY_DRIVE "floppy" -typedef struct FloppyDrive FloppyDrive; -DECLARE_INSTANCE_CHECKER(FloppyDrive, FLOPPY_DRIVE, - TYPE_FLOPPY_DRIVE) +OBJECT_DECLARE_SIMPLE_TYPE(FloppyDrive, FLOPPY_DRIVE) struct FloppyDrive { DeviceState qdev; @@ -890,9 +886,7 @@ static FloppyDriveType get_fallback_drive_type(FDrive *drv) } #define TYPE_SYSBUS_FDC "base-sysbus-fdc" -typedef struct FDCtrlSysBus FDCtrlSysBus; -DECLARE_INSTANCE_CHECKER(FDCtrlSysBus, SYSBUS_FDC, - TYPE_SYSBUS_FDC) +OBJECT_DECLARE_SIMPLE_TYPE(FDCtrlSysBus, SYSBUS_FDC) struct FDCtrlSysBus { /*< private >*/ @@ -902,9 +896,7 @@ struct FDCtrlSysBus { struct FDCtrl state; }; -typedef struct FDCtrlISABus FDCtrlISABus; -DECLARE_INSTANCE_CHECKER(FDCtrlISABus, ISA_FDC, - TYPE_ISA_FDC) +OBJECT_DECLARE_SIMPLE_TYPE(FDCtrlISABus, ISA_FDC) struct FDCtrlISABus { ISADevice parent_obj; diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c index 8dae779c76..483925f57a 100644 --- a/hw/block/m25p80.c +++ b/hw/block/m25p80.c @@ -456,17 +456,14 @@ struct Flash { const FlashPartInfo *pi; }; -typedef struct Flash Flash; struct M25P80Class { SSISlaveClass parent_class; FlashPartInfo *pi; }; -typedef struct M25P80Class M25P80Class; #define TYPE_M25P80 "m25p80-generic" -DECLARE_OBJ_CHECKERS(Flash, M25P80Class, - M25P80, TYPE_M25P80) +OBJECT_DECLARE_TYPE(Flash, M25P80Class, M25P80) static inline Manufacturer get_man(Flash *s) { diff --git a/hw/block/nand.c b/hw/block/nand.c index 5c8112ed5a..bcceb64ebb 100644 --- a/hw/block/nand.c +++ b/hw/block/nand.c @@ -90,8 +90,7 @@ struct NANDFlashState { #define TYPE_NAND "nand" -DECLARE_INSTANCE_CHECKER(NANDFlashState, NAND, - TYPE_NAND) +OBJECT_DECLARE_SIMPLE_TYPE(NANDFlashState, NAND) static void mem_and(uint8_t *dest, const uint8_t *src, size_t n) { diff --git a/hw/block/onenand.c b/hw/block/onenand.c index 19f55aba66..5ff7be86bb 100644 --- a/hw/block/onenand.c +++ b/hw/block/onenand.c @@ -40,9 +40,7 @@ #define BLOCK_SHIFT (PAGE_SHIFT + 6) #define TYPE_ONE_NAND "onenand" -typedef struct OneNANDState OneNANDState; -DECLARE_INSTANCE_CHECKER(OneNANDState, ONE_NAND, - TYPE_ONE_NAND) +OBJECT_DECLARE_SIMPLE_TYPE(OneNANDState, ONE_NAND) struct OneNANDState { SysBusDevice parent_obj; diff --git a/hw/char/debugcon.c b/hw/char/debugcon.c index daaaca0f39..2a063ad72c 100644 --- a/hw/char/debugcon.c +++ b/hw/char/debugcon.c @@ -33,9 +33,7 @@ #include "qom/object.h" #define TYPE_ISA_DEBUGCON_DEVICE "isa-debugcon" -typedef struct ISADebugconState ISADebugconState; -DECLARE_INSTANCE_CHECKER(ISADebugconState, ISA_DEBUGCON_DEVICE, - TYPE_ISA_DEBUGCON_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(ISADebugconState, ISA_DEBUGCON_DEVICE) //#define DEBUG_DEBUGCON diff --git a/hw/char/exynos4210_uart.c b/hw/char/exynos4210_uart.c index b8ea34edbd..96afe3580f 100644 --- a/hw/char/exynos4210_uart.c +++ b/hw/char/exynos4210_uart.c @@ -139,9 +139,7 @@ typedef struct { } Exynos4210UartFIFO; #define TYPE_EXYNOS4210_UART "exynos4210.uart" -typedef struct Exynos4210UartState Exynos4210UartState; -DECLARE_INSTANCE_CHECKER(Exynos4210UartState, EXYNOS4210_UART, - TYPE_EXYNOS4210_UART) +OBJECT_DECLARE_SIMPLE_TYPE(Exynos4210UartState, EXYNOS4210_UART) struct Exynos4210UartState { SysBusDevice parent_obj; diff --git a/hw/char/grlib_apbuart.c b/hw/char/grlib_apbuart.c index 6fd88d83ad..3f80f6824e 100644 --- a/hw/char/grlib_apbuart.c +++ b/hw/char/grlib_apbuart.c @@ -73,9 +73,7 @@ #define FIFO_LENGTH 1024 -typedef struct UART UART; -DECLARE_INSTANCE_CHECKER(UART, GRLIB_APB_UART, - TYPE_GRLIB_APB_UART) +OBJECT_DECLARE_SIMPLE_TYPE(UART, GRLIB_APB_UART) struct UART { SysBusDevice parent_obj; diff --git a/hw/char/ipoctal232.c b/hw/char/ipoctal232.c index 2c987df8ad..ad000a39b9 100644 --- a/hw/char/ipoctal232.c +++ b/hw/char/ipoctal232.c @@ -123,8 +123,7 @@ struct IPOctalState { #define TYPE_IPOCTAL "ipoctal232" -DECLARE_INSTANCE_CHECKER(IPOctalState, IPOCTAL, - TYPE_IPOCTAL) +OBJECT_DECLARE_SIMPLE_TYPE(IPOctalState, IPOCTAL) static const VMStateDescription vmstate_scc2698_channel = { .name = "scc2698_channel", diff --git a/hw/char/lm32_juart.c b/hw/char/lm32_juart.c index 5723f2e189..b97aacba91 100644 --- a/hw/char/lm32_juart.c +++ b/hw/char/lm32_juart.c @@ -42,9 +42,7 @@ enum { JRX_FULL = (1<<8), }; -typedef struct LM32JuartState LM32JuartState; -DECLARE_INSTANCE_CHECKER(LM32JuartState, LM32_JUART, - TYPE_LM32_JUART) +OBJECT_DECLARE_SIMPLE_TYPE(LM32JuartState, LM32_JUART) struct LM32JuartState { SysBusDevice parent_obj; diff --git a/hw/char/lm32_uart.c b/hw/char/lm32_uart.c index 624bc83c5f..0e8b4e46a3 100644 --- a/hw/char/lm32_uart.c +++ b/hw/char/lm32_uart.c @@ -95,9 +95,7 @@ enum { }; #define TYPE_LM32_UART "lm32-uart" -typedef struct LM32UartState LM32UartState; -DECLARE_INSTANCE_CHECKER(LM32UartState, LM32_UART, - TYPE_LM32_UART) +OBJECT_DECLARE_SIMPLE_TYPE(LM32UartState, LM32_UART) struct LM32UartState { SysBusDevice parent_obj; diff --git a/hw/char/mcf_uart.c b/hw/char/mcf_uart.c index f6baa3ce77..e6814faffb 100644 --- a/hw/char/mcf_uart.c +++ b/hw/char/mcf_uart.c @@ -35,11 +35,9 @@ struct mcf_uart_state { qemu_irq irq; CharBackend chr; }; -typedef struct mcf_uart_state mcf_uart_state; #define TYPE_MCF_UART "mcf-uart" -DECLARE_INSTANCE_CHECKER(mcf_uart_state, MCF_UART, - TYPE_MCF_UART) +OBJECT_DECLARE_SIMPLE_TYPE(mcf_uart_state, MCF_UART) /* UART Status Register bits. */ #define MCF_UART_RxRDY 0x01 diff --git a/hw/char/milkymist-uart.c b/hw/char/milkymist-uart.c index 41204a0e28..1e83dbcafa 100644 --- a/hw/char/milkymist-uart.c +++ b/hw/char/milkymist-uart.c @@ -58,9 +58,7 @@ enum { }; #define TYPE_MILKYMIST_UART "milkymist-uart" -typedef struct MilkymistUartState MilkymistUartState; -DECLARE_INSTANCE_CHECKER(MilkymistUartState, MILKYMIST_UART, - TYPE_MILKYMIST_UART) +OBJECT_DECLARE_SIMPLE_TYPE(MilkymistUartState, MILKYMIST_UART) struct MilkymistUartState { SysBusDevice parent_obj; diff --git a/hw/char/parallel.c b/hw/char/parallel.c index ddb14f3197..8b418abf71 100644 --- a/hw/char/parallel.c +++ b/hw/char/parallel.c @@ -93,9 +93,7 @@ typedef struct ParallelState { } ParallelState; #define TYPE_ISA_PARALLEL "isa-parallel" -typedef struct ISAParallelState ISAParallelState; -DECLARE_INSTANCE_CHECKER(ISAParallelState, ISA_PARALLEL, - TYPE_ISA_PARALLEL) +OBJECT_DECLARE_SIMPLE_TYPE(ISAParallelState, ISA_PARALLEL) struct ISAParallelState { ISADevice parent_obj; diff --git a/hw/char/serial-isa.c b/hw/char/serial-isa.c index d4aad81a85..32c2fc0ebe 100644 --- a/hw/char/serial-isa.c +++ b/hw/char/serial-isa.c @@ -34,9 +34,7 @@ #include "migration/vmstate.h" #include "qom/object.h" -typedef struct ISASerialState ISASerialState; -DECLARE_INSTANCE_CHECKER(ISASerialState, ISA_SERIAL, - TYPE_ISA_SERIAL) +OBJECT_DECLARE_SIMPLE_TYPE(ISASerialState, ISA_SERIAL) struct ISASerialState { ISADevice parent_obj; diff --git a/hw/char/serial-pci.c b/hw/char/serial-pci.c index f68948154e..b0520a5a09 100644 --- a/hw/char/serial-pci.c +++ b/hw/char/serial-pci.c @@ -40,11 +40,9 @@ struct PCISerialState { SerialState state; uint8_t prog_if; }; -typedef struct PCISerialState PCISerialState; #define TYPE_PCI_SERIAL "pci-serial" -DECLARE_INSTANCE_CHECKER(PCISerialState, PCI_SERIAL, - TYPE_PCI_SERIAL) +OBJECT_DECLARE_SIMPLE_TYPE(PCISerialState, PCI_SERIAL) static void serial_pci_realize(PCIDevice *dev, Error **errp) { diff --git a/hw/char/spapr_vty.c b/hw/char/spapr_vty.c index dd6dd2d8c3..e726d4d915 100644 --- a/hw/char/spapr_vty.c +++ b/hw/char/spapr_vty.c @@ -18,11 +18,9 @@ struct SpaprVioVty { uint32_t in, out; uint8_t buf[VTERM_BUFSIZE]; }; -typedef struct SpaprVioVty SpaprVioVty; #define TYPE_VIO_SPAPR_VTY_DEVICE "spapr-vty" -DECLARE_INSTANCE_CHECKER(SpaprVioVty, VIO_SPAPR_VTY_DEVICE, - TYPE_VIO_SPAPR_VTY_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(SpaprVioVty, VIO_SPAPR_VTY_DEVICE) static int vty_can_receive(void *opaque) { diff --git a/hw/char/xilinx_uartlite.c b/hw/char/xilinx_uartlite.c index 8e9f9cd9ec..2e773ec4c4 100644 --- a/hw/char/xilinx_uartlite.c +++ b/hw/char/xilinx_uartlite.c @@ -53,9 +53,7 @@ #define CONTROL_IE 0x10 #define TYPE_XILINX_UARTLITE "xlnx.xps-uartlite" -typedef struct XilinxUARTLite XilinxUARTLite; -DECLARE_INSTANCE_CHECKER(XilinxUARTLite, XILINX_UARTLITE, - TYPE_XILINX_UARTLITE) +OBJECT_DECLARE_SIMPLE_TYPE(XilinxUARTLite, XILINX_UARTLITE) struct XilinxUARTLite { SysBusDevice parent_obj; diff --git a/hw/cpu/realview_mpcore.c b/hw/cpu/realview_mpcore.c index fb547aceef..72c792eef1 100644 --- a/hw/cpu/realview_mpcore.c +++ b/hw/cpu/realview_mpcore.c @@ -18,9 +18,7 @@ #include "qom/object.h" #define TYPE_REALVIEW_MPCORE_RIRQ "realview_mpcore" -typedef struct mpcore_rirq_state mpcore_rirq_state; -DECLARE_INSTANCE_CHECKER(mpcore_rirq_state, REALVIEW_MPCORE_RIRQ, - TYPE_REALVIEW_MPCORE_RIRQ) +OBJECT_DECLARE_SIMPLE_TYPE(mpcore_rirq_state, REALVIEW_MPCORE_RIRQ) /* Dummy PIC to route IRQ lines. The baseboard has 4 independent IRQ controllers. The output of these, plus some of the raw input lines diff --git a/hw/display/ads7846.c b/hw/display/ads7846.c index 4b87ee7135..023165b2a3 100644 --- a/hw/display/ads7846.c +++ b/hw/display/ads7846.c @@ -29,11 +29,9 @@ struct ADS7846State { int cycle; int output; }; -typedef struct ADS7846State ADS7846State; #define TYPE_ADS7846 "ads7846" -DECLARE_INSTANCE_CHECKER(ADS7846State, ADS7846, - TYPE_ADS7846) +OBJECT_DECLARE_SIMPLE_TYPE(ADS7846State, ADS7846) /* Control-byte bitfields */ #define CB_PD0 (1 << 0) diff --git a/hw/display/artist.c b/hw/display/artist.c index 80cd66e41d..ed0e637f25 100644 --- a/hw/display/artist.c +++ b/hw/display/artist.c @@ -25,9 +25,7 @@ #include "qom/object.h" #define TYPE_ARTIST "artist" -typedef struct ARTISTState ARTISTState; -DECLARE_INSTANCE_CHECKER(ARTISTState, ARTIST, - TYPE_ARTIST) +OBJECT_DECLARE_SIMPLE_TYPE(ARTISTState, ARTIST) #ifdef HOST_WORDS_BIGENDIAN #define ROP8OFF(_i) (3 - (_i)) diff --git a/hw/display/ati_int.h b/hw/display/ati_int.h index 714005447d..8acb9c7466 100644 --- a/hw/display/ati_int.h +++ b/hw/display/ati_int.h @@ -30,9 +30,7 @@ #define PCI_DEVICE_ID_ATI_RADEON_QY 0x5159 #define TYPE_ATI_VGA "ati-vga" -typedef struct ATIVGAState ATIVGAState; -DECLARE_INSTANCE_CHECKER(ATIVGAState, ATI_VGA, - TYPE_ATI_VGA) +OBJECT_DECLARE_SIMPLE_TYPE(ATIVGAState, ATI_VGA) typedef struct ATIVGARegs { uint32_t mm_index; diff --git a/hw/display/bochs-display.c b/hw/display/bochs-display.c index 41587388c4..8ed734b195 100644 --- a/hw/display/bochs-display.c +++ b/hw/display/bochs-display.c @@ -55,11 +55,9 @@ struct BochsDisplayState { /* device state */ BochsDisplayMode mode; }; -typedef struct BochsDisplayState BochsDisplayState; #define TYPE_BOCHS_DISPLAY "bochs-display" -DECLARE_INSTANCE_CHECKER(BochsDisplayState, BOCHS_DISPLAY, - TYPE_BOCHS_DISPLAY) +OBJECT_DECLARE_SIMPLE_TYPE(BochsDisplayState, BOCHS_DISPLAY) static const VMStateDescription vmstate_bochs_display = { .name = "bochs-display", diff --git a/hw/display/cg3.c b/hw/display/cg3.c index d66ba9ad6a..42fcf40010 100644 --- a/hw/display/cg3.c +++ b/hw/display/cg3.c @@ -66,9 +66,7 @@ #define CG3_VRAM_OFFSET 0x800000 #define TYPE_CG3 "cgthree" -typedef struct CG3State CG3State; -DECLARE_INSTANCE_CHECKER(CG3State, CG3, - TYPE_CG3) +OBJECT_DECLARE_SIMPLE_TYPE(CG3State, CG3) struct CG3State { SysBusDevice parent_obj; diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c index c088f38cf8..722b9e7004 100644 --- a/hw/display/cirrus_vga.c +++ b/hw/display/cirrus_vga.c @@ -183,11 +183,9 @@ struct PCICirrusVGAState { PCIDevice dev; CirrusVGAState cirrus_vga; }; -typedef struct PCICirrusVGAState PCICirrusVGAState; #define TYPE_PCI_CIRRUS_VGA "cirrus-vga" -DECLARE_INSTANCE_CHECKER(PCICirrusVGAState, PCI_CIRRUS_VGA, - TYPE_PCI_CIRRUS_VGA) +OBJECT_DECLARE_SIMPLE_TYPE(PCICirrusVGAState, PCI_CIRRUS_VGA) static uint8_t rop_to_index[256]; diff --git a/hw/display/cirrus_vga_isa.c b/hw/display/cirrus_vga_isa.c index e6adee1df4..4f6fb1af3b 100644 --- a/hw/display/cirrus_vga_isa.c +++ b/hw/display/cirrus_vga_isa.c @@ -33,9 +33,7 @@ #include "qom/object.h" #define TYPE_ISA_CIRRUS_VGA "isa-cirrus-vga" -typedef struct ISACirrusVGAState ISACirrusVGAState; -DECLARE_INSTANCE_CHECKER(ISACirrusVGAState, ISA_CIRRUS_VGA, - TYPE_ISA_CIRRUS_VGA) +OBJECT_DECLARE_SIMPLE_TYPE(ISACirrusVGAState, ISA_CIRRUS_VGA) struct ISACirrusVGAState { ISADevice parent_obj; diff --git a/hw/display/exynos4210_fimd.c b/hw/display/exynos4210_fimd.c index 3ef8698eb7..4c16e1f5a0 100644 --- a/hw/display/exynos4210_fimd.c +++ b/hw/display/exynos4210_fimd.c @@ -294,9 +294,7 @@ struct Exynos4210fimdWindow { }; #define TYPE_EXYNOS4210_FIMD "exynos4210.fimd" -typedef struct Exynos4210fimdState Exynos4210fimdState; -DECLARE_INSTANCE_CHECKER(Exynos4210fimdState, EXYNOS4210_FIMD, - TYPE_EXYNOS4210_FIMD) +OBJECT_DECLARE_SIMPLE_TYPE(Exynos4210fimdState, EXYNOS4210_FIMD) struct Exynos4210fimdState { SysBusDevice parent_obj; diff --git a/hw/display/g364fb.c b/hw/display/g364fb.c index 4a32fe4c94..8f1725432c 100644 --- a/hw/display/g364fb.c +++ b/hw/display/g364fb.c @@ -487,9 +487,7 @@ static void g364fb_init(DeviceState *dev, G364State *s) } #define TYPE_G364 "sysbus-g364" -typedef struct G364SysBusState G364SysBusState; -DECLARE_INSTANCE_CHECKER(G364SysBusState, G364, - TYPE_G364) +OBJECT_DECLARE_SIMPLE_TYPE(G364SysBusState, G364) struct G364SysBusState { SysBusDevice parent_obj; diff --git a/hw/display/jazz_led.c b/hw/display/jazz_led.c index 647d05f602..dd5f4696c4 100644 --- a/hw/display/jazz_led.c +++ b/hw/display/jazz_led.c @@ -36,9 +36,7 @@ typedef enum { } screen_state_t; #define TYPE_JAZZ_LED "jazz-led" -typedef struct LedState LedState; -DECLARE_INSTANCE_CHECKER(LedState, JAZZ_LED, - TYPE_JAZZ_LED) +OBJECT_DECLARE_SIMPLE_TYPE(LedState, JAZZ_LED) struct LedState { SysBusDevice parent_obj; diff --git a/hw/display/milkymist-tmu2.c b/hw/display/milkymist-tmu2.c index 8a9e7c23fb..64636db86f 100644 --- a/hw/display/milkymist-tmu2.c +++ b/hw/display/milkymist-tmu2.c @@ -83,9 +83,7 @@ struct vertex { } QEMU_PACKED; #define TYPE_MILKYMIST_TMU2 "milkymist-tmu2" -typedef struct MilkymistTMU2State MilkymistTMU2State; -DECLARE_INSTANCE_CHECKER(MilkymistTMU2State, MILKYMIST_TMU2, - TYPE_MILKYMIST_TMU2) +OBJECT_DECLARE_SIMPLE_TYPE(MilkymistTMU2State, MILKYMIST_TMU2) struct MilkymistTMU2State { SysBusDevice parent_obj; diff --git a/hw/display/milkymist-vgafb.c b/hw/display/milkymist-vgafb.c index 2c879129fb..6f2b11d6c9 100644 --- a/hw/display/milkymist-vgafb.c +++ b/hw/display/milkymist-vgafb.c @@ -69,9 +69,7 @@ enum { }; #define TYPE_MILKYMIST_VGAFB "milkymist-vgafb" -typedef struct MilkymistVgafbState MilkymistVgafbState; -DECLARE_INSTANCE_CHECKER(MilkymistVgafbState, MILKYMIST_VGAFB, - TYPE_MILKYMIST_VGAFB) +OBJECT_DECLARE_SIMPLE_TYPE(MilkymistVgafbState, MILKYMIST_VGAFB) struct MilkymistVgafbState { SysBusDevice parent_obj; diff --git a/hw/display/next-fb.c b/hw/display/next-fb.c index 94db0202a3..e2d895109d 100644 --- a/hw/display/next-fb.c +++ b/hw/display/next-fb.c @@ -32,9 +32,7 @@ #include "hw/m68k/next-cube.h" #include "qom/object.h" -typedef struct NeXTFbState NeXTFbState; -DECLARE_INSTANCE_CHECKER(NeXTFbState, NEXTFB, - TYPE_NEXTFB) +OBJECT_DECLARE_SIMPLE_TYPE(NeXTFbState, NEXTFB) struct NeXTFbState { SysBusDevice parent_obj; diff --git a/hw/display/pl110.c b/hw/display/pl110.c index af51a2b9e7..02b0d45f06 100644 --- a/hw/display/pl110.c +++ b/hw/display/pl110.c @@ -49,9 +49,7 @@ enum pl110_version }; #define TYPE_PL110 "pl110" -typedef struct PL110State PL110State; -DECLARE_INSTANCE_CHECKER(PL110State, PL110, - TYPE_PL110) +OBJECT_DECLARE_SIMPLE_TYPE(PL110State, PL110) struct PL110State { SysBusDevice parent_obj; diff --git a/hw/display/qxl.h b/hw/display/qxl.h index 714cd01b63..379d3304ab 100644 --- a/hw/display/qxl.h +++ b/hw/display/qxl.h @@ -128,11 +128,9 @@ struct PCIQXLDevice { QXLRect dirty[QXL_NUM_DIRTY_RECTS]; QEMUBH *update_area_bh; }; -typedef struct PCIQXLDevice PCIQXLDevice; #define TYPE_PCI_QXL "pci-qxl" -DECLARE_INSTANCE_CHECKER(PCIQXLDevice, PCI_QXL, - TYPE_PCI_QXL) +OBJECT_DECLARE_SIMPLE_TYPE(PCIQXLDevice, PCI_QXL) #define PANIC_ON(x) if ((x)) { \ printf("%s: PANIC %s failed\n", __func__, #x); \ diff --git a/hw/display/sii9022.c b/hw/display/sii9022.c index d88166f449..b591a58789 100644 --- a/hw/display/sii9022.c +++ b/hw/display/sii9022.c @@ -36,9 +36,7 @@ #define SII9022_INT_STATUS_PLUGGED 0x04; #define TYPE_SII9022 "sii9022" -typedef struct sii9022_state sii9022_state; -DECLARE_INSTANCE_CHECKER(sii9022_state, SII9022, - TYPE_SII9022) +OBJECT_DECLARE_SIMPLE_TYPE(sii9022_state, SII9022) struct sii9022_state { I2CSlave parent_obj; diff --git a/hw/display/sm501.c b/hw/display/sm501.c index 51120c6c3e..8966b69bc7 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -1932,9 +1932,7 @@ static const VMStateDescription vmstate_sm501_state = { }; #define TYPE_SYSBUS_SM501 "sysbus-sm501" -typedef struct SM501SysBusState SM501SysBusState; -DECLARE_INSTANCE_CHECKER(SM501SysBusState, SYSBUS_SM501, - TYPE_SYSBUS_SM501) +OBJECT_DECLARE_SIMPLE_TYPE(SM501SysBusState, SYSBUS_SM501) struct SM501SysBusState { /*< private >*/ @@ -2036,9 +2034,7 @@ static const TypeInfo sm501_sysbus_info = { }; #define TYPE_PCI_SM501 "sm501" -typedef struct SM501PCIState SM501PCIState; -DECLARE_INSTANCE_CHECKER(SM501PCIState, PCI_SM501, - TYPE_PCI_SM501) +OBJECT_DECLARE_SIMPLE_TYPE(SM501PCIState, PCI_SM501) struct SM501PCIState { /*< private >*/ diff --git a/hw/display/ssd0303.c b/hw/display/ssd0303.c index 0378573a42..aeae22da9c 100644 --- a/hw/display/ssd0303.c +++ b/hw/display/ssd0303.c @@ -47,9 +47,7 @@ enum ssd0303_cmd { }; #define TYPE_SSD0303 "ssd0303" -typedef struct ssd0303_state ssd0303_state; -DECLARE_INSTANCE_CHECKER(ssd0303_state, SSD0303, - TYPE_SSD0303) +OBJECT_DECLARE_SIMPLE_TYPE(ssd0303_state, SSD0303) struct ssd0303_state { I2CSlave parent_obj; diff --git a/hw/display/ssd0323.c b/hw/display/ssd0323.c index 037da81127..17d4b32ae3 100644 --- a/hw/display/ssd0323.c +++ b/hw/display/ssd0323.c @@ -66,11 +66,9 @@ struct ssd0323_state { uint32_t mode; uint8_t framebuffer[128 * 80 / 2]; }; -typedef struct ssd0323_state ssd0323_state; #define TYPE_SSD0323 "ssd0323" -DECLARE_INSTANCE_CHECKER(ssd0323_state, SSD0323, - TYPE_SSD0323) +OBJECT_DECLARE_SIMPLE_TYPE(ssd0323_state, SSD0323) static uint32_t ssd0323_transfer(SSISlave *dev, uint32_t data) diff --git a/hw/display/tcx.c b/hw/display/tcx.c index 69e901a800..c9d5e45cd1 100644 --- a/hw/display/tcx.c +++ b/hw/display/tcx.c @@ -56,9 +56,7 @@ #define TCX_THC_CURSBITS 0x980 #define TYPE_TCX "SUNW,tcx" -typedef struct TCXState TCXState; -DECLARE_INSTANCE_CHECKER(TCXState, TCX, - TYPE_TCX) +OBJECT_DECLARE_SIMPLE_TYPE(TCXState, TCX) struct TCXState { SysBusDevice parent_obj; diff --git a/hw/display/vga-isa.c b/hw/display/vga-isa.c index 0ebfcca9d1..90851e730b 100644 --- a/hw/display/vga-isa.c +++ b/hw/display/vga-isa.c @@ -35,9 +35,7 @@ #include "qom/object.h" #define TYPE_ISA_VGA "isa-vga" -typedef struct ISAVGAState ISAVGAState; -DECLARE_INSTANCE_CHECKER(ISAVGAState, ISA_VGA, - TYPE_ISA_VGA) +OBJECT_DECLARE_SIMPLE_TYPE(ISAVGAState, ISA_VGA) struct ISAVGAState { ISADevice parent_obj; diff --git a/hw/display/vga-pci.c b/hw/display/vga-pci.c index 3b45fa3bad..e5d9af5868 100644 --- a/hw/display/vga-pci.c +++ b/hw/display/vga-pci.c @@ -51,11 +51,9 @@ struct PCIVGAState { MemoryRegion mrs[4]; uint8_t edid[256]; }; -typedef struct PCIVGAState PCIVGAState; #define TYPE_PCI_VGA "pci-vga" -DECLARE_INSTANCE_CHECKER(PCIVGAState, PCI_VGA, - TYPE_PCI_VGA) +OBJECT_DECLARE_SIMPLE_TYPE(PCIVGAState, PCI_VGA) static const VMStateDescription vmstate_vga_pci = { .name = "vga", diff --git a/hw/display/virtio-vga.h b/hw/display/virtio-vga.h index 5c5671c9c1..977ad5edc2 100644 --- a/hw/display/virtio-vga.h +++ b/hw/display/virtio-vga.h @@ -10,7 +10,7 @@ */ #define TYPE_VIRTIO_VGA_BASE "virtio-vga-base" OBJECT_DECLARE_TYPE(VirtIOVGABase, VirtIOVGABaseClass, - virtio_vga_base, VIRTIO_VGA_BASE) + VIRTIO_VGA_BASE) struct VirtIOVGABase { VirtIOPCIProxy parent_obj; diff --git a/hw/dma/i82374.c b/hw/dma/i82374.c index 5b7ff635f7..34c3aaf7d3 100644 --- a/hw/dma/i82374.c +++ b/hw/dma/i82374.c @@ -32,9 +32,7 @@ #include "qom/object.h" #define TYPE_I82374 "i82374" -typedef struct I82374State I82374State; -DECLARE_INSTANCE_CHECKER(I82374State, I82374, - TYPE_I82374) +OBJECT_DECLARE_SIMPLE_TYPE(I82374State, I82374) //#define DEBUG_I82374 diff --git a/hw/dma/pl330.c b/hw/dma/pl330.c index 859586fd2f..944ba296b0 100644 --- a/hw/dma/pl330.c +++ b/hw/dma/pl330.c @@ -272,8 +272,7 @@ struct PL330State { }; #define TYPE_PL330 "pl330" -DECLARE_INSTANCE_CHECKER(PL330State, PL330, - TYPE_PL330) +OBJECT_DECLARE_SIMPLE_TYPE(PL330State, PL330) static const VMStateDescription vmstate_pl330 = { .name = "pl330", diff --git a/hw/dma/puv3_dma.c b/hw/dma/puv3_dma.c index 825e3dc0ac..cca1e9ec21 100644 --- a/hw/dma/puv3_dma.c +++ b/hw/dma/puv3_dma.c @@ -23,9 +23,7 @@ #define PUV3_DMA_CH(offset) ((offset) >> 8) #define TYPE_PUV3_DMA "puv3_dma" -typedef struct PUV3DMAState PUV3DMAState; -DECLARE_INSTANCE_CHECKER(PUV3DMAState, PUV3_DMA, - TYPE_PUV3_DMA) +OBJECT_DECLARE_SIMPLE_TYPE(PUV3DMAState, PUV3_DMA) struct PUV3DMAState { SysBusDevice parent_obj; diff --git a/hw/dma/pxa2xx_dma.c b/hw/dma/pxa2xx_dma.c index 4f6c0e5e5e..b3707ff3de 100644 --- a/hw/dma/pxa2xx_dma.c +++ b/hw/dma/pxa2xx_dma.c @@ -35,9 +35,7 @@ typedef struct { } PXA2xxDMAChannel; #define TYPE_PXA2XX_DMA "pxa2xx-dma" -typedef struct PXA2xxDMAState PXA2xxDMAState; -DECLARE_INSTANCE_CHECKER(PXA2xxDMAState, PXA2XX_DMA, - TYPE_PXA2XX_DMA) +OBJECT_DECLARE_SIMPLE_TYPE(PXA2xxDMAState, PXA2XX_DMA) struct PXA2xxDMAState { SysBusDevice parent_obj; diff --git a/hw/dma/rc4030.c b/hw/dma/rc4030.c index c584815d06..e4d2f1725b 100644 --- a/hw/dma/rc4030.c +++ b/hw/dma/rc4030.c @@ -56,9 +56,7 @@ typedef struct dma_pagetable_entry { #define DMA_FLAG_ADDR_INTR 0x0400 #define TYPE_RC4030 "rc4030" -typedef struct rc4030State rc4030State; -DECLARE_INSTANCE_CHECKER(rc4030State, RC4030, - TYPE_RC4030) +OBJECT_DECLARE_SIMPLE_TYPE(rc4030State, RC4030) #define TYPE_RC4030_IOMMU_MEMORY_REGION "rc4030-iommu-memory-region" diff --git a/hw/dma/xilinx_axidma.c b/hw/dma/xilinx_axidma.c index 498fc17d8a..0a7f5acb4b 100644 --- a/hw/dma/xilinx_axidma.c +++ b/hw/dma/xilinx_axidma.c @@ -43,9 +43,7 @@ #define TYPE_XILINX_AXI_DMA_DATA_STREAM "xilinx-axi-dma-data-stream" #define TYPE_XILINX_AXI_DMA_CONTROL_STREAM "xilinx-axi-dma-control-stream" -typedef struct XilinxAXIDMA XilinxAXIDMA; -DECLARE_INSTANCE_CHECKER(XilinxAXIDMA, XILINX_AXI_DMA, - TYPE_XILINX_AXI_DMA) +OBJECT_DECLARE_SIMPLE_TYPE(XilinxAXIDMA, XILINX_AXI_DMA) typedef struct XilinxAXIDMAStreamSlave XilinxAXIDMAStreamSlave; DECLARE_INSTANCE_CHECKER(XilinxAXIDMAStreamSlave, XILINX_AXI_DMA_DATA_STREAM, diff --git a/hw/gpio/gpio_key.c b/hw/gpio/gpio_key.c index 86aa78aae4..74f6138356 100644 --- a/hw/gpio/gpio_key.c +++ b/hw/gpio/gpio_key.c @@ -31,9 +31,7 @@ #include "qom/object.h" #define TYPE_GPIOKEY "gpio-key" -typedef struct GPIOKEYState GPIOKEYState; -DECLARE_INSTANCE_CHECKER(GPIOKEYState, GPIOKEY, - TYPE_GPIOKEY) +OBJECT_DECLARE_SIMPLE_TYPE(GPIOKEYState, GPIOKEY) #define GPIO_KEY_LATENCY 100 /* 100ms */ struct GPIOKEYState { diff --git a/hw/gpio/max7310.c b/hw/gpio/max7310.c index de375892ef..db6b5e3d76 100644 --- a/hw/gpio/max7310.c +++ b/hw/gpio/max7310.c @@ -16,9 +16,7 @@ #include "qom/object.h" #define TYPE_MAX7310 "max7310" -typedef struct MAX7310State MAX7310State; -DECLARE_INSTANCE_CHECKER(MAX7310State, MAX7310, - TYPE_MAX7310) +OBJECT_DECLARE_SIMPLE_TYPE(MAX7310State, MAX7310) struct MAX7310State { I2CSlave parent_obj; diff --git a/hw/gpio/mpc8xxx.c b/hw/gpio/mpc8xxx.c index dac8b1be38..e60c919a13 100644 --- a/hw/gpio/mpc8xxx.c +++ b/hw/gpio/mpc8xxx.c @@ -27,9 +27,7 @@ #include "qom/object.h" #define TYPE_MPC8XXX_GPIO "mpc8xxx_gpio" -typedef struct MPC8XXXGPIOState MPC8XXXGPIOState; -DECLARE_INSTANCE_CHECKER(MPC8XXXGPIOState, MPC8XXX_GPIO, - TYPE_MPC8XXX_GPIO) +OBJECT_DECLARE_SIMPLE_TYPE(MPC8XXXGPIOState, MPC8XXX_GPIO) struct MPC8XXXGPIOState { SysBusDevice parent_obj; diff --git a/hw/gpio/pl061.c b/hw/gpio/pl061.c index 3420df0d1f..e72e77572a 100644 --- a/hw/gpio/pl061.c +++ b/hw/gpio/pl061.c @@ -35,9 +35,7 @@ static const uint8_t pl061_id_luminary[12] = { 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x18, 0x01, 0x0d, 0xf0, 0x05, 0xb1 }; #define TYPE_PL061 "pl061" -typedef struct PL061State PL061State; -DECLARE_INSTANCE_CHECKER(PL061State, PL061, - TYPE_PL061) +OBJECT_DECLARE_SIMPLE_TYPE(PL061State, PL061) #define N_GPIOS 8 diff --git a/hw/gpio/puv3_gpio.c b/hw/gpio/puv3_gpio.c index 98ea2b4c2e..e003ae505c 100644 --- a/hw/gpio/puv3_gpio.c +++ b/hw/gpio/puv3_gpio.c @@ -19,9 +19,7 @@ #include "qemu/log.h" #define TYPE_PUV3_GPIO "puv3_gpio" -typedef struct PUV3GPIOState PUV3GPIOState; -DECLARE_INSTANCE_CHECKER(PUV3GPIOState, PUV3_GPIO, - TYPE_PUV3_GPIO) +OBJECT_DECLARE_SIMPLE_TYPE(PUV3GPIOState, PUV3_GPIO) struct PUV3GPIOState { SysBusDevice parent_obj; diff --git a/hw/gpio/zaurus.c b/hw/gpio/zaurus.c index 3d25c55d06..7cf52a5041 100644 --- a/hw/gpio/zaurus.c +++ b/hw/gpio/zaurus.c @@ -28,9 +28,7 @@ /* SCOOP devices */ #define TYPE_SCOOP "scoop" -typedef struct ScoopInfo ScoopInfo; -DECLARE_INSTANCE_CHECKER(ScoopInfo, SCOOP, - TYPE_SCOOP) +OBJECT_DECLARE_SIMPLE_TYPE(ScoopInfo, SCOOP) struct ScoopInfo { SysBusDevice parent_obj; diff --git a/hw/hppa/dino.c b/hw/hppa/dino.c index c0c9b8a2b8..81053b5fb6 100644 --- a/hw/hppa/dino.c +++ b/hw/hppa/dino.c @@ -81,9 +81,7 @@ #define DINO_MEM_CHUNK_SIZE (8 * MiB) -typedef struct DinoState DinoState; -DECLARE_INSTANCE_CHECKER(DinoState, DINO_PCI_HOST_BRIDGE, - TYPE_DINO_PCI_HOST_BRIDGE) +OBJECT_DECLARE_SIMPLE_TYPE(DinoState, DINO_PCI_HOST_BRIDGE) #define DINO800_REGS (1 + (DINO_TLTIM - DINO_GMASK) / 4) static const uint32_t reg800_keep_bits[DINO800_REGS] = { diff --git a/hw/hppa/lasi.c b/hw/hppa/lasi.c index c0b970f55c..1a85657948 100644 --- a/hw/hppa/lasi.c +++ b/hw/hppa/lasi.c @@ -53,9 +53,7 @@ #define ICR_BUS_ERROR_BIT LASI_BIT(8) /* bit 8 in ICR */ #define ICR_TOC_BIT LASI_BIT(1) /* bit 1 in ICR */ -typedef struct LasiState LasiState; -DECLARE_INSTANCE_CHECKER(LasiState, LASI_CHIP, - TYPE_LASI_CHIP) +OBJECT_DECLARE_SIMPLE_TYPE(LasiState, LASI_CHIP) struct LasiState { PCIHostState parent_obj; diff --git a/hw/hyperv/hyperv.c b/hw/hyperv/hyperv.c index aa5a2a9bd8..4b26db1365 100644 --- a/hw/hyperv/hyperv.c +++ b/hw/hyperv/hyperv.c @@ -35,11 +35,9 @@ struct SynICState { struct hyperv_message_page *msg_page; struct hyperv_event_flags_page *event_page; }; -typedef struct SynICState SynICState; #define TYPE_SYNIC "hyperv-synic" -DECLARE_INSTANCE_CHECKER(SynICState, SYNIC, - TYPE_SYNIC) +OBJECT_DECLARE_SIMPLE_TYPE(SynICState, SYNIC) static bool synic_enabled; diff --git a/hw/hyperv/hyperv_testdev.c b/hw/hyperv/hyperv_testdev.c index f6ee98e00c..9a56ddf83f 100644 --- a/hw/hyperv/hyperv_testdev.c +++ b/hw/hyperv/hyperv_testdev.c @@ -47,11 +47,9 @@ struct HypervTestDev { QLIST_HEAD(, TestMsgConn) msg_conns; QLIST_HEAD(, TestEvtConn) evt_conns; }; -typedef struct HypervTestDev HypervTestDev; #define TYPE_HYPERV_TEST_DEV "hyperv-testdev" -DECLARE_INSTANCE_CHECKER(HypervTestDev, HYPERV_TEST_DEV, - TYPE_HYPERV_TEST_DEV) +OBJECT_DECLARE_SIMPLE_TYPE(HypervTestDev, HYPERV_TEST_DEV) enum { HV_TEST_DEV_SINT_ROUTE_CREATE = 1, diff --git a/hw/i2c/bitbang_i2c.c b/hw/i2c/bitbang_i2c.c index c1b9f298d9..e9a0612a04 100644 --- a/hw/i2c/bitbang_i2c.c +++ b/hw/i2c/bitbang_i2c.c @@ -163,9 +163,7 @@ void bitbang_i2c_init(bitbang_i2c_interface *s, I2CBus *bus) /* GPIO interface. */ #define TYPE_GPIO_I2C "gpio_i2c" -typedef struct GPIOI2CState GPIOI2CState; -DECLARE_INSTANCE_CHECKER(GPIOI2CState, GPIO_I2C, - TYPE_GPIO_I2C) +OBJECT_DECLARE_SIMPLE_TYPE(GPIOI2CState, GPIO_I2C) struct GPIOI2CState { SysBusDevice parent_obj; diff --git a/hw/i2c/exynos4210_i2c.c b/hw/i2c/exynos4210_i2c.c index ff82226e9f..b65a7d0222 100644 --- a/hw/i2c/exynos4210_i2c.c +++ b/hw/i2c/exynos4210_i2c.c @@ -34,9 +34,7 @@ #endif #define TYPE_EXYNOS4_I2C "exynos4210.i2c" -typedef struct Exynos4210I2CState Exynos4210I2CState; -DECLARE_INSTANCE_CHECKER(Exynos4210I2CState, EXYNOS4_I2C, - TYPE_EXYNOS4_I2C) +OBJECT_DECLARE_SIMPLE_TYPE(Exynos4210I2CState, EXYNOS4_I2C) /* Exynos4210 I2C memory map */ #define EXYNOS4_I2C_MEM_SIZE 0x14 diff --git a/hw/i2c/mpc_i2c.c b/hw/i2c/mpc_i2c.c index 156a25a8e9..720d2331e9 100644 --- a/hw/i2c/mpc_i2c.c +++ b/hw/i2c/mpc_i2c.c @@ -37,9 +37,7 @@ #endif #define TYPE_MPC_I2C "mpc-i2c" -typedef struct MPCI2CState MPCI2CState; -DECLARE_INSTANCE_CHECKER(MPCI2CState, MPC_I2C, - TYPE_MPC_I2C) +OBJECT_DECLARE_SIMPLE_TYPE(MPCI2CState, MPC_I2C) #define MPC_I2C_ADR 0x00 #define MPC_I2C_FDR 0x04 diff --git a/hw/i2c/smbus_eeprom.c b/hw/i2c/smbus_eeprom.c index c6777844cf..4d2bf99207 100644 --- a/hw/i2c/smbus_eeprom.c +++ b/hw/i2c/smbus_eeprom.c @@ -37,9 +37,7 @@ #define TYPE_SMBUS_EEPROM "smbus-eeprom" -typedef struct SMBusEEPROMDevice SMBusEEPROMDevice; -DECLARE_INSTANCE_CHECKER(SMBusEEPROMDevice, SMBUS_EEPROM, - TYPE_SMBUS_EEPROM) +OBJECT_DECLARE_SIMPLE_TYPE(SMBusEEPROMDevice, SMBUS_EEPROM) #define SMBUS_EEPROM_SIZE 256 diff --git a/hw/i2c/smbus_ich9.c b/hw/i2c/smbus_ich9.c index 2d4578511d..44dd5653b7 100644 --- a/hw/i2c/smbus_ich9.c +++ b/hw/i2c/smbus_ich9.c @@ -30,9 +30,7 @@ #include "hw/i386/ich9.h" #include "qom/object.h" -typedef struct ICH9SMBState ICH9SMBState; -DECLARE_INSTANCE_CHECKER(ICH9SMBState, ICH9_SMB_DEVICE, - TYPE_ICH9_SMB_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(ICH9SMBState, ICH9_SMB_DEVICE) struct ICH9SMBState { PCIDevice dev; diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig index 03e347b207..d0bd8b537d 100644 --- a/hw/i386/Kconfig +++ b/hw/i386/Kconfig @@ -103,6 +103,7 @@ config MICROVM select I8259 select MC146818RTC select VIRTIO_MMIO + select ACPI_HW_REDUCED config X86_IOMMU bool diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 7a5a8b3521..0e0535d2e3 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -2431,7 +2431,7 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine) acpi_add_table(table_offsets, tables_blob); acpi_build_madt(tables_blob, tables->linker, x86ms, - ACPI_DEVICE_IF(pcms->acpi_dev), true); + ACPI_DEVICE_IF(x86ms->acpi_dev), true); vmgenid_dev = find_vmgenid_dev(); if (vmgenid_dev) { diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c new file mode 100644 index 0000000000..df39c5d3bd --- /dev/null +++ b/hw/i386/acpi-microvm.c @@ -0,0 +1,240 @@ +/* Support for generating ACPI tables and passing them to Guests + * + * Copyright (C) 2008-2010 Kevin O'Connor <kevin@koconnor.net> + * Copyright (C) 2006 Fabrice Bellard + * Copyright (C) 2013 Red Hat Inc + * + * Author: Michael S. Tsirkin <mst@redhat.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License along + * with this program; if not, see <http://www.gnu.org/licenses/>. + */ + +#include "qemu/osdep.h" +#include "qemu/cutils.h" +#include "qapi/error.h" + +#include "exec/memory.h" +#include "hw/acpi/acpi.h" +#include "hw/acpi/aml-build.h" +#include "hw/acpi/bios-linker-loader.h" +#include "hw/acpi/generic_event_device.h" +#include "hw/acpi/utils.h" +#include "hw/boards.h" +#include "hw/i386/fw_cfg.h" +#include "hw/i386/microvm.h" +#include "hw/virtio/virtio-mmio.h" + +#include "acpi-common.h" +#include "acpi-microvm.h" + +static void acpi_dsdt_add_virtio(Aml *scope, + MicrovmMachineState *mms) +{ + gchar *separator; + long int index; + BusState *bus; + BusChild *kid; + + bus = sysbus_get_default(); + QTAILQ_FOREACH(kid, &bus->children, sibling) { + DeviceState *dev = kid->child; + Object *obj = object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MMIO); + + if (obj) { + VirtIOMMIOProxy *mmio = VIRTIO_MMIO(obj); + VirtioBusState *mmio_virtio_bus = &mmio->bus; + BusState *mmio_bus = &mmio_virtio_bus->parent_obj; + + if (QTAILQ_EMPTY(&mmio_bus->children)) { + continue; + } + separator = g_strrstr(mmio_bus->name, "."); + if (!separator) { + continue; + } + if (qemu_strtol(separator + 1, NULL, 10, &index) != 0) { + continue; + } + + uint32_t irq = mms->virtio_irq_base + index; + hwaddr base = VIRTIO_MMIO_BASE + index * 512; + hwaddr size = 512; + + Aml *dev = aml_device("VR%02u", (unsigned)index); + aml_append(dev, aml_name_decl("_HID", aml_string("LNRO0005"))); + aml_append(dev, aml_name_decl("_UID", aml_int(index))); + aml_append(dev, aml_name_decl("_CCA", aml_int(1))); + + Aml *crs = aml_resource_template(); + aml_append(crs, aml_memory32_fixed(base, size, AML_READ_WRITE)); + aml_append(crs, + aml_interrupt(AML_CONSUMER, AML_LEVEL, AML_ACTIVE_HIGH, + AML_EXCLUSIVE, &irq, 1)); + aml_append(dev, aml_name_decl("_CRS", crs)); + aml_append(scope, dev); + } + } +} + +static void +build_dsdt_microvm(GArray *table_data, BIOSLinker *linker, + MicrovmMachineState *mms) +{ + X86MachineState *x86ms = X86_MACHINE(mms); + Aml *dsdt, *sb_scope, *scope, *pkg; + bool ambiguous; + Object *isabus; + + isabus = object_resolve_path_type("", TYPE_ISA_BUS, &ambiguous); + assert(isabus); + assert(!ambiguous); + + dsdt = init_aml_allocator(); + + /* Reserve space for header */ + acpi_data_push(dsdt->buf, sizeof(AcpiTableHeader)); + + sb_scope = aml_scope("_SB"); + fw_cfg_add_acpi_dsdt(sb_scope, x86ms->fw_cfg); + isa_build_aml(ISA_BUS(isabus), sb_scope); + build_ged_aml(sb_scope, GED_DEVICE, x86ms->acpi_dev, + GED_MMIO_IRQ, AML_SYSTEM_MEMORY, GED_MMIO_BASE); + acpi_dsdt_add_power_button(sb_scope); + acpi_dsdt_add_virtio(sb_scope, mms); + aml_append(dsdt, sb_scope); + + /* ACPI 5.0: Table 7-209 System State Package */ + scope = aml_scope("\\"); + pkg = aml_package(4); + aml_append(pkg, aml_int(ACPI_GED_SLP_TYP_S5)); + aml_append(pkg, aml_int(0)); /* ignored */ + aml_append(pkg, aml_int(0)); /* reserved */ + aml_append(pkg, aml_int(0)); /* reserved */ + aml_append(scope, aml_name_decl("_S5", pkg)); + aml_append(dsdt, scope); + + /* copy AML table into ACPI tables blob and patch header there */ + g_array_append_vals(table_data, dsdt->buf->data, dsdt->buf->len); + build_header(linker, table_data, + (void *)(table_data->data + table_data->len - dsdt->buf->len), + "DSDT", dsdt->buf->len, 2, NULL, NULL); + free_aml_allocator(); +} + +static void acpi_build_microvm(AcpiBuildTables *tables, + MicrovmMachineState *mms) +{ + MachineState *machine = MACHINE(mms); + X86MachineState *x86ms = X86_MACHINE(mms); + GArray *table_offsets; + GArray *tables_blob = tables->table_data; + unsigned dsdt, xsdt; + AcpiFadtData pmfadt = { + /* ACPI 5.0: 4.1 Hardware-Reduced ACPI */ + .rev = 5, + .flags = ((1 << ACPI_FADT_F_HW_REDUCED_ACPI) | + (1 << ACPI_FADT_F_RESET_REG_SUP)), + + /* ACPI 5.0: 4.8.3.7 Sleep Control and Status Registers */ + .sleep_ctl = { + .space_id = AML_AS_SYSTEM_MEMORY, + .bit_width = 8, + .address = GED_MMIO_BASE_REGS + ACPI_GED_REG_SLEEP_CTL, + }, + .sleep_sts = { + .space_id = AML_AS_SYSTEM_MEMORY, + .bit_width = 8, + .address = GED_MMIO_BASE_REGS + ACPI_GED_REG_SLEEP_STS, + }, + + /* ACPI 5.0: 4.8.3.6 Reset Register */ + .reset_reg = { + .space_id = AML_AS_SYSTEM_MEMORY, + .bit_width = 8, + .address = GED_MMIO_BASE_REGS + ACPI_GED_REG_RESET, + }, + .reset_val = ACPI_GED_RESET_VALUE, + }; + + table_offsets = g_array_new(false, true /* clear */, + sizeof(uint32_t)); + bios_linker_loader_alloc(tables->linker, + ACPI_BUILD_TABLE_FILE, tables_blob, + 64 /* Ensure FACS is aligned */, + false /* high memory */); + + dsdt = tables_blob->len; + build_dsdt_microvm(tables_blob, tables->linker, mms); + + pmfadt.dsdt_tbl_offset = &dsdt; + pmfadt.xdsdt_tbl_offset = &dsdt; + acpi_add_table(table_offsets, tables_blob); + build_fadt(tables_blob, tables->linker, &pmfadt, NULL, NULL); + + acpi_add_table(table_offsets, tables_blob); + acpi_build_madt(tables_blob, tables->linker, X86_MACHINE(machine), + ACPI_DEVICE_IF(x86ms->acpi_dev), false); + + xsdt = tables_blob->len; + build_xsdt(tables_blob, tables->linker, table_offsets, NULL, NULL); + + /* RSDP is in FSEG memory, so allocate it separately */ + { + AcpiRsdpData rsdp_data = { + /* ACPI 2.0: 5.2.4.3 RSDP Structure */ + .revision = 2, /* xsdt needs v2 */ + .oem_id = ACPI_BUILD_APPNAME6, + .xsdt_tbl_offset = &xsdt, + .rsdt_tbl_offset = NULL, + }; + build_rsdp(tables->rsdp, tables->linker, &rsdp_data); + } + + /* Cleanup memory that's no longer used. */ + g_array_free(table_offsets, true); +} + +static void acpi_build_no_update(void *build_opaque) +{ + /* nothing, microvm tables don't change at runtime */ +} + +void acpi_setup_microvm(MicrovmMachineState *mms) +{ + X86MachineState *x86ms = X86_MACHINE(mms); + AcpiBuildTables tables; + + assert(x86ms->fw_cfg); + + if (!x86_machine_is_acpi_enabled(x86ms)) { + return; + } + + acpi_build_tables_init(&tables); + acpi_build_microvm(&tables, mms); + + /* Now expose it all to Guest */ + acpi_add_rom_blob(acpi_build_no_update, NULL, + tables.table_data, + ACPI_BUILD_TABLE_FILE, + ACPI_BUILD_TABLE_MAX_SIZE); + acpi_add_rom_blob(acpi_build_no_update, NULL, + tables.linker->cmd_blob, + "etc/table-loader", 0); + acpi_add_rom_blob(acpi_build_no_update, NULL, + tables.rsdp, + ACPI_BUILD_RSDP_FILE, 0); + + acpi_build_tables_cleanup(&tables, false); +} diff --git a/hw/i386/acpi-microvm.h b/hw/i386/acpi-microvm.h new file mode 100644 index 0000000000..dfe853690e --- /dev/null +++ b/hw/i386/acpi-microvm.h @@ -0,0 +1,8 @@ +#ifndef HW_I386_ACPI_MICROVM_H +#define HW_I386_ACPI_MICROVM_H + +#include "hw/i386/microvm.h" + +void acpi_setup_microvm(MicrovmMachineState *mms); + +#endif diff --git a/hw/i386/amd_iommu.h b/hw/i386/amd_iommu.h index fa5feb183c..79d38a3e41 100644 --- a/hw/i386/amd_iommu.h +++ b/hw/i386/amd_iommu.h @@ -297,9 +297,7 @@ struct irte_ga { }; #define TYPE_AMD_IOMMU_DEVICE "amd-iommu" -typedef struct AMDVIState AMDVIState; -DECLARE_INSTANCE_CHECKER(AMDVIState, AMD_IOMMU_DEVICE, - TYPE_AMD_IOMMU_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(AMDVIState, AMD_IOMMU_DEVICE) #define TYPE_AMD_IOMMU_PCI "AMDVI-PCI" diff --git a/hw/i386/generic_event_device_x86.c b/hw/i386/generic_event_device_x86.c new file mode 100644 index 0000000000..e26fb02a2e --- /dev/null +++ b/hw/i386/generic_event_device_x86.c @@ -0,0 +1,36 @@ +/* + * x86 variant of the generic event device for hw reduced acpi + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2 or later, as published by the Free Software Foundation. + */ + +#include "qemu/osdep.h" +#include "hw/acpi/generic_event_device.h" +#include "hw/i386/pc.h" + +static void acpi_ged_x86_class_init(ObjectClass *class, void *data) +{ + AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_CLASS(class); + + adevc->madt_cpu = pc_madt_cpu_entry; +} + +static const TypeInfo acpi_ged_x86_info = { + .name = TYPE_ACPI_GED_X86, + .parent = TYPE_ACPI_GED, + .class_init = acpi_ged_x86_class_init, + .interfaces = (InterfaceInfo[]) { + { TYPE_HOTPLUG_HANDLER }, + { TYPE_ACPI_DEVICE_IF }, + { } + } +}; + +static void acpi_ged_x86_register_types(void) +{ + type_register_static(&acpi_ged_x86_info); +} + +type_init(acpi_ged_x86_register_types) diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c index 37f47540e5..7b296ae192 100644 --- a/hw/i386/kvm/clock.c +++ b/hw/i386/kvm/clock.c @@ -32,9 +32,7 @@ #include "qom/object.h" #define TYPE_KVM_CLOCK "kvmclock" -typedef struct KVMClockState KVMClockState; -DECLARE_INSTANCE_CHECKER(KVMClockState, KVM_CLOCK, - TYPE_KVM_CLOCK) +OBJECT_DECLARE_SIMPLE_TYPE(KVMClockState, KVM_CLOCK) struct KVMClockState { /*< private >*/ diff --git a/hw/i386/kvmvapic.c b/hw/i386/kvmvapic.c index a4e05f086e..077c3f4866 100644 --- a/hw/i386/kvmvapic.c +++ b/hw/i386/kvmvapic.c @@ -71,11 +71,9 @@ struct VAPICROMState { bool rom_mapped_writable; VMChangeStateEntry *vmsentry; }; -typedef struct VAPICROMState VAPICROMState; #define TYPE_VAPIC "kvmvapic" -DECLARE_INSTANCE_CHECKER(VAPICROMState, VAPIC, - TYPE_VAPIC) +OBJECT_DECLARE_SIMPLE_TYPE(VAPICROMState, VAPIC) #define TPR_INSTR_ABS_MODRM 0x1 #define TPR_INSTR_MATCH_MODRM_REG 0x2 diff --git a/hw/i386/meson.build b/hw/i386/meson.build index 63918fbe22..e5d109f5c6 100644 --- a/hw/i386/meson.build +++ b/hw/i386/meson.build @@ -11,13 +11,14 @@ i386_ss.add(when: 'CONFIG_X86_IOMMU', if_true: files('x86-iommu.c'), if_false: files('x86-iommu-stub.c')) i386_ss.add(when: 'CONFIG_AMD_IOMMU', if_true: files('amd_iommu.c')) i386_ss.add(when: 'CONFIG_I440FX', if_true: files('pc_piix.c')) -i386_ss.add(when: 'CONFIG_MICROVM', if_true: files('microvm.c')) +i386_ss.add(when: 'CONFIG_MICROVM', if_true: files('microvm.c', 'acpi-microvm.c')) i386_ss.add(when: 'CONFIG_Q35', if_true: files('pc_q35.c')) i386_ss.add(when: 'CONFIG_VMMOUSE', if_true: files('vmmouse.c')) i386_ss.add(when: 'CONFIG_VMPORT', if_true: files('vmport.c')) i386_ss.add(when: 'CONFIG_VTD', if_true: files('intel_iommu.c')) i386_ss.add(when: 'CONFIG_ACPI', if_true: files('acpi-common.c')) +i386_ss.add(when: 'CONFIG_ACPI_HW_REDUCED', if_true: files('generic_event_device_x86.c')) i386_ss.add(when: 'CONFIG_PC', if_true: files( 'pc.c', 'pc_sysfw.c', diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 81d0888930..60d3272230 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -26,6 +26,8 @@ #include "sysemu/cpus.h" #include "sysemu/numa.h" #include "sysemu/reset.h" +#include "sysemu/runstate.h" +#include "acpi-microvm.h" #include "hw/loader.h" #include "hw/irq.h" @@ -37,17 +39,21 @@ #include "hw/timer/i8254.h" #include "hw/rtc/mc146818rtc.h" #include "hw/char/serial.h" +#include "hw/display/ramfb.h" #include "hw/i386/topology.h" #include "hw/i386/e820_memory_layout.h" #include "hw/i386/fw_cfg.h" #include "hw/virtio/virtio-mmio.h" +#include "hw/acpi/acpi.h" +#include "hw/acpi/generic_event_device.h" #include "cpu.h" #include "elf.h" #include "kvm_i386.h" #include "hw/xen/start_info.h" -#define MICROVM_BIOS_FILENAME "bios-microvm.bin" +#define MICROVM_QBOOT_FILENAME "qboot.rom" +#define MICROVM_BIOS_FILENAME "bios-microvm.bin" static void microvm_set_rtc(MicrovmMachineState *mms, ISADevice *s) { @@ -121,13 +127,25 @@ static void microvm_devices_init(MicrovmMachineState *mms) kvmclock_create(); + mms->virtio_irq_base = x86_machine_is_acpi_enabled(x86ms) ? 16 : 5; for (i = 0; i < VIRTIO_NUM_TRANSPORTS; i++) { sysbus_create_simple("virtio-mmio", VIRTIO_MMIO_BASE + i * 512, - x86ms->gsi[VIRTIO_IRQ_BASE + i]); + x86ms->gsi[mms->virtio_irq_base + i]); } /* Optional and legacy devices */ + if (x86_machine_is_acpi_enabled(x86ms)) { + DeviceState *dev = qdev_new(TYPE_ACPI_GED_X86); + qdev_prop_set_uint32(dev, "ged-event", ACPI_GED_PWR_DOWN_EVT); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, GED_MMIO_BASE); + /* sysbus_mmio_map(SYS_BUS_DEVICE(dev), 1, GED_MMIO_BASE_MEMHP); */ + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 2, GED_MMIO_BASE_REGS); + sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, + x86ms->gsi[GED_MMIO_IRQ]); + sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal); + x86ms->acpi_dev = HOTPLUG_HANDLER(dev); + } if (mms->pic == ON_OFF_AUTO_ON || mms->pic == ON_OFF_AUTO_AUTO) { qemu_irq *i8259; @@ -158,7 +176,9 @@ static void microvm_devices_init(MicrovmMachineState *mms) } if (bios_name == NULL) { - bios_name = MICROVM_BIOS_FILENAME; + bios_name = x86_machine_is_acpi_enabled(x86ms) + ? MICROVM_BIOS_FILENAME + : MICROVM_QBOOT_FILENAME; } x86_bios_rom_init(get_system_memory(), true); } @@ -227,7 +247,7 @@ static void microvm_memory_init(MicrovmMachineState *mms) x86ms->ioapic_as = &address_space_memory; } -static gchar *microvm_get_mmio_cmdline(gchar *name) +static gchar *microvm_get_mmio_cmdline(gchar *name, uint32_t virtio_irq_base) { gchar *cmdline; gchar *separator; @@ -247,7 +267,7 @@ static gchar *microvm_get_mmio_cmdline(gchar *name) ret = g_snprintf(cmdline, VIRTIO_CMDLINE_MAXLEN, " virtio_mmio.device=512@0x%lx:%ld", VIRTIO_MMIO_BASE + index * 512, - VIRTIO_IRQ_BASE + index); + virtio_irq_base + index); if (ret < 0 || ret >= VIRTIO_CMDLINE_MAXLEN) { g_free(cmdline); return NULL; @@ -259,6 +279,7 @@ static gchar *microvm_get_mmio_cmdline(gchar *name) static void microvm_fix_kernel_cmdline(MachineState *machine) { X86MachineState *x86ms = X86_MACHINE(machine); + MicrovmMachineState *mms = MICROVM_MACHINE(machine); BusState *bus; BusChild *kid; char *cmdline; @@ -282,7 +303,8 @@ static void microvm_fix_kernel_cmdline(MachineState *machine) BusState *mmio_bus = &mmio_virtio_bus->parent_obj; if (!QTAILQ_EMPTY(&mmio_bus->children)) { - gchar *mmio_cmdline = microvm_get_mmio_cmdline(mmio_bus->name); + gchar *mmio_cmdline = microvm_get_mmio_cmdline + (mmio_bus->name, mms->virtio_irq_base); if (mmio_cmdline) { char *newcmd = g_strjoin(NULL, cmdline, mmio_cmdline, NULL); g_free(mmio_cmdline); @@ -299,6 +321,39 @@ static void microvm_fix_kernel_cmdline(MachineState *machine) g_free(cmdline); } +static void microvm_device_pre_plug_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + x86_cpu_pre_plug(hotplug_dev, dev, errp); +} + +static void microvm_device_plug_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + x86_cpu_plug(hotplug_dev, dev, errp); +} + +static void microvm_device_unplug_request_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + error_setg(errp, "unplug not supported by microvm"); +} + +static void microvm_device_unplug_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + error_setg(errp, "unplug not supported by microvm"); +} + +static HotplugHandler *microvm_get_hotplug_handler(MachineState *machine, + DeviceState *dev) +{ + if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { + return HOTPLUG_HANDLER(machine); + } + return NULL; +} + static void microvm_machine_state_init(MachineState *machine) { MicrovmMachineState *mms = MICROVM_MACHINE(machine); @@ -322,7 +377,8 @@ static void microvm_machine_reset(MachineState *machine) CPUState *cs; X86CPU *cpu; - if (machine->kernel_filename != NULL && + if (!x86_machine_is_acpi_enabled(X86_MACHINE(machine)) && + machine->kernel_filename != NULL && mms->auto_kernel_cmdline && !mms->kernel_cmdline_fixed) { microvm_fix_kernel_cmdline(machine); mms->kernel_cmdline_fixed = true; @@ -435,6 +491,28 @@ static void microvm_machine_set_auto_kernel_cmdline(Object *obj, bool value, mms->auto_kernel_cmdline = value; } +static void microvm_machine_done(Notifier *notifier, void *data) +{ + MicrovmMachineState *mms = container_of(notifier, MicrovmMachineState, + machine_done); + + acpi_setup_microvm(mms); +} + +static void microvm_powerdown_req(Notifier *notifier, void *data) +{ + MicrovmMachineState *mms = container_of(notifier, MicrovmMachineState, + powerdown_req); + X86MachineState *x86ms = X86_MACHINE(mms); + + if (x86ms->acpi_dev) { + Object *obj = OBJECT(x86ms->acpi_dev); + AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(obj); + adevc->send_event(ACPI_DEVICE_IF(x86ms->acpi_dev), + ACPI_POWER_DOWN_STATUS); + } +} + static void microvm_machine_initfn(Object *obj) { MicrovmMachineState *mms = MICROVM_MACHINE(obj); @@ -449,11 +527,17 @@ static void microvm_machine_initfn(Object *obj) /* State */ mms->kernel_cmdline_fixed = false; + + mms->machine_done.notify = microvm_machine_done; + qemu_add_machine_init_done_notifier(&mms->machine_done); + mms->powerdown_req.notify = microvm_powerdown_req; + qemu_register_powerdown_notifier(&mms->powerdown_req); } static void microvm_class_init(ObjectClass *oc, void *data) { MachineClass *mc = MACHINE_CLASS(oc); + HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(oc); mc->init = microvm_machine_state_init; @@ -475,6 +559,13 @@ static void microvm_class_init(ObjectClass *oc, void *data) /* Machine class handlers */ mc->reset = microvm_machine_reset; + /* hotplug (for cpu coldplug) */ + mc->get_hotplug_handler = microvm_get_hotplug_handler; + hc->pre_plug = microvm_device_pre_plug_cb; + hc->plug = microvm_device_plug_cb; + hc->unplug_request = microvm_device_unplug_request_cb; + hc->unplug = microvm_device_unplug_cb; + object_class_property_add(oc, MICROVM_MACHINE_PIC, "OnOffAuto", microvm_machine_get_pic, microvm_machine_set_pic, @@ -514,6 +605,8 @@ static void microvm_class_init(ObjectClass *oc, void *data) object_class_property_set_description(oc, MICROVM_MACHINE_AUTO_KERNEL_CMDLINE, "Set off to disable adding virtio-mmio devices to the kernel cmdline"); + + machine_class_allow_dynamic_sysbus_dev(mc, TYPE_RAMFB_DEVICE); } static const TypeInfo microvm_machine_info = { @@ -524,6 +617,7 @@ static const TypeInfo microvm_machine_info = { .class_size = sizeof(MicrovmMachineClass), .class_init = microvm_class_init, .interfaces = (InterfaceInfo[]) { + { TYPE_HOTPLUG_HANDLER }, { } }, }; diff --git a/hw/i386/pc.c b/hw/i386/pc.c index d11daacc23..b55369357e 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -803,19 +803,6 @@ void pc_hot_add_cpu(MachineState *ms, const int64_t id, Error **errp) } } -static void rtc_set_cpus_count(ISADevice *rtc, uint16_t cpus_count) -{ - if (cpus_count > 0xff) { - /* If the number of CPUs can't be represented in 8 bits, the - * BIOS must use "FW_CFG_NB_CPUS". Set RTC field to 0 just - * to make old BIOSes fail more predictably. - */ - rtc_set_memory(rtc, 0x5f, 0); - } else { - rtc_set_memory(rtc, 0x5f, cpus_count - 1); - } -} - static void pc_machine_done(Notifier *notifier, void *data) { @@ -825,7 +812,7 @@ void pc_machine_done(Notifier *notifier, void *data) PCIBus *bus = pcms->bus; /* set the number of CPUs */ - rtc_set_cpus_count(x86ms->rtc, x86ms->boot_cpus); + x86_rtc_set_cpus_count(x86ms->rtc, x86ms->boot_cpus); if (bus) { int extra_hosts = 0; @@ -1274,6 +1261,7 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { const PCMachineState *pcms = PC_MACHINE(hotplug_dev); + const X86MachineState *x86ms = X86_MACHINE(hotplug_dev); const PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms); const MachineState *ms = MACHINE(hotplug_dev); const bool is_nvdimm = object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM); @@ -1285,7 +1273,7 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, * but pcms->acpi_dev is still created. Check !acpi_enabled in * addition to cover this case. */ - if (!pcms->acpi_dev || !x86_machine_is_acpi_enabled(X86_MACHINE(pcms))) { + if (!x86ms->acpi_dev || !x86_machine_is_acpi_enabled(x86ms)) { error_setg(errp, "memory hotplug is not enabled: missing acpi device or acpi disabled"); return; @@ -1296,7 +1284,7 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, return; } - hotplug_handler_pre_plug(pcms->acpi_dev, dev, &local_err); + hotplug_handler_pre_plug(x86ms->acpi_dev, dev, &local_err); if (local_err) { error_propagate(errp, local_err); return; @@ -1311,6 +1299,7 @@ static void pc_memory_plug(HotplugHandler *hotplug_dev, { Error *local_err = NULL; PCMachineState *pcms = PC_MACHINE(hotplug_dev); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); MachineState *ms = MACHINE(hotplug_dev); bool is_nvdimm = object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM); @@ -1323,7 +1312,7 @@ static void pc_memory_plug(HotplugHandler *hotplug_dev, nvdimm_plug(ms->nvdimms_state); } - hotplug_handler_plug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &error_abort); + hotplug_handler_plug(x86ms->acpi_dev, dev, &error_abort); out: error_propagate(errp, local_err); } @@ -1331,14 +1320,14 @@ out: static void pc_memory_unplug_request(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { - PCMachineState *pcms = PC_MACHINE(hotplug_dev); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); /* * When -no-acpi is used with Q35 machine type, no ACPI is built, * but pcms->acpi_dev is still created. Check !acpi_enabled in * addition to cover this case. */ - if (!pcms->acpi_dev || !x86_machine_is_acpi_enabled(X86_MACHINE(pcms))) { + if (!x86ms->acpi_dev || !x86_machine_is_acpi_enabled(x86ms)) { error_setg(errp, "memory hotplug is not enabled: missing acpi device or acpi disabled"); return; @@ -1349,7 +1338,7 @@ static void pc_memory_unplug_request(HotplugHandler *hotplug_dev, return; } - hotplug_handler_unplug_request(HOTPLUG_HANDLER(pcms->acpi_dev), dev, + hotplug_handler_unplug_request(x86ms->acpi_dev, dev, errp); } @@ -1357,9 +1346,10 @@ static void pc_memory_unplug(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { PCMachineState *pcms = PC_MACHINE(hotplug_dev); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); Error *local_err = NULL; - hotplug_handler_unplug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err); + hotplug_handler_unplug(x86ms->acpi_dev, dev, &local_err); if (local_err) { goto out; } @@ -1370,263 +1360,6 @@ static void pc_memory_unplug(HotplugHandler *hotplug_dev, error_propagate(errp, local_err); } -static int pc_apic_cmp(const void *a, const void *b) -{ - CPUArchId *apic_a = (CPUArchId *)a; - CPUArchId *apic_b = (CPUArchId *)b; - - return apic_a->arch_id - apic_b->arch_id; -} - -/* returns pointer to CPUArchId descriptor that matches CPU's apic_id - * in ms->possible_cpus->cpus, if ms->possible_cpus->cpus has no - * entry corresponding to CPU's apic_id returns NULL. - */ -static CPUArchId *pc_find_cpu_slot(MachineState *ms, uint32_t id, int *idx) -{ - CPUArchId apic_id, *found_cpu; - - apic_id.arch_id = id; - found_cpu = bsearch(&apic_id, ms->possible_cpus->cpus, - ms->possible_cpus->len, sizeof(*ms->possible_cpus->cpus), - pc_apic_cmp); - if (found_cpu && idx) { - *idx = found_cpu - ms->possible_cpus->cpus; - } - return found_cpu; -} - -static void pc_cpu_plug(HotplugHandler *hotplug_dev, - DeviceState *dev, Error **errp) -{ - CPUArchId *found_cpu; - Error *local_err = NULL; - X86CPU *cpu = X86_CPU(dev); - PCMachineState *pcms = PC_MACHINE(hotplug_dev); - X86MachineState *x86ms = X86_MACHINE(pcms); - - if (pcms->acpi_dev) { - hotplug_handler_plug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err); - if (local_err) { - goto out; - } - } - - /* increment the number of CPUs */ - x86ms->boot_cpus++; - if (x86ms->rtc) { - rtc_set_cpus_count(x86ms->rtc, x86ms->boot_cpus); - } - if (x86ms->fw_cfg) { - fw_cfg_modify_i16(x86ms->fw_cfg, FW_CFG_NB_CPUS, x86ms->boot_cpus); - } - - found_cpu = pc_find_cpu_slot(MACHINE(pcms), cpu->apic_id, NULL); - found_cpu->cpu = OBJECT(dev); -out: - error_propagate(errp, local_err); -} -static void pc_cpu_unplug_request_cb(HotplugHandler *hotplug_dev, - DeviceState *dev, Error **errp) -{ - int idx = -1; - X86CPU *cpu = X86_CPU(dev); - PCMachineState *pcms = PC_MACHINE(hotplug_dev); - - if (!pcms->acpi_dev) { - error_setg(errp, "CPU hot unplug not supported without ACPI"); - return; - } - - pc_find_cpu_slot(MACHINE(pcms), cpu->apic_id, &idx); - assert(idx != -1); - if (idx == 0) { - error_setg(errp, "Boot CPU is unpluggable"); - return; - } - - hotplug_handler_unplug_request(HOTPLUG_HANDLER(pcms->acpi_dev), dev, - errp); -} - -static void pc_cpu_unplug_cb(HotplugHandler *hotplug_dev, - DeviceState *dev, Error **errp) -{ - CPUArchId *found_cpu; - Error *local_err = NULL; - X86CPU *cpu = X86_CPU(dev); - PCMachineState *pcms = PC_MACHINE(hotplug_dev); - X86MachineState *x86ms = X86_MACHINE(pcms); - - hotplug_handler_unplug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err); - if (local_err) { - goto out; - } - - found_cpu = pc_find_cpu_slot(MACHINE(pcms), cpu->apic_id, NULL); - found_cpu->cpu = NULL; - qdev_unrealize(dev); - - /* decrement the number of CPUs */ - x86ms->boot_cpus--; - /* Update the number of CPUs in CMOS */ - rtc_set_cpus_count(x86ms->rtc, x86ms->boot_cpus); - fw_cfg_modify_i16(x86ms->fw_cfg, FW_CFG_NB_CPUS, x86ms->boot_cpus); - out: - error_propagate(errp, local_err); -} - -static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, - DeviceState *dev, Error **errp) -{ - int idx; - CPUState *cs; - CPUArchId *cpu_slot; - X86CPUTopoIDs topo_ids; - X86CPU *cpu = X86_CPU(dev); - CPUX86State *env = &cpu->env; - MachineState *ms = MACHINE(hotplug_dev); - PCMachineState *pcms = PC_MACHINE(hotplug_dev); - X86MachineState *x86ms = X86_MACHINE(pcms); - unsigned int smp_cores = ms->smp.cores; - unsigned int smp_threads = ms->smp.threads; - X86CPUTopoInfo topo_info; - - if(!object_dynamic_cast(OBJECT(cpu), ms->cpu_type)) { - error_setg(errp, "Invalid CPU type, expected cpu type: '%s'", - ms->cpu_type); - return; - } - - init_topo_info(&topo_info, x86ms); - - env->nr_dies = x86ms->smp_dies; - - /* - * If APIC ID is not set, - * set it based on socket/die/core/thread properties. - */ - if (cpu->apic_id == UNASSIGNED_APIC_ID) { - int max_socket = (ms->smp.max_cpus - 1) / - smp_threads / smp_cores / x86ms->smp_dies; - - /* - * die-id was optional in QEMU 4.0 and older, so keep it optional - * if there's only one die per socket. - */ - if (cpu->die_id < 0 && x86ms->smp_dies == 1) { - cpu->die_id = 0; - } - - if (cpu->socket_id < 0) { - error_setg(errp, "CPU socket-id is not set"); - return; - } else if (cpu->socket_id > max_socket) { - error_setg(errp, "Invalid CPU socket-id: %u must be in range 0:%u", - cpu->socket_id, max_socket); - return; - } - if (cpu->die_id < 0) { - error_setg(errp, "CPU die-id is not set"); - return; - } else if (cpu->die_id > x86ms->smp_dies - 1) { - error_setg(errp, "Invalid CPU die-id: %u must be in range 0:%u", - cpu->die_id, x86ms->smp_dies - 1); - return; - } - if (cpu->core_id < 0) { - error_setg(errp, "CPU core-id is not set"); - return; - } else if (cpu->core_id > (smp_cores - 1)) { - error_setg(errp, "Invalid CPU core-id: %u must be in range 0:%u", - cpu->core_id, smp_cores - 1); - return; - } - if (cpu->thread_id < 0) { - error_setg(errp, "CPU thread-id is not set"); - return; - } else if (cpu->thread_id > (smp_threads - 1)) { - error_setg(errp, "Invalid CPU thread-id: %u must be in range 0:%u", - cpu->thread_id, smp_threads - 1); - return; - } - - topo_ids.pkg_id = cpu->socket_id; - topo_ids.die_id = cpu->die_id; - topo_ids.core_id = cpu->core_id; - topo_ids.smt_id = cpu->thread_id; - cpu->apic_id = x86_apicid_from_topo_ids(&topo_info, &topo_ids); - } - - cpu_slot = pc_find_cpu_slot(MACHINE(pcms), cpu->apic_id, &idx); - if (!cpu_slot) { - MachineState *ms = MACHINE(pcms); - - x86_topo_ids_from_apicid(cpu->apic_id, &topo_info, &topo_ids); - error_setg(errp, - "Invalid CPU [socket: %u, die: %u, core: %u, thread: %u] with" - " APIC ID %" PRIu32 ", valid index range 0:%d", - topo_ids.pkg_id, topo_ids.die_id, topo_ids.core_id, topo_ids.smt_id, - cpu->apic_id, ms->possible_cpus->len - 1); - return; - } - - if (cpu_slot->cpu) { - error_setg(errp, "CPU[%d] with APIC ID %" PRIu32 " exists", - idx, cpu->apic_id); - return; - } - - /* if 'address' properties socket-id/core-id/thread-id are not set, set them - * so that machine_query_hotpluggable_cpus would show correct values - */ - /* TODO: move socket_id/core_id/thread_id checks into x86_cpu_realizefn() - * once -smp refactoring is complete and there will be CPU private - * CPUState::nr_cores and CPUState::nr_threads fields instead of globals */ - x86_topo_ids_from_apicid(cpu->apic_id, &topo_info, &topo_ids); - if (cpu->socket_id != -1 && cpu->socket_id != topo_ids.pkg_id) { - error_setg(errp, "property socket-id: %u doesn't match set apic-id:" - " 0x%x (socket-id: %u)", cpu->socket_id, cpu->apic_id, - topo_ids.pkg_id); - return; - } - cpu->socket_id = topo_ids.pkg_id; - - if (cpu->die_id != -1 && cpu->die_id != topo_ids.die_id) { - error_setg(errp, "property die-id: %u doesn't match set apic-id:" - " 0x%x (die-id: %u)", cpu->die_id, cpu->apic_id, topo_ids.die_id); - return; - } - cpu->die_id = topo_ids.die_id; - - if (cpu->core_id != -1 && cpu->core_id != topo_ids.core_id) { - error_setg(errp, "property core-id: %u doesn't match set apic-id:" - " 0x%x (core-id: %u)", cpu->core_id, cpu->apic_id, - topo_ids.core_id); - return; - } - cpu->core_id = topo_ids.core_id; - - if (cpu->thread_id != -1 && cpu->thread_id != topo_ids.smt_id) { - error_setg(errp, "property thread-id: %u doesn't match set apic-id:" - " 0x%x (thread-id: %u)", cpu->thread_id, cpu->apic_id, - topo_ids.smt_id); - return; - } - cpu->thread_id = topo_ids.smt_id; - - if (hyperv_feat_enabled(cpu, HYPERV_FEAT_VPINDEX) && - !kvm_hv_vpindex_settable()) { - error_setg(errp, "kernel doesn't allow setting HyperV VP_INDEX"); - return; - } - - cs = CPU(cpu); - cs->cpu_index = idx; - - numa_cpu_pre_plug(cpu_slot, dev, errp); -} - static void pc_virtio_md_pci_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { @@ -1695,7 +1428,7 @@ static void pc_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev, if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { pc_memory_pre_plug(hotplug_dev, dev, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { - pc_cpu_pre_plug(hotplug_dev, dev, errp); + x86_cpu_pre_plug(hotplug_dev, dev, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_PMEM_PCI) || object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) { pc_virtio_md_pci_pre_plug(hotplug_dev, dev, errp); @@ -1708,7 +1441,7 @@ static void pc_machine_device_plug_cb(HotplugHandler *hotplug_dev, if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { pc_memory_plug(hotplug_dev, dev, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { - pc_cpu_plug(hotplug_dev, dev, errp); + x86_cpu_plug(hotplug_dev, dev, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_PMEM_PCI) || object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) { pc_virtio_md_pci_plug(hotplug_dev, dev, errp); @@ -1721,7 +1454,7 @@ static void pc_machine_device_unplug_request_cb(HotplugHandler *hotplug_dev, if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { pc_memory_unplug_request(hotplug_dev, dev, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { - pc_cpu_unplug_request_cb(hotplug_dev, dev, errp); + x86_cpu_unplug_request_cb(hotplug_dev, dev, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_PMEM_PCI) || object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) { pc_virtio_md_pci_unplug_request(hotplug_dev, dev, errp); @@ -1737,7 +1470,7 @@ static void pc_machine_device_unplug_cb(HotplugHandler *hotplug_dev, if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { pc_memory_unplug(hotplug_dev, dev, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { - pc_cpu_unplug_cb(hotplug_dev, dev, errp); + x86_cpu_unplug_cb(hotplug_dev, dev, errp); } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_PMEM_PCI) || object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) { pc_virtio_md_pci_unplug(hotplug_dev, dev, errp); diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index 33fa035fb7..6f3e78bb60 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -293,7 +293,7 @@ static void pc_init1(MachineState *machine, object_property_add_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP, TYPE_HOTPLUG_HANDLER, - (Object **)&pcms->acpi_dev, + (Object **)&x86ms->acpi_dev, object_property_allow_set_link, OBJ_PROP_LINK_STRONG); object_property_set_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP, diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index 0cb9c18cd4..622d039717 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -240,7 +240,7 @@ static void pc_q35_init(MachineState *machine) object_property_add_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP, TYPE_HOTPLUG_HANDLER, - (Object **)&pcms->acpi_dev, + (Object **)&x86ms->acpi_dev, object_property_allow_set_link, OBJ_PROP_LINK_STRONG); object_property_set_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP, diff --git a/hw/i386/port92.c b/hw/i386/port92.c index c00dcb261b..e1379a4f98 100644 --- a/hw/i386/port92.c +++ b/hw/i386/port92.c @@ -14,9 +14,7 @@ #include "trace.h" #include "qom/object.h" -typedef struct Port92State Port92State; -DECLARE_INSTANCE_CHECKER(Port92State, PORT92, - TYPE_PORT92) +OBJECT_DECLARE_SIMPLE_TYPE(Port92State, PORT92) struct Port92State { ISADevice parent_obj; diff --git a/hw/i386/vmmouse.c b/hw/i386/vmmouse.c index ae4cbc7add..a3556438f0 100644 --- a/hw/i386/vmmouse.c +++ b/hw/i386/vmmouse.c @@ -51,9 +51,7 @@ #endif #define TYPE_VMMOUSE "vmmouse" -typedef struct VMMouseState VMMouseState; -DECLARE_INSTANCE_CHECKER(VMMouseState, VMMOUSE, - TYPE_VMMOUSE) +OBJECT_DECLARE_SIMPLE_TYPE(VMMouseState, VMMOUSE) struct VMMouseState { ISADevice parent_obj; diff --git a/hw/i386/vmport.c b/hw/i386/vmport.c index df52b6f903..20d605506b 100644 --- a/hw/i386/vmport.c +++ b/hw/i386/vmport.c @@ -63,9 +63,7 @@ #define VCPU_INFO_LEGACY_X2APIC_BIT 3 #define VCPU_INFO_RESERVED_BIT 31 -typedef struct VMPortState VMPortState; -DECLARE_INSTANCE_CHECKER(VMPortState, VMPORT, - TYPE_VMPORT) +OBJECT_DECLARE_SIMPLE_TYPE(VMPortState, VMPORT) struct VMPortState { ISADevice parent_obj; diff --git a/hw/i386/x86.c b/hw/i386/x86.c index c1954db152..c2ea989579 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -41,6 +41,7 @@ #include "hw/i386/topology.h" #include "hw/i386/fw_cfg.h" #include "hw/intc/i8259.h" +#include "hw/rtc/mc146818rtc.h" #include "hw/acpi/cpu_hotplug.h" #include "hw/irq.h" @@ -137,6 +138,276 @@ void x86_cpus_init(X86MachineState *x86ms, int default_cpu_version) } } +void x86_rtc_set_cpus_count(ISADevice *rtc, uint16_t cpus_count) +{ + if (cpus_count > 0xff) { + /* + * If the number of CPUs can't be represented in 8 bits, the + * BIOS must use "FW_CFG_NB_CPUS". Set RTC field to 0 just + * to make old BIOSes fail more predictably. + */ + rtc_set_memory(rtc, 0x5f, 0); + } else { + rtc_set_memory(rtc, 0x5f, cpus_count - 1); + } +} + +static int x86_apic_cmp(const void *a, const void *b) +{ + CPUArchId *apic_a = (CPUArchId *)a; + CPUArchId *apic_b = (CPUArchId *)b; + + return apic_a->arch_id - apic_b->arch_id; +} + +/* + * returns pointer to CPUArchId descriptor that matches CPU's apic_id + * in ms->possible_cpus->cpus, if ms->possible_cpus->cpus has no + * entry corresponding to CPU's apic_id returns NULL. + */ +CPUArchId *x86_find_cpu_slot(MachineState *ms, uint32_t id, int *idx) +{ + CPUArchId apic_id, *found_cpu; + + apic_id.arch_id = id; + found_cpu = bsearch(&apic_id, ms->possible_cpus->cpus, + ms->possible_cpus->len, sizeof(*ms->possible_cpus->cpus), + x86_apic_cmp); + if (found_cpu && idx) { + *idx = found_cpu - ms->possible_cpus->cpus; + } + return found_cpu; +} + +void x86_cpu_plug(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + CPUArchId *found_cpu; + Error *local_err = NULL; + X86CPU *cpu = X86_CPU(dev); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); + + if (x86ms->acpi_dev) { + hotplug_handler_plug(x86ms->acpi_dev, dev, &local_err); + if (local_err) { + goto out; + } + } + + /* increment the number of CPUs */ + x86ms->boot_cpus++; + if (x86ms->rtc) { + x86_rtc_set_cpus_count(x86ms->rtc, x86ms->boot_cpus); + } + if (x86ms->fw_cfg) { + fw_cfg_modify_i16(x86ms->fw_cfg, FW_CFG_NB_CPUS, x86ms->boot_cpus); + } + + found_cpu = x86_find_cpu_slot(MACHINE(x86ms), cpu->apic_id, NULL); + found_cpu->cpu = OBJECT(dev); +out: + error_propagate(errp, local_err); +} + +void x86_cpu_unplug_request_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + int idx = -1; + X86CPU *cpu = X86_CPU(dev); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); + + if (!x86ms->acpi_dev) { + error_setg(errp, "CPU hot unplug not supported without ACPI"); + return; + } + + x86_find_cpu_slot(MACHINE(x86ms), cpu->apic_id, &idx); + assert(idx != -1); + if (idx == 0) { + error_setg(errp, "Boot CPU is unpluggable"); + return; + } + + hotplug_handler_unplug_request(x86ms->acpi_dev, dev, + errp); +} + +void x86_cpu_unplug_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + CPUArchId *found_cpu; + Error *local_err = NULL; + X86CPU *cpu = X86_CPU(dev); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); + + hotplug_handler_unplug(x86ms->acpi_dev, dev, &local_err); + if (local_err) { + goto out; + } + + found_cpu = x86_find_cpu_slot(MACHINE(x86ms), cpu->apic_id, NULL); + found_cpu->cpu = NULL; + qdev_unrealize(dev); + + /* decrement the number of CPUs */ + x86ms->boot_cpus--; + /* Update the number of CPUs in CMOS */ + x86_rtc_set_cpus_count(x86ms->rtc, x86ms->boot_cpus); + fw_cfg_modify_i16(x86ms->fw_cfg, FW_CFG_NB_CPUS, x86ms->boot_cpus); + out: + error_propagate(errp, local_err); +} + +void x86_cpu_pre_plug(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + int idx; + CPUState *cs; + CPUArchId *cpu_slot; + X86CPUTopoIDs topo_ids; + X86CPU *cpu = X86_CPU(dev); + CPUX86State *env = &cpu->env; + MachineState *ms = MACHINE(hotplug_dev); + X86MachineState *x86ms = X86_MACHINE(hotplug_dev); + unsigned int smp_cores = ms->smp.cores; + unsigned int smp_threads = ms->smp.threads; + X86CPUTopoInfo topo_info; + + if (!object_dynamic_cast(OBJECT(cpu), ms->cpu_type)) { + error_setg(errp, "Invalid CPU type, expected cpu type: '%s'", + ms->cpu_type); + return; + } + + init_topo_info(&topo_info, x86ms); + + env->nr_dies = x86ms->smp_dies; + + /* + * If APIC ID is not set, + * set it based on socket/die/core/thread properties. + */ + if (cpu->apic_id == UNASSIGNED_APIC_ID) { + int max_socket = (ms->smp.max_cpus - 1) / + smp_threads / smp_cores / x86ms->smp_dies; + + /* + * die-id was optional in QEMU 4.0 and older, so keep it optional + * if there's only one die per socket. + */ + if (cpu->die_id < 0 && x86ms->smp_dies == 1) { + cpu->die_id = 0; + } + + if (cpu->socket_id < 0) { + error_setg(errp, "CPU socket-id is not set"); + return; + } else if (cpu->socket_id > max_socket) { + error_setg(errp, "Invalid CPU socket-id: %u must be in range 0:%u", + cpu->socket_id, max_socket); + return; + } + if (cpu->die_id < 0) { + error_setg(errp, "CPU die-id is not set"); + return; + } else if (cpu->die_id > x86ms->smp_dies - 1) { + error_setg(errp, "Invalid CPU die-id: %u must be in range 0:%u", + cpu->die_id, x86ms->smp_dies - 1); + return; + } + if (cpu->core_id < 0) { + error_setg(errp, "CPU core-id is not set"); + return; + } else if (cpu->core_id > (smp_cores - 1)) { + error_setg(errp, "Invalid CPU core-id: %u must be in range 0:%u", + cpu->core_id, smp_cores - 1); + return; + } + if (cpu->thread_id < 0) { + error_setg(errp, "CPU thread-id is not set"); + return; + } else if (cpu->thread_id > (smp_threads - 1)) { + error_setg(errp, "Invalid CPU thread-id: %u must be in range 0:%u", + cpu->thread_id, smp_threads - 1); + return; + } + + topo_ids.pkg_id = cpu->socket_id; + topo_ids.die_id = cpu->die_id; + topo_ids.core_id = cpu->core_id; + topo_ids.smt_id = cpu->thread_id; + cpu->apic_id = x86_apicid_from_topo_ids(&topo_info, &topo_ids); + } + + cpu_slot = x86_find_cpu_slot(MACHINE(x86ms), cpu->apic_id, &idx); + if (!cpu_slot) { + MachineState *ms = MACHINE(x86ms); + + x86_topo_ids_from_apicid(cpu->apic_id, &topo_info, &topo_ids); + error_setg(errp, + "Invalid CPU [socket: %u, die: %u, core: %u, thread: %u] with" + " APIC ID %" PRIu32 ", valid index range 0:%d", + topo_ids.pkg_id, topo_ids.die_id, topo_ids.core_id, topo_ids.smt_id, + cpu->apic_id, ms->possible_cpus->len - 1); + return; + } + + if (cpu_slot->cpu) { + error_setg(errp, "CPU[%d] with APIC ID %" PRIu32 " exists", + idx, cpu->apic_id); + return; + } + + /* if 'address' properties socket-id/core-id/thread-id are not set, set them + * so that machine_query_hotpluggable_cpus would show correct values + */ + /* TODO: move socket_id/core_id/thread_id checks into x86_cpu_realizefn() + * once -smp refactoring is complete and there will be CPU private + * CPUState::nr_cores and CPUState::nr_threads fields instead of globals */ + x86_topo_ids_from_apicid(cpu->apic_id, &topo_info, &topo_ids); + if (cpu->socket_id != -1 && cpu->socket_id != topo_ids.pkg_id) { + error_setg(errp, "property socket-id: %u doesn't match set apic-id:" + " 0x%x (socket-id: %u)", cpu->socket_id, cpu->apic_id, + topo_ids.pkg_id); + return; + } + cpu->socket_id = topo_ids.pkg_id; + + if (cpu->die_id != -1 && cpu->die_id != topo_ids.die_id) { + error_setg(errp, "property die-id: %u doesn't match set apic-id:" + " 0x%x (die-id: %u)", cpu->die_id, cpu->apic_id, topo_ids.die_id); + return; + } + cpu->die_id = topo_ids.die_id; + + if (cpu->core_id != -1 && cpu->core_id != topo_ids.core_id) { + error_setg(errp, "property core-id: %u doesn't match set apic-id:" + " 0x%x (core-id: %u)", cpu->core_id, cpu->apic_id, + topo_ids.core_id); + return; + } + cpu->core_id = topo_ids.core_id; + + if (cpu->thread_id != -1 && cpu->thread_id != topo_ids.smt_id) { + error_setg(errp, "property thread-id: %u doesn't match set apic-id:" + " 0x%x (thread-id: %u)", cpu->thread_id, cpu->apic_id, + topo_ids.smt_id); + return; + } + cpu->thread_id = topo_ids.smt_id; + + if (hyperv_feat_enabled(cpu, HYPERV_FEAT_VPINDEX) && + !kvm_hv_vpindex_settable()) { + error_setg(errp, "kernel doesn't allow setting HyperV VP_INDEX"); + return; + } + + cs = CPU(cpu); + cs->cpu_index = idx; + + numa_cpu_pre_plug(cpu_slot, dev, errp); +} + CpuInstanceProperties x86_cpu_index_to_props(MachineState *ms, unsigned cpu_index) { @@ -821,7 +1092,7 @@ void x86_bios_rom_init(MemoryRegion *rom_memory, bool isapc_ram_fw) bios); } -bool x86_machine_is_smm_enabled(X86MachineState *x86ms) +bool x86_machine_is_smm_enabled(const X86MachineState *x86ms) { bool smm_available = false; @@ -863,7 +1134,7 @@ static void x86_machine_set_smm(Object *obj, Visitor *v, const char *name, visit_type_OnOffAuto(v, name, &x86ms->smm, errp); } -bool x86_machine_is_acpi_enabled(X86MachineState *x86ms) +bool x86_machine_is_acpi_enabled(const X86MachineState *x86ms) { if (x86ms->acpi == ON_OFF_AUTO_OFF) { return false; diff --git a/hw/i386/xen/xen_platform.c b/hw/i386/xen/xen_platform.c index a8bbe8c833..e9601031bf 100644 --- a/hw/i386/xen/xen_platform.c +++ b/hw/i386/xen/xen_platform.c @@ -69,11 +69,9 @@ struct PCIXenPlatformState { char log_buffer[4096]; int log_buffer_off; }; -typedef struct PCIXenPlatformState PCIXenPlatformState; #define TYPE_XEN_PLATFORM "xen-platform" -DECLARE_INSTANCE_CHECKER(PCIXenPlatformState, XEN_PLATFORM, - TYPE_XEN_PLATFORM) +OBJECT_DECLARE_SIMPLE_TYPE(PCIXenPlatformState, XEN_PLATFORM) #define XEN_PLATFORM_IOPORT 0x10 diff --git a/hw/i386/xen/xen_pvdevice.c b/hw/i386/xen/xen_pvdevice.c index 67f83616d3..1ea95fa601 100644 --- a/hw/i386/xen/xen_pvdevice.c +++ b/hw/i386/xen/xen_pvdevice.c @@ -40,9 +40,7 @@ #define TYPE_XEN_PV_DEVICE "xen-pvdevice" -typedef struct XenPVDevice XenPVDevice; -DECLARE_INSTANCE_CHECKER(XenPVDevice, XEN_PV_DEVICE, - TYPE_XEN_PV_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(XenPVDevice, XEN_PV_DEVICE) struct XenPVDevice { /*< private >*/ diff --git a/hw/ide/isa.c b/hw/ide/isa.c index 9a3489691b..6bc19de226 100644 --- a/hw/ide/isa.c +++ b/hw/ide/isa.c @@ -38,9 +38,7 @@ /* ISA IDE definitions */ #define TYPE_ISA_IDE "isa-ide" -typedef struct ISAIDEState ISAIDEState; -DECLARE_INSTANCE_CHECKER(ISAIDEState, ISA_IDE, - TYPE_ISA_IDE) +OBJECT_DECLARE_SIMPLE_TYPE(ISAIDEState, ISA_IDE) struct ISAIDEState { ISADevice parent_obj; diff --git a/hw/ide/microdrive.c b/hw/ide/microdrive.c index 6e7f5df901..58a14fea36 100644 --- a/hw/ide/microdrive.c +++ b/hw/ide/microdrive.c @@ -34,9 +34,7 @@ #include "qom/object.h" #define TYPE_MICRODRIVE "microdrive" -typedef struct MicroDriveState MicroDriveState; -DECLARE_INSTANCE_CHECKER(MicroDriveState, MICRODRIVE, - TYPE_MICRODRIVE) +OBJECT_DECLARE_SIMPLE_TYPE(MicroDriveState, MICRODRIVE) /***********************************************************/ /* CF-ATA Microdrive */ diff --git a/hw/ide/sii3112.c b/hw/ide/sii3112.c index 968c239ab8..34c347b9c2 100644 --- a/hw/ide/sii3112.c +++ b/hw/ide/sii3112.c @@ -19,9 +19,7 @@ #include "qom/object.h" #define TYPE_SII3112_PCI "sii3112" -typedef struct SiI3112PCIState SiI3112PCIState; -DECLARE_INSTANCE_CHECKER(SiI3112PCIState, SII3112_PCI, - TYPE_SII3112_PCI) +OBJECT_DECLARE_SIMPLE_TYPE(SiI3112PCIState, SII3112_PCI) typedef struct SiI3112Regs { uint32_t confstat; diff --git a/hw/input/adb-kbd.c b/hw/input/adb-kbd.c index fe0c363d64..a9088c910c 100644 --- a/hw/input/adb-kbd.c +++ b/hw/input/adb-kbd.c @@ -32,10 +32,7 @@ #include "trace.h" #include "qom/object.h" -typedef struct ADBKeyboardClass ADBKeyboardClass; -typedef struct KBDState KBDState; -DECLARE_OBJ_CHECKERS(KBDState, ADBKeyboardClass, - ADB_KEYBOARD, TYPE_ADB_KEYBOARD) +OBJECT_DECLARE_TYPE(KBDState, ADBKeyboardClass, ADB_KEYBOARD) struct KBDState { /*< private >*/ diff --git a/hw/input/adb-mouse.c b/hw/input/adb-mouse.c index f5750909b4..e6b341f028 100644 --- a/hw/input/adb-mouse.c +++ b/hw/input/adb-mouse.c @@ -31,10 +31,7 @@ #include "trace.h" #include "qom/object.h" -typedef struct ADBMouseClass ADBMouseClass; -typedef struct MouseState MouseState; -DECLARE_OBJ_CHECKERS(MouseState, ADBMouseClass, - ADB_MOUSE, TYPE_ADB_MOUSE) +OBJECT_DECLARE_TYPE(MouseState, ADBMouseClass, ADB_MOUSE) struct MouseState { /*< public >*/ diff --git a/hw/input/lm832x.c b/hw/input/lm832x.c index 70245fd817..4cb1e9de01 100644 --- a/hw/input/lm832x.c +++ b/hw/input/lm832x.c @@ -28,9 +28,7 @@ #include "qom/object.h" #define TYPE_LM8323 "lm8323" -typedef struct LM823KbdState LM823KbdState; -DECLARE_INSTANCE_CHECKER(LM823KbdState, LM8323, - TYPE_LM8323) +OBJECT_DECLARE_SIMPLE_TYPE(LM823KbdState, LM8323) struct LM823KbdState { I2CSlave parent_obj; diff --git a/hw/input/milkymist-softusb.c b/hw/input/milkymist-softusb.c index eaaf8adde4..5acd7a6f7d 100644 --- a/hw/input/milkymist-softusb.c +++ b/hw/input/milkymist-softusb.c @@ -51,9 +51,7 @@ enum { #define COMLOC_KEVT_BASE 0x1143 #define TYPE_MILKYMIST_SOFTUSB "milkymist-softusb" -typedef struct MilkymistSoftUsbState MilkymistSoftUsbState; -DECLARE_INSTANCE_CHECKER(MilkymistSoftUsbState, MILKYMIST_SOFTUSB, - TYPE_MILKYMIST_SOFTUSB) +OBJECT_DECLARE_SIMPLE_TYPE(MilkymistSoftUsbState, MILKYMIST_SOFTUSB) struct MilkymistSoftUsbState { SysBusDevice parent_obj; diff --git a/hw/input/pl050.c b/hw/input/pl050.c index 7c53ae97da..d279b6c148 100644 --- a/hw/input/pl050.c +++ b/hw/input/pl050.c @@ -17,9 +17,7 @@ #include "qom/object.h" #define TYPE_PL050 "pl050" -typedef struct PL050State PL050State; -DECLARE_INSTANCE_CHECKER(PL050State, PL050, - TYPE_PL050) +OBJECT_DECLARE_SIMPLE_TYPE(PL050State, PL050) struct PL050State { SysBusDevice parent_obj; diff --git a/hw/intc/arm_gicv2m.c b/hw/intc/arm_gicv2m.c index 04d7a6d68b..596fa66648 100644 --- a/hw/intc/arm_gicv2m.c +++ b/hw/intc/arm_gicv2m.c @@ -37,9 +37,7 @@ #include "qom/object.h" #define TYPE_ARM_GICV2M "arm-gicv2m" -typedef struct ARMGICv2mState ARMGICv2mState; -DECLARE_INSTANCE_CHECKER(ARMGICv2mState, ARM_GICV2M, - TYPE_ARM_GICV2M) +OBJECT_DECLARE_SIMPLE_TYPE(ARMGICv2mState, ARM_GICV2M) #define GICV2M_NUM_SPI_MAX 128 diff --git a/hw/intc/exynos4210_combiner.c b/hw/intc/exynos4210_combiner.c index 7b01481ab8..4534ee248d 100644 --- a/hw/intc/exynos4210_combiner.c +++ b/hw/intc/exynos4210_combiner.c @@ -64,9 +64,7 @@ typedef struct CombinerGroupState { } CombinerGroupState; #define TYPE_EXYNOS4210_COMBINER "exynos4210.combiner" -typedef struct Exynos4210CombinerState Exynos4210CombinerState; -DECLARE_INSTANCE_CHECKER(Exynos4210CombinerState, EXYNOS4210_COMBINER, - TYPE_EXYNOS4210_COMBINER) +OBJECT_DECLARE_SIMPLE_TYPE(Exynos4210CombinerState, EXYNOS4210_COMBINER) struct Exynos4210CombinerState { SysBusDevice parent_obj; diff --git a/hw/intc/exynos4210_gic.c b/hw/intc/exynos4210_gic.c index f9487673fc..bc73d1f115 100644 --- a/hw/intc/exynos4210_gic.c +++ b/hw/intc/exynos4210_gic.c @@ -265,9 +265,7 @@ uint32_t exynos4210_get_irq(uint32_t grp, uint32_t bit) /********* GIC part *********/ #define TYPE_EXYNOS4210_GIC "exynos4210.gic" -typedef struct Exynos4210GicState Exynos4210GicState; -DECLARE_INSTANCE_CHECKER(Exynos4210GicState, EXYNOS4210_GIC, - TYPE_EXYNOS4210_GIC) +OBJECT_DECLARE_SIMPLE_TYPE(Exynos4210GicState, EXYNOS4210_GIC) struct Exynos4210GicState { SysBusDevice parent_obj; @@ -384,9 +382,7 @@ type_init(exynos4210_gic_register_types) */ #define TYPE_EXYNOS4210_IRQ_GATE "exynos4210.irq_gate" -typedef struct Exynos4210IRQGateState Exynos4210IRQGateState; -DECLARE_INSTANCE_CHECKER(Exynos4210IRQGateState, EXYNOS4210_IRQ_GATE, - TYPE_EXYNOS4210_IRQ_GATE) +OBJECT_DECLARE_SIMPLE_TYPE(Exynos4210IRQGateState, EXYNOS4210_IRQ_GATE) struct Exynos4210IRQGateState { SysBusDevice parent_obj; diff --git a/hw/intc/grlib_irqmp.c b/hw/intc/grlib_irqmp.c index 9b34a8ae03..ffec4a07ee 100644 --- a/hw/intc/grlib_irqmp.c +++ b/hw/intc/grlib_irqmp.c @@ -51,9 +51,7 @@ #define FORCE_OFFSET 0x80 #define EXTENDED_OFFSET 0xC0 -typedef struct IRQMP IRQMP; -DECLARE_INSTANCE_CHECKER(IRQMP, GRLIB_IRQMP, - TYPE_GRLIB_IRQMP) +OBJECT_DECLARE_SIMPLE_TYPE(IRQMP, GRLIB_IRQMP) typedef struct IRQMPState IRQMPState; diff --git a/hw/intc/lm32_pic.c b/hw/intc/lm32_pic.c index e8b4015efd..0c48a9cd85 100644 --- a/hw/intc/lm32_pic.c +++ b/hw/intc/lm32_pic.c @@ -30,9 +30,7 @@ #include "qom/object.h" #define TYPE_LM32_PIC "lm32-pic" -typedef struct LM32PicState LM32PicState; -DECLARE_INSTANCE_CHECKER(LM32PicState, LM32_PIC, - TYPE_LM32_PIC) +OBJECT_DECLARE_SIMPLE_TYPE(LM32PicState, LM32_PIC) struct LM32PicState { SysBusDevice parent_obj; diff --git a/hw/intc/nios2_iic.c b/hw/intc/nios2_iic.c index aa26f059a1..216db67059 100644 --- a/hw/intc/nios2_iic.c +++ b/hw/intc/nios2_iic.c @@ -28,9 +28,7 @@ #include "qom/object.h" #define TYPE_ALTERA_IIC "altera,iic" -typedef struct AlteraIIC AlteraIIC; -DECLARE_INSTANCE_CHECKER(AlteraIIC, ALTERA_IIC, - TYPE_ALTERA_IIC) +OBJECT_DECLARE_SIMPLE_TYPE(AlteraIIC, ALTERA_IIC) struct AlteraIIC { SysBusDevice parent_obj; diff --git a/hw/intc/ompic.c b/hw/intc/ompic.c index a8ea621d9e..1731a10683 100644 --- a/hw/intc/ompic.c +++ b/hw/intc/ompic.c @@ -18,9 +18,7 @@ #include "qom/object.h" #define TYPE_OR1K_OMPIC "or1k-ompic" -typedef struct OR1KOMPICState OR1KOMPICState; -DECLARE_INSTANCE_CHECKER(OR1KOMPICState, OR1K_OMPIC, - TYPE_OR1K_OMPIC) +OBJECT_DECLARE_SIMPLE_TYPE(OR1KOMPICState, OR1K_OMPIC) #define OMPIC_CTRL_IRQ_ACK (1 << 31) #define OMPIC_CTRL_IRQ_GEN (1 << 30) diff --git a/hw/intc/openpic_kvm.c b/hw/intc/openpic_kvm.c index 8c8fbeddfe..e1a39e33cb 100644 --- a/hw/intc/openpic_kvm.c +++ b/hw/intc/openpic_kvm.c @@ -39,9 +39,7 @@ #define GCR_RESET 0x80000000 -typedef struct KVMOpenPICState KVMOpenPICState; -DECLARE_INSTANCE_CHECKER(KVMOpenPICState, KVM_OPENPIC, - TYPE_KVM_OPENPIC) +OBJECT_DECLARE_SIMPLE_TYPE(KVMOpenPICState, KVM_OPENPIC) struct KVMOpenPICState { /*< private >*/ diff --git a/hw/intc/pl190.c b/hw/intc/pl190.c index ee3206132f..cd88443601 100644 --- a/hw/intc/pl190.c +++ b/hw/intc/pl190.c @@ -22,9 +22,7 @@ #define PL190_NUM_PRIO 17 #define TYPE_PL190 "pl190" -typedef struct PL190State PL190State; -DECLARE_INSTANCE_CHECKER(PL190State, PL190, - TYPE_PL190) +OBJECT_DECLARE_SIMPLE_TYPE(PL190State, PL190) struct PL190State { SysBusDevice parent_obj; diff --git a/hw/intc/puv3_intc.c b/hw/intc/puv3_intc.c index 8bceede256..65226f5e7c 100644 --- a/hw/intc/puv3_intc.c +++ b/hw/intc/puv3_intc.c @@ -20,9 +20,7 @@ #include "qemu/log.h" #define TYPE_PUV3_INTC "puv3_intc" -typedef struct PUV3INTCState PUV3INTCState; -DECLARE_INSTANCE_CHECKER(PUV3INTCState, PUV3_INTC, - TYPE_PUV3_INTC) +OBJECT_DECLARE_SIMPLE_TYPE(PUV3INTCState, PUV3_INTC) struct PUV3INTCState { SysBusDevice parent_obj; diff --git a/hw/intc/sifive_plic.h b/hw/intc/sifive_plic.h index ace76d0f1b..b75b1f145d 100644 --- a/hw/intc/sifive_plic.h +++ b/hw/intc/sifive_plic.h @@ -22,11 +22,13 @@ #define HW_SIFIVE_PLIC_H #include "hw/sysbus.h" +#include "qom/object.h" #define TYPE_SIFIVE_PLIC "riscv.sifive.plic" -#define SIFIVE_PLIC(obj) \ - OBJECT_CHECK(SiFivePLICState, (obj), TYPE_SIFIVE_PLIC) +typedef struct SiFivePLICState SiFivePLICState; +DECLARE_INSTANCE_CHECKER(SiFivePLICState, SIFIVE_PLIC, + TYPE_SIFIVE_PLIC) typedef enum PLICMode { PLICMode_U, @@ -41,7 +43,7 @@ typedef struct PLICAddr { PLICMode mode; } PLICAddr; -typedef struct SiFivePLICState { +struct SiFivePLICState { /*< private >*/ SysBusDevice parent_obj; @@ -69,7 +71,7 @@ typedef struct SiFivePLICState { uint32_t context_base; uint32_t context_stride; uint32_t aperture_size; -} SiFivePLICState; +}; DeviceState *sifive_plic_create(hwaddr addr, char *hart_config, uint32_t hartid_base, uint32_t num_sources, diff --git a/hw/intc/slavio_intctl.c b/hw/intc/slavio_intctl.c index 4a72ef5d0d..f7e59ba643 100644 --- a/hw/intc/slavio_intctl.c +++ b/hw/intc/slavio_intctl.c @@ -59,9 +59,7 @@ typedef struct SLAVIO_CPUINTCTLState { } SLAVIO_CPUINTCTLState; #define TYPE_SLAVIO_INTCTL "slavio_intctl" -typedef struct SLAVIO_INTCTLState SLAVIO_INTCTLState; -DECLARE_INSTANCE_CHECKER(SLAVIO_INTCTLState, SLAVIO_INTCTL, - TYPE_SLAVIO_INTCTL) +OBJECT_DECLARE_SIMPLE_TYPE(SLAVIO_INTCTLState, SLAVIO_INTCTL) struct SLAVIO_INTCTLState { SysBusDevice parent_obj; diff --git a/hw/ipack/tpci200.c b/hw/ipack/tpci200.c index b35e1d2ac4..d107e134c4 100644 --- a/hw/ipack/tpci200.c +++ b/hw/ipack/tpci200.c @@ -69,12 +69,10 @@ struct TPCI200State { uint16_t status; uint8_t int_set; }; -typedef struct TPCI200State TPCI200State; #define TYPE_TPCI200 "tpci200" -DECLARE_INSTANCE_CHECKER(TPCI200State, TPCI200, - TYPE_TPCI200) +OBJECT_DECLARE_SIMPLE_TYPE(TPCI200State, TPCI200) static const uint8_t local_config_regs[] = { 0x00, 0xFF, 0xFF, 0x0F, 0x00, 0xFC, 0xFF, 0x0F, 0x00, 0x00, 0x00, diff --git a/hw/ipmi/ipmi_bmc_extern.c b/hw/ipmi/ipmi_bmc_extern.c index 159831cbc5..c3f3306e66 100644 --- a/hw/ipmi/ipmi_bmc_extern.c +++ b/hw/ipmi/ipmi_bmc_extern.c @@ -62,9 +62,7 @@ #define VM_CMD_GRACEFUL_SHUTDOWN 0x09 #define TYPE_IPMI_BMC_EXTERN "ipmi-bmc-extern" -typedef struct IPMIBmcExtern IPMIBmcExtern; -DECLARE_INSTANCE_CHECKER(IPMIBmcExtern, IPMI_BMC_EXTERN, - TYPE_IPMI_BMC_EXTERN) +OBJECT_DECLARE_SIMPLE_TYPE(IPMIBmcExtern, IPMI_BMC_EXTERN) struct IPMIBmcExtern { IPMIBmc parent; diff --git a/hw/ipmi/isa_ipmi_bt.c b/hw/ipmi/isa_ipmi_bt.c index 0b69acc2e9..b7c2ad557b 100644 --- a/hw/ipmi/isa_ipmi_bt.c +++ b/hw/ipmi/isa_ipmi_bt.c @@ -34,9 +34,7 @@ #include "qom/object.h" #define TYPE_ISA_IPMI_BT "isa-ipmi-bt" -typedef struct ISAIPMIBTDevice ISAIPMIBTDevice; -DECLARE_INSTANCE_CHECKER(ISAIPMIBTDevice, ISA_IPMI_BT, - TYPE_ISA_IPMI_BT) +OBJECT_DECLARE_SIMPLE_TYPE(ISAIPMIBTDevice, ISA_IPMI_BT) struct ISAIPMIBTDevice { ISADevice dev; diff --git a/hw/ipmi/isa_ipmi_kcs.c b/hw/ipmi/isa_ipmi_kcs.c index af69e9a008..7dd6bf0040 100644 --- a/hw/ipmi/isa_ipmi_kcs.c +++ b/hw/ipmi/isa_ipmi_kcs.c @@ -34,9 +34,7 @@ #include "qom/object.h" #define TYPE_ISA_IPMI_KCS "isa-ipmi-kcs" -typedef struct ISAIPMIKCSDevice ISAIPMIKCSDevice; -DECLARE_INSTANCE_CHECKER(ISAIPMIKCSDevice, ISA_IPMI_KCS, - TYPE_ISA_IPMI_KCS) +OBJECT_DECLARE_SIMPLE_TYPE(ISAIPMIKCSDevice, ISA_IPMI_KCS) struct ISAIPMIKCSDevice { ISADevice dev; diff --git a/hw/ipmi/pci_ipmi_bt.c b/hw/ipmi/pci_ipmi_bt.c index 7e5ecea6cc..b6e52730d3 100644 --- a/hw/ipmi/pci_ipmi_bt.c +++ b/hw/ipmi/pci_ipmi_bt.c @@ -29,9 +29,7 @@ #include "qom/object.h" #define TYPE_PCI_IPMI_BT "pci-ipmi-bt" -typedef struct PCIIPMIBTDevice PCIIPMIBTDevice; -DECLARE_INSTANCE_CHECKER(PCIIPMIBTDevice, PCI_IPMI_BT, - TYPE_PCI_IPMI_BT) +OBJECT_DECLARE_SIMPLE_TYPE(PCIIPMIBTDevice, PCI_IPMI_BT) struct PCIIPMIBTDevice { PCIDevice dev; diff --git a/hw/ipmi/pci_ipmi_kcs.c b/hw/ipmi/pci_ipmi_kcs.c index c2a283a982..de13418862 100644 --- a/hw/ipmi/pci_ipmi_kcs.c +++ b/hw/ipmi/pci_ipmi_kcs.c @@ -29,9 +29,7 @@ #include "qom/object.h" #define TYPE_PCI_IPMI_KCS "pci-ipmi-kcs" -typedef struct PCIIPMIKCSDevice PCIIPMIKCSDevice; -DECLARE_INSTANCE_CHECKER(PCIIPMIKCSDevice, PCI_IPMI_KCS, - TYPE_PCI_IPMI_KCS) +OBJECT_DECLARE_SIMPLE_TYPE(PCIIPMIKCSDevice, PCI_IPMI_KCS) struct PCIIPMIKCSDevice { PCIDevice dev; diff --git a/hw/ipmi/smbus_ipmi.c b/hw/ipmi/smbus_ipmi.c index cd4c05dd1b..1fdf0a66b6 100644 --- a/hw/ipmi/smbus_ipmi.c +++ b/hw/ipmi/smbus_ipmi.c @@ -30,9 +30,7 @@ #include "qom/object.h" #define TYPE_SMBUS_IPMI "smbus-ipmi" -typedef struct SMBusIPMIDevice SMBusIPMIDevice; -DECLARE_INSTANCE_CHECKER(SMBusIPMIDevice, SMBUS_IPMI, - TYPE_SMBUS_IPMI) +OBJECT_DECLARE_SIMPLE_TYPE(SMBusIPMIDevice, SMBUS_IPMI) #define SSIF_IPMI_REQUEST 2 #define SSIF_IPMI_MULTI_PART_REQUEST_START 6 diff --git a/hw/isa/i82378.c b/hw/isa/i82378.c index 1dcf525f3f..8285b06e1d 100644 --- a/hw/isa/i82378.c +++ b/hw/isa/i82378.c @@ -27,9 +27,7 @@ #include "qom/object.h" #define TYPE_I82378 "i82378" -typedef struct I82378State I82378State; -DECLARE_INSTANCE_CHECKER(I82378State, I82378, - TYPE_I82378) +OBJECT_DECLARE_SIMPLE_TYPE(I82378State, I82378) struct I82378State { PCIDevice parent_obj; diff --git a/hw/isa/piix4.c b/hw/isa/piix4.c index 8e3ac845b8..a50d97834c 100644 --- a/hw/isa/piix4.c +++ b/hw/isa/piix4.c @@ -52,10 +52,8 @@ struct PIIX4State { MemoryRegion rcr_mem; uint8_t rcr; }; -typedef struct PIIX4State PIIX4State; -DECLARE_INSTANCE_CHECKER(PIIX4State, PIIX4_PCI_DEVICE, - TYPE_PIIX4_PCI_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(PIIX4State, PIIX4_PCI_DEVICE) static void piix4_isa_reset(DeviceState *dev) { diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c index 1e6b48b2a2..b3170c70c3 100644 --- a/hw/isa/vt82c686.c +++ b/hw/isa/vt82c686.c @@ -48,11 +48,9 @@ struct VT82C686BState { MemoryRegion superio; SuperIOConfig superio_conf; }; -typedef struct VT82C686BState VT82C686BState; #define TYPE_VT82C686B_DEVICE "VT82C686B" -DECLARE_INSTANCE_CHECKER(VT82C686BState, VT82C686B_DEVICE, - TYPE_VT82C686B_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(VT82C686BState, VT82C686B_DEVICE) static void superio_ioport_writeb(void *opaque, hwaddr addr, uint64_t data, unsigned size) @@ -169,29 +167,23 @@ struct VT686PMState { PMSMBus smb; uint32_t smb_io_base; }; -typedef struct VT686PMState VT686PMState; struct VT686AC97State { PCIDevice dev; }; -typedef struct VT686AC97State VT686AC97State; struct VT686MC97State { PCIDevice dev; }; -typedef struct VT686MC97State VT686MC97State; #define TYPE_VT82C686B_PM_DEVICE "VT82C686B_PM" -DECLARE_INSTANCE_CHECKER(VT686PMState, VT82C686B_PM_DEVICE, - TYPE_VT82C686B_PM_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(VT686PMState, VT82C686B_PM_DEVICE) #define TYPE_VT82C686B_MC97_DEVICE "VT82C686B_MC97" -DECLARE_INSTANCE_CHECKER(VT686MC97State, VT82C686B_MC97_DEVICE, - TYPE_VT82C686B_MC97_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(VT686MC97State, VT82C686B_MC97_DEVICE) #define TYPE_VT82C686B_AC97_DEVICE "VT82C686B_AC97" -DECLARE_INSTANCE_CHECKER(VT686AC97State, VT82C686B_AC97_DEVICE, - TYPE_VT82C686B_AC97_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(VT686AC97State, VT82C686B_AC97_DEVICE) static void pm_update_sci(VT686PMState *s) { diff --git a/hw/m68k/mcf_intc.c b/hw/m68k/mcf_intc.c index 7ee447240b..cf02f57a71 100644 --- a/hw/m68k/mcf_intc.c +++ b/hw/m68k/mcf_intc.c @@ -18,9 +18,7 @@ #include "qom/object.h" #define TYPE_MCF_INTC "mcf-intc" -typedef struct mcf_intc_state mcf_intc_state; -DECLARE_INSTANCE_CHECKER(mcf_intc_state, MCF_INTC, - TYPE_MCF_INTC) +OBJECT_DECLARE_SIMPLE_TYPE(mcf_intc_state, MCF_INTC) struct mcf_intc_state { SysBusDevice parent_obj; diff --git a/hw/m68k/next-cube.c b/hw/m68k/next-cube.c index cbd913b0a2..e7045980b7 100644 --- a/hw/m68k/next-cube.c +++ b/hw/m68k/next-cube.c @@ -38,9 +38,7 @@ #endif #define TYPE_NEXT_MACHINE MACHINE_TYPE_NAME("next-cube") -typedef struct NeXTState NeXTState; -DECLARE_INSTANCE_CHECKER(NeXTState, NEXT_MACHINE, - TYPE_NEXT_MACHINE) +OBJECT_DECLARE_SIMPLE_TYPE(NeXTState, NEXT_MACHINE) #define ENTRY 0x0100001e #define RAM_SIZE 0x4000000 diff --git a/hw/m68k/next-kbd.c b/hw/m68k/next-kbd.c index c7ca3fbbc9..c11b5281f1 100644 --- a/hw/m68k/next-kbd.c +++ b/hw/m68k/next-kbd.c @@ -38,9 +38,7 @@ #include "migration/vmstate.h" #include "qom/object.h" -typedef struct NextKBDState NextKBDState; -DECLARE_INSTANCE_CHECKER(NextKBDState, NEXTKBD, - TYPE_NEXTKBD) +OBJECT_DECLARE_SIMPLE_TYPE(NextKBDState, NEXTKBD) /* following defintions from next68k netbsd */ #define CSR_INT 0x00800000 diff --git a/hw/microblaze/xlnx-zynqmp-pmu.c b/hw/microblaze/xlnx-zynqmp-pmu.c index ab9924bf20..1d1b4b5c19 100644 --- a/hw/microblaze/xlnx-zynqmp-pmu.c +++ b/hw/microblaze/xlnx-zynqmp-pmu.c @@ -29,9 +29,7 @@ /* Define the PMU device */ #define TYPE_XLNX_ZYNQMP_PMU_SOC "xlnx,zynqmp-pmu-soc" -typedef struct XlnxZynqMPPMUSoCState XlnxZynqMPPMUSoCState; -DECLARE_INSTANCE_CHECKER(XlnxZynqMPPMUSoCState, XLNX_ZYNQMP_PMU_SOC, - TYPE_XLNX_ZYNQMP_PMU_SOC) +OBJECT_DECLARE_SIMPLE_TYPE(XlnxZynqMPPMUSoCState, XLNX_ZYNQMP_PMU_SOC) #define XLNX_ZYNQMP_PMU_ROM_SIZE 0x8000 #define XLNX_ZYNQMP_PMU_ROM_ADDR 0xFFD00000 diff --git a/hw/mips/gt64xxx_pci.c b/hw/mips/gt64xxx_pci.c index b613e1e011..e091bc4ed5 100644 --- a/hw/mips/gt64xxx_pci.c +++ b/hw/mips/gt64xxx_pci.c @@ -231,9 +231,7 @@ #define TYPE_GT64120_PCI_HOST_BRIDGE "gt64120" -typedef struct GT64120State GT64120State; -DECLARE_INSTANCE_CHECKER(GT64120State, GT64120_PCI_HOST_BRIDGE, - TYPE_GT64120_PCI_HOST_BRIDGE) +OBJECT_DECLARE_SIMPLE_TYPE(GT64120State, GT64120_PCI_HOST_BRIDGE) struct GT64120State { PCIHostState parent_obj; diff --git a/hw/mips/malta.c b/hw/mips/malta.c index 5b73ea4692..4019c9dc1a 100644 --- a/hw/mips/malta.c +++ b/hw/mips/malta.c @@ -89,9 +89,7 @@ typedef struct { } MaltaFPGAState; #define TYPE_MIPS_MALTA "mips-malta" -typedef struct MaltaState MaltaState; -DECLARE_INSTANCE_CHECKER(MaltaState, MIPS_MALTA, - TYPE_MIPS_MALTA) +OBJECT_DECLARE_SIMPLE_TYPE(MaltaState, MIPS_MALTA) struct MaltaState { SysBusDevice parent_obj; diff --git a/hw/misc/applesmc.c b/hw/misc/applesmc.c index dca3fba028..a4deb3e7a0 100644 --- a/hw/misc/applesmc.c +++ b/hw/misc/applesmc.c @@ -90,9 +90,7 @@ struct AppleSMCData { QLIST_ENTRY(AppleSMCData) node; }; -typedef struct AppleSMCState AppleSMCState; -DECLARE_INSTANCE_CHECKER(AppleSMCState, APPLE_SMC, - TYPE_APPLE_SMC) +OBJECT_DECLARE_SIMPLE_TYPE(AppleSMCState, APPLE_SMC) struct AppleSMCState { ISADevice parent_obj; diff --git a/hw/misc/arm_integrator_debug.c b/hw/misc/arm_integrator_debug.c index 822deffc0c..ec0d4b90d3 100644 --- a/hw/misc/arm_integrator_debug.c +++ b/hw/misc/arm_integrator_debug.c @@ -21,9 +21,7 @@ #include "qemu/module.h" #include "qom/object.h" -typedef struct IntegratorDebugState IntegratorDebugState; -DECLARE_INSTANCE_CHECKER(IntegratorDebugState, INTEGRATOR_DEBUG, - TYPE_INTEGRATOR_DEBUG) +OBJECT_DECLARE_SIMPLE_TYPE(IntegratorDebugState, INTEGRATOR_DEBUG) struct IntegratorDebugState { SysBusDevice parent_obj; diff --git a/hw/misc/arm_l2x0.c b/hw/misc/arm_l2x0.c index 93948c3bd8..75c3eb8982 100644 --- a/hw/misc/arm_l2x0.c +++ b/hw/misc/arm_l2x0.c @@ -30,9 +30,7 @@ #define CACHE_ID 0x410000c8 #define TYPE_ARM_L2X0 "l2x0" -typedef struct L2x0State L2x0State; -DECLARE_INSTANCE_CHECKER(L2x0State, ARM_L2X0, - TYPE_ARM_L2X0) +OBJECT_DECLARE_SIMPLE_TYPE(L2x0State, ARM_L2X0) struct L2x0State { SysBusDevice parent_obj; diff --git a/hw/misc/arm_sysctl.c b/hw/misc/arm_sysctl.c index f0f49e76e8..42d4693854 100644 --- a/hw/misc/arm_sysctl.c +++ b/hw/misc/arm_sysctl.c @@ -23,9 +23,7 @@ #define LOCK_VALUE 0xa05f #define TYPE_ARM_SYSCTL "realview_sysctl" -typedef struct arm_sysctl_state arm_sysctl_state; -DECLARE_INSTANCE_CHECKER(arm_sysctl_state, ARM_SYSCTL, - TYPE_ARM_SYSCTL) +OBJECT_DECLARE_SIMPLE_TYPE(arm_sysctl_state, ARM_SYSCTL) struct arm_sysctl_state { SysBusDevice parent_obj; diff --git a/hw/misc/aspeed_scu.c b/hw/misc/aspeed_scu.c index dc6dd87c22..40a38ebd85 100644 --- a/hw/misc/aspeed_scu.c +++ b/hw/misc/aspeed_scu.c @@ -670,7 +670,12 @@ static void aspeed_ast2600_scu_reset(DeviceState *dev) memcpy(s->regs, asc->resets, asc->nr_regs * 4); - s->regs[AST2600_SILICON_REV] = s->silicon_rev; + /* + * A0 reports A0 in _REV, but subsequent revisions report A1 regardless + * of actual revision. QEMU and Linux only support A1 onwards so this is + * sufficient. + */ + s->regs[AST2600_SILICON_REV] = AST2600_A1_SILICON_REV; s->regs[AST2600_SILICON_REV2] = s->silicon_rev; s->regs[AST2600_HW_STRAP1] = s->hw_strap1; s->regs[AST2600_HW_STRAP2] = s->hw_strap2; diff --git a/hw/misc/debugexit.c b/hw/misc/debugexit.c index c6b0cffd77..ab6de69ce7 100644 --- a/hw/misc/debugexit.c +++ b/hw/misc/debugexit.c @@ -14,9 +14,7 @@ #include "qom/object.h" #define TYPE_ISA_DEBUG_EXIT_DEVICE "isa-debug-exit" -typedef struct ISADebugExitState ISADebugExitState; -DECLARE_INSTANCE_CHECKER(ISADebugExitState, ISA_DEBUG_EXIT_DEVICE, - TYPE_ISA_DEBUG_EXIT_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(ISADebugExitState, ISA_DEBUG_EXIT_DEVICE) struct ISADebugExitState { ISADevice parent_obj; diff --git a/hw/misc/eccmemctl.c b/hw/misc/eccmemctl.c index 468c2a491d..c65806e3d9 100644 --- a/hw/misc/eccmemctl.c +++ b/hw/misc/eccmemctl.c @@ -127,9 +127,7 @@ #define ECC_DIAG_MASK (ECC_DIAG_SIZE - 1) #define TYPE_ECC_MEMCTL "eccmemctl" -typedef struct ECCState ECCState; -DECLARE_INSTANCE_CHECKER(ECCState, ECC_MEMCTL, - TYPE_ECC_MEMCTL) +OBJECT_DECLARE_SIMPLE_TYPE(ECCState, ECC_MEMCTL) struct ECCState { SysBusDevice parent_obj; diff --git a/hw/misc/empty_slot.c b/hw/misc/empty_slot.c index 57dcdfbe14..37b0ddfb02 100644 --- a/hw/misc/empty_slot.c +++ b/hw/misc/empty_slot.c @@ -18,9 +18,7 @@ #include "qom/object.h" #define TYPE_EMPTY_SLOT "empty_slot" -typedef struct EmptySlot EmptySlot; -DECLARE_INSTANCE_CHECKER(EmptySlot, EMPTY_SLOT, - TYPE_EMPTY_SLOT) +OBJECT_DECLARE_SIMPLE_TYPE(EmptySlot, EMPTY_SLOT) struct EmptySlot { SysBusDevice parent_obj; diff --git a/hw/misc/exynos4210_clk.c b/hw/misc/exynos4210_clk.c index 4b469f6419..58cec282f7 100644 --- a/hw/misc/exynos4210_clk.c +++ b/hw/misc/exynos4210_clk.c @@ -25,9 +25,7 @@ #include "qom/object.h" #define TYPE_EXYNOS4210_CLK "exynos4210.clk" -typedef struct Exynos4210ClkState Exynos4210ClkState; -DECLARE_INSTANCE_CHECKER(Exynos4210ClkState, EXYNOS4210_CLK, - TYPE_EXYNOS4210_CLK) +OBJECT_DECLARE_SIMPLE_TYPE(Exynos4210ClkState, EXYNOS4210_CLK) #define CLK_PLL_LOCKED BIT(29) diff --git a/hw/misc/exynos4210_pmu.c b/hw/misc/exynos4210_pmu.c index b19b82a88c..e24139c630 100644 --- a/hw/misc/exynos4210_pmu.c +++ b/hw/misc/exynos4210_pmu.c @@ -395,9 +395,7 @@ static const Exynos4210PmuReg exynos4210_pmu_regs[] = { #define PMU_NUM_OF_REGISTERS ARRAY_SIZE(exynos4210_pmu_regs) #define TYPE_EXYNOS4210_PMU "exynos4210.pmu" -typedef struct Exynos4210PmuState Exynos4210PmuState; -DECLARE_INSTANCE_CHECKER(Exynos4210PmuState, EXYNOS4210_PMU, - TYPE_EXYNOS4210_PMU) +OBJECT_DECLARE_SIMPLE_TYPE(Exynos4210PmuState, EXYNOS4210_PMU) struct Exynos4210PmuState { SysBusDevice parent_obj; diff --git a/hw/misc/exynos4210_rng.c b/hw/misc/exynos4210_rng.c index 13ec6e188b..1b9e8347a1 100644 --- a/hw/misc/exynos4210_rng.c +++ b/hw/misc/exynos4210_rng.c @@ -36,9 +36,7 @@ } while (0) #define TYPE_EXYNOS4210_RNG "exynos4210.rng" -typedef struct Exynos4210RngState Exynos4210RngState; -DECLARE_INSTANCE_CHECKER(Exynos4210RngState, EXYNOS4210_RNG, - TYPE_EXYNOS4210_RNG) +OBJECT_DECLARE_SIMPLE_TYPE(Exynos4210RngState, EXYNOS4210_RNG) /* * Exynos4220, PRNG, only polling mode is supported. diff --git a/hw/misc/milkymist-hpdmc.c b/hw/misc/milkymist-hpdmc.c index f25715e09e..5e26d90ceb 100644 --- a/hw/misc/milkymist-hpdmc.c +++ b/hw/misc/milkymist-hpdmc.c @@ -44,9 +44,7 @@ enum { }; #define TYPE_MILKYMIST_HPDMC "milkymist-hpdmc" -typedef struct MilkymistHpdmcState MilkymistHpdmcState; -DECLARE_INSTANCE_CHECKER(MilkymistHpdmcState, MILKYMIST_HPDMC, - TYPE_MILKYMIST_HPDMC) +OBJECT_DECLARE_SIMPLE_TYPE(MilkymistHpdmcState, MILKYMIST_HPDMC) struct MilkymistHpdmcState { SysBusDevice parent_obj; diff --git a/hw/misc/milkymist-pfpu.c b/hw/misc/milkymist-pfpu.c index 489bb8873f..83491dbca2 100644 --- a/hw/misc/milkymist-pfpu.c +++ b/hw/misc/milkymist-pfpu.c @@ -121,9 +121,7 @@ static const char *opcode_to_str[] = { #endif #define TYPE_MILKYMIST_PFPU "milkymist-pfpu" -typedef struct MilkymistPFPUState MilkymistPFPUState; -DECLARE_INSTANCE_CHECKER(MilkymistPFPUState, MILKYMIST_PFPU, - TYPE_MILKYMIST_PFPU) +OBJECT_DECLARE_SIMPLE_TYPE(MilkymistPFPUState, MILKYMIST_PFPU) struct MilkymistPFPUState { SysBusDevice parent_obj; diff --git a/hw/misc/mst_fpga.c b/hw/misc/mst_fpga.c index f74d8cdd4a..edfc35d5f0 100644 --- a/hw/misc/mst_fpga.c +++ b/hw/misc/mst_fpga.c @@ -41,9 +41,7 @@ #define MST_PCMCIA_CD1_IRQ 13 #define TYPE_MAINSTONE_FPGA "mainstone-fpga" -typedef struct mst_irq_state mst_irq_state; -DECLARE_INSTANCE_CHECKER(mst_irq_state, MAINSTONE_FPGA, - TYPE_MAINSTONE_FPGA) +OBJECT_DECLARE_SIMPLE_TYPE(mst_irq_state, MAINSTONE_FPGA) struct mst_irq_state { SysBusDevice parent_obj; diff --git a/hw/misc/pc-testdev.c b/hw/misc/pc-testdev.c index 577a15bf58..e389651869 100644 --- a/hw/misc/pc-testdev.c +++ b/hw/misc/pc-testdev.c @@ -54,11 +54,9 @@ struct PCTestdev { uint32_t ioport_data; char iomem_buf[IOMEM_LEN]; }; -typedef struct PCTestdev PCTestdev; #define TYPE_TESTDEV "pc-testdev" -DECLARE_INSTANCE_CHECKER(PCTestdev, TESTDEV, - TYPE_TESTDEV) +OBJECT_DECLARE_SIMPLE_TYPE(PCTestdev, TESTDEV) static uint64_t test_irq_line_read(void *opaque, hwaddr addr, unsigned size) { diff --git a/hw/misc/pci-testdev.c b/hw/misc/pci-testdev.c index 86d4816769..03845c8de3 100644 --- a/hw/misc/pci-testdev.c +++ b/hw/misc/pci-testdev.c @@ -92,12 +92,10 @@ struct PCITestDevState { uint64_t membar_size; MemoryRegion membar; }; -typedef struct PCITestDevState PCITestDevState; #define TYPE_PCI_TEST_DEV "pci-testdev" -DECLARE_INSTANCE_CHECKER(PCITestDevState, PCI_TEST_DEV, - TYPE_PCI_TEST_DEV) +OBJECT_DECLARE_SIMPLE_TYPE(PCITestDevState, PCI_TEST_DEV) #define IOTEST_IS_MEM(i) (strcmp(IOTEST_TYPE(i), "portio")) #define IOTEST_REGION(d, i) (IOTEST_IS_MEM(i) ? &(d)->mmio : &(d)->portio) diff --git a/hw/misc/puv3_pm.c b/hw/misc/puv3_pm.c index cac8497f81..676c23f7db 100644 --- a/hw/misc/puv3_pm.c +++ b/hw/misc/puv3_pm.c @@ -19,9 +19,7 @@ #include "qemu/log.h" #define TYPE_PUV3_PM "puv3_pm" -typedef struct PUV3PMState PUV3PMState; -DECLARE_INSTANCE_CHECKER(PUV3PMState, PUV3_PM, - TYPE_PUV3_PM) +OBJECT_DECLARE_SIMPLE_TYPE(PUV3PMState, PUV3_PM) struct PUV3PMState { SysBusDevice parent_obj; diff --git a/hw/misc/sga.c b/hw/misc/sga.c index 477f587ef3..4dbe6d78f9 100644 --- a/hw/misc/sga.c +++ b/hw/misc/sga.c @@ -34,9 +34,7 @@ #define SGABIOS_FILENAME "sgabios.bin" #define TYPE_SGA "sga" -typedef struct ISASGAState ISASGAState; -DECLARE_INSTANCE_CHECKER(ISASGAState, SGA, - TYPE_SGA) +OBJECT_DECLARE_SIMPLE_TYPE(ISASGAState, SGA) struct ISASGAState { ISADevice parent_obj; diff --git a/hw/misc/slavio_misc.c b/hw/misc/slavio_misc.c index ab27ad462e..e8eb71570a 100644 --- a/hw/misc/slavio_misc.c +++ b/hw/misc/slavio_misc.c @@ -40,9 +40,7 @@ */ #define TYPE_SLAVIO_MISC "slavio_misc" -typedef struct MiscState MiscState; -DECLARE_INSTANCE_CHECKER(MiscState, SLAVIO_MISC, - TYPE_SLAVIO_MISC) +OBJECT_DECLARE_SIMPLE_TYPE(MiscState, SLAVIO_MISC) struct MiscState { SysBusDevice parent_obj; diff --git a/hw/misc/tmp105.h b/hw/misc/tmp105.h index 7ee8a496ff..e5198fce80 100644 --- a/hw/misc/tmp105.h +++ b/hw/misc/tmp105.h @@ -19,9 +19,7 @@ #include "qom/object.h" #define TYPE_TMP105 "tmp105" -typedef struct TMP105State TMP105State; -DECLARE_INSTANCE_CHECKER(TMP105State, TMP105, - TYPE_TMP105) +OBJECT_DECLARE_SIMPLE_TYPE(TMP105State, TMP105) /** * TMP105State: diff --git a/hw/misc/tmp421.c b/hw/misc/tmp421.c index 212d6e0e83..ef3c682e32 100644 --- a/hw/misc/tmp421.c +++ b/hw/misc/tmp421.c @@ -65,17 +65,14 @@ struct TMP421State { uint8_t pointer; }; -typedef struct TMP421State TMP421State; struct TMP421Class { I2CSlaveClass parent_class; DeviceInfo *dev; }; -typedef struct TMP421Class TMP421Class; #define TYPE_TMP421 "tmp421-generic" -DECLARE_OBJ_CHECKERS(TMP421State, TMP421Class, - TMP421, TYPE_TMP421) +OBJECT_DECLARE_TYPE(TMP421State, TMP421Class, TMP421) /* the TMP421 registers */ diff --git a/hw/misc/zynq_slcr.c b/hw/misc/zynq_slcr.c index bedf09a6f5..a2b28019e3 100644 --- a/hw/misc/zynq_slcr.c +++ b/hw/misc/zynq_slcr.c @@ -183,9 +183,7 @@ REG32(DDRIOB, 0xb40) #define ZYNQ_SLCR_NUM_REGS (ZYNQ_SLCR_MMIO_SIZE / 4) #define TYPE_ZYNQ_SLCR "xilinx,zynq_slcr" -typedef struct ZynqSLCRState ZynqSLCRState; -DECLARE_INSTANCE_CHECKER(ZynqSLCRState, ZYNQ_SLCR, - TYPE_ZYNQ_SLCR) +OBJECT_DECLARE_SIMPLE_TYPE(ZynqSLCRState, ZYNQ_SLCR) struct ZynqSLCRState { SysBusDevice parent_obj; diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c index 56b96e9b0f..674b04b354 100644 --- a/hw/net/dp8393x.c +++ b/hw/net/dp8393x.c @@ -151,9 +151,7 @@ do { printf("sonic ERROR: %s: " fmt, __func__ , ## __VA_ARGS__); } while (0) #define SONIC_DESC_ADDR 0xFFFE #define TYPE_DP8393X "dp8393x" -typedef struct dp8393xState dp8393xState; -DECLARE_INSTANCE_CHECKER(dp8393xState, DP8393X, - TYPE_DP8393X) +OBJECT_DECLARE_SIMPLE_TYPE(dp8393xState, DP8393X) struct dp8393xState { SysBusDevice parent_obj; diff --git a/hw/net/e1000e.c b/hw/net/e1000e.c index 938d44f198..b6f1ae3c8f 100644 --- a/hw/net/e1000e.c +++ b/hw/net/e1000e.c @@ -56,9 +56,7 @@ #include "qom/object.h" #define TYPE_E1000E "e1000e" -typedef struct E1000EState E1000EState; -DECLARE_INSTANCE_CHECKER(E1000EState, E1000E, - TYPE_E1000E) +OBJECT_DECLARE_SIMPLE_TYPE(E1000EState, E1000E) struct E1000EState { PCIDevice parent_obj; diff --git a/hw/net/etraxfs_eth.c b/hw/net/etraxfs_eth.c index 36d898ad16..1b82aec794 100644 --- a/hw/net/etraxfs_eth.c +++ b/hw/net/etraxfs_eth.c @@ -324,9 +324,7 @@ static void mdio_cycle(struct qemu_mdio *bus) #define FS_ETH_MAX_REGS 0x17 #define TYPE_ETRAX_FS_ETH "etraxfs-eth" -typedef struct ETRAXFSEthState ETRAXFSEthState; -DECLARE_INSTANCE_CHECKER(ETRAXFSEthState, ETRAX_FS_ETH, - TYPE_ETRAX_FS_ETH) +OBJECT_DECLARE_SIMPLE_TYPE(ETRAXFSEthState, ETRAX_FS_ETH) struct ETRAXFSEthState { SysBusDevice parent_obj; diff --git a/hw/net/fsl_etsec/etsec.h b/hw/net/fsl_etsec/etsec.h index 0c929d9afd..fddf551544 100644 --- a/hw/net/fsl_etsec/etsec.h +++ b/hw/net/fsl_etsec/etsec.h @@ -150,8 +150,7 @@ struct eTSEC { typedef struct eTSEC eTSEC; #define TYPE_ETSEC_COMMON "eTSEC" -DECLARE_INSTANCE_CHECKER(eTSEC, ETSEC_COMMON, - TYPE_ETSEC_COMMON) +OBJECT_DECLARE_SIMPLE_TYPE(eTSEC, ETSEC_COMMON) #define eTSEC_TRANSMIT 1 #define eTSEC_RECEIVE 2 diff --git a/hw/net/lan9118.c b/hw/net/lan9118.c index 57a59accd0..ab57c02c8e 100644 --- a/hw/net/lan9118.c +++ b/hw/net/lan9118.c @@ -181,9 +181,7 @@ static const VMStateDescription vmstate_lan9118_packet = { } }; -typedef struct lan9118_state lan9118_state; -DECLARE_INSTANCE_CHECKER(lan9118_state, LAN9118, - TYPE_LAN9118) +OBJECT_DECLARE_SIMPLE_TYPE(lan9118_state, LAN9118) struct lan9118_state { SysBusDevice parent_obj; diff --git a/hw/net/milkymist-minimac2.c b/hw/net/milkymist-minimac2.c index 41a8543edf..78c20c94e5 100644 --- a/hw/net/milkymist-minimac2.c +++ b/hw/net/milkymist-minimac2.c @@ -99,9 +99,7 @@ struct MilkymistMinimac2MdioState { typedef struct MilkymistMinimac2MdioState MilkymistMinimac2MdioState; #define TYPE_MILKYMIST_MINIMAC2 "milkymist-minimac2" -typedef struct MilkymistMinimac2State MilkymistMinimac2State; -DECLARE_INSTANCE_CHECKER(MilkymistMinimac2State, MILKYMIST_MINIMAC2, - TYPE_MILKYMIST_MINIMAC2) +OBJECT_DECLARE_SIMPLE_TYPE(MilkymistMinimac2State, MILKYMIST_MINIMAC2) struct MilkymistMinimac2State { SysBusDevice parent_obj; diff --git a/hw/net/mipsnet.c b/hw/net/mipsnet.c index 61dbd575da..2ade72dea0 100644 --- a/hw/net/mipsnet.c +++ b/hw/net/mipsnet.c @@ -25,9 +25,7 @@ #define MAX_ETH_FRAME_SIZE 1514 #define TYPE_MIPS_NET "mipsnet" -typedef struct MIPSnetState MIPSnetState; -DECLARE_INSTANCE_CHECKER(MIPSnetState, MIPS_NET, - TYPE_MIPS_NET) +OBJECT_DECLARE_SIMPLE_TYPE(MIPSnetState, MIPS_NET) struct MIPSnetState { SysBusDevice parent_obj; diff --git a/hw/net/ne2000-isa.c b/hw/net/ne2000-isa.c index 688a0cc4f6..dd6f6e34d3 100644 --- a/hw/net/ne2000-isa.c +++ b/hw/net/ne2000-isa.c @@ -33,9 +33,7 @@ #include "qemu/module.h" #include "qom/object.h" -typedef struct ISANE2000State ISANE2000State; -DECLARE_INSTANCE_CHECKER(ISANE2000State, ISA_NE2000, - TYPE_ISA_NE2000) +OBJECT_DECLARE_SIMPLE_TYPE(ISANE2000State, ISA_NE2000) struct ISANE2000State { ISADevice parent_obj; diff --git a/hw/net/opencores_eth.c b/hw/net/opencores_eth.c index 5cd204c30c..0b3dc3146e 100644 --- a/hw/net/opencores_eth.c +++ b/hw/net/opencores_eth.c @@ -272,9 +272,7 @@ typedef struct desc { #define DEFAULT_PHY 1 #define TYPE_OPEN_ETH "open_eth" -typedef struct OpenEthState OpenEthState; -DECLARE_INSTANCE_CHECKER(OpenEthState, OPEN_ETH, - TYPE_OPEN_ETH) +OBJECT_DECLARE_SIMPLE_TYPE(OpenEthState, OPEN_ETH) struct OpenEthState { SysBusDevice parent_obj; diff --git a/hw/net/pcnet-pci.c b/hw/net/pcnet-pci.c index 449970bc52..ccc3fce2a0 100644 --- a/hw/net/pcnet-pci.c +++ b/hw/net/pcnet-pci.c @@ -52,9 +52,7 @@ #define TYPE_PCI_PCNET "pcnet" -typedef struct PCIPCNetState PCIPCNetState; -DECLARE_INSTANCE_CHECKER(PCIPCNetState, PCI_PCNET, - TYPE_PCI_PCNET) +OBJECT_DECLARE_SIMPLE_TYPE(PCIPCNetState, PCI_PCNET) struct PCIPCNetState { /*< private >*/ diff --git a/hw/net/rtl8139.c b/hw/net/rtl8139.c index 9246388f58..ba5ace1ab7 100644 --- a/hw/net/rtl8139.c +++ b/hw/net/rtl8139.c @@ -94,9 +94,7 @@ static inline GCC_FMT_ATTR(1, 2) int DPRINTF(const char *fmt, ...) #define TYPE_RTL8139 "rtl8139" -typedef struct RTL8139State RTL8139State; -DECLARE_INSTANCE_CHECKER(RTL8139State, RTL8139, - TYPE_RTL8139) +OBJECT_DECLARE_SIMPLE_TYPE(RTL8139State, RTL8139) /* Symbolic offsets to registers. */ enum RTL8139_registers { diff --git a/hw/net/smc91c111.c b/hw/net/smc91c111.c index 9fad904321..ad778cd8fc 100644 --- a/hw/net/smc91c111.c +++ b/hw/net/smc91c111.c @@ -25,9 +25,7 @@ #define NUM_PACKETS 4 #define TYPE_SMC91C111 "smc91c111" -typedef struct smc91c111_state smc91c111_state; -DECLARE_INSTANCE_CHECKER(smc91c111_state, SMC91C111, - TYPE_SMC91C111) +OBJECT_DECLARE_SIMPLE_TYPE(smc91c111_state, SMC91C111) struct smc91c111_state { SysBusDevice parent_obj; diff --git a/hw/net/spapr_llan.c b/hw/net/spapr_llan.c index d34cb29607..2093f1bad0 100644 --- a/hw/net/spapr_llan.c +++ b/hw/net/spapr_llan.c @@ -85,9 +85,7 @@ typedef uint64_t vlan_bd_t; #define VLAN_MAX_BUFS (VLAN_RX_BDS_LEN / 8) #define TYPE_VIO_SPAPR_VLAN_DEVICE "spapr-vlan" -typedef struct SpaprVioVlan SpaprVioVlan; -DECLARE_INSTANCE_CHECKER(SpaprVioVlan, VIO_SPAPR_VLAN_DEVICE, - TYPE_VIO_SPAPR_VLAN_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(SpaprVioVlan, VIO_SPAPR_VLAN_DEVICE) #define RX_POOL_MAX_BDS 4096 #define RX_MAX_POOLS 5 diff --git a/hw/net/stellaris_enet.c b/hw/net/stellaris_enet.c index 9f13afa4e4..8dd60783d8 100644 --- a/hw/net/stellaris_enet.c +++ b/hw/net/stellaris_enet.c @@ -51,9 +51,7 @@ do { fprintf(stderr, "stellaris_enet: error: " fmt , ## __VA_ARGS__);} while (0) #define SE_TCTL_DUPLEX 0x08 #define TYPE_STELLARIS_ENET "stellaris_enet" -typedef struct stellaris_enet_state stellaris_enet_state; -DECLARE_INSTANCE_CHECKER(stellaris_enet_state, STELLARIS_ENET, - TYPE_STELLARIS_ENET) +OBJECT_DECLARE_SIMPLE_TYPE(stellaris_enet_state, STELLARIS_ENET) typedef struct { uint8_t data[2048]; diff --git a/hw/net/sungem.c b/hw/net/sungem.c index 91753830a7..33c3722df6 100644 --- a/hw/net/sungem.c +++ b/hw/net/sungem.c @@ -23,9 +23,7 @@ #define TYPE_SUNGEM "sungem" -typedef struct SunGEMState SunGEMState; -DECLARE_INSTANCE_CHECKER(SunGEMState, SUNGEM, - TYPE_SUNGEM) +OBJECT_DECLARE_SIMPLE_TYPE(SunGEMState, SUNGEM) #define MAX_PACKET_SIZE 9016 diff --git a/hw/net/sunhme.c b/hw/net/sunhme.c index 7364ba1019..fc34905f87 100644 --- a/hw/net/sunhme.c +++ b/hw/net/sunhme.c @@ -130,9 +130,7 @@ #define MII_COMMAND_WRITE 0x1 #define TYPE_SUNHME "sunhme" -typedef struct SunHMEState SunHMEState; -DECLARE_INSTANCE_CHECKER(SunHMEState, SUNHME, - TYPE_SUNHME) +OBJECT_DECLARE_SIMPLE_TYPE(SunHMEState, SUNHME) /* Maximum size of buffer */ #define HME_FIFO_SIZE 0x800 diff --git a/hw/net/tulip.h b/hw/net/tulip.h index 87e3ab79bc..ffd1f88d57 100644 --- a/hw/net/tulip.h +++ b/hw/net/tulip.h @@ -6,9 +6,7 @@ #include "qom/object.h" #define TYPE_TULIP "tulip" -typedef struct TULIPState TULIPState; -DECLARE_INSTANCE_CHECKER(TULIPState, TULIP, - TYPE_TULIP) +OBJECT_DECLARE_SIMPLE_TYPE(TULIPState, TULIP) #define CSR(_x) ((_x) << 3) diff --git a/hw/net/xgmac.c b/hw/net/xgmac.c index a066550023..00859a7d50 100644 --- a/hw/net/xgmac.c +++ b/hw/net/xgmac.c @@ -140,9 +140,7 @@ typedef struct RxTxStats { } RxTxStats; #define TYPE_XGMAC "xgmac" -typedef struct XgmacState XgmacState; -DECLARE_INSTANCE_CHECKER(XgmacState, XGMAC, - TYPE_XGMAC) +OBJECT_DECLARE_SIMPLE_TYPE(XgmacState, XGMAC) struct XgmacState { SysBusDevice parent_obj; diff --git a/hw/net/xilinx_axienet.c b/hw/net/xilinx_axienet.c index 4e13786e50..f8cf5290e1 100644 --- a/hw/net/xilinx_axienet.c +++ b/hw/net/xilinx_axienet.c @@ -43,9 +43,7 @@ #define TYPE_XILINX_AXI_ENET_DATA_STREAM "xilinx-axienet-data-stream" #define TYPE_XILINX_AXI_ENET_CONTROL_STREAM "xilinx-axienet-control-stream" -typedef struct XilinxAXIEnet XilinxAXIEnet; -DECLARE_INSTANCE_CHECKER(XilinxAXIEnet, XILINX_AXI_ENET, - TYPE_XILINX_AXI_ENET) +OBJECT_DECLARE_SIMPLE_TYPE(XilinxAXIEnet, XILINX_AXI_ENET) typedef struct XilinxAXIEnetStreamSlave XilinxAXIEnetStreamSlave; DECLARE_INSTANCE_CHECKER(XilinxAXIEnetStreamSlave, XILINX_AXI_ENET_DATA_STREAM, diff --git a/hw/nvram/ds1225y.c b/hw/nvram/ds1225y.c index 44fb7a94d3..3660a47c51 100644 --- a/hw/nvram/ds1225y.c +++ b/hw/nvram/ds1225y.c @@ -110,9 +110,7 @@ static const VMStateDescription vmstate_nvram = { }; #define TYPE_DS1225Y "ds1225y" -typedef struct SysBusNvRamState SysBusNvRamState; -DECLARE_INSTANCE_CHECKER(SysBusNvRamState, DS1225Y, - TYPE_DS1225Y) +OBJECT_DECLARE_SIMPLE_TYPE(SysBusNvRamState, DS1225Y) struct SysBusNvRamState { SysBusDevice parent_obj; diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c index f3a4728288..0e95d057fd 100644 --- a/hw/nvram/fw_cfg.c +++ b/hw/nvram/fw_cfg.c @@ -1056,7 +1056,7 @@ bool fw_cfg_add_from_generator(FWCfgState *s, const char *filename, return false; } size = array->len; - fw_cfg_add_file(s, filename, g_byte_array_free(array, TRUE), size); + fw_cfg_add_file(s, filename, g_byte_array_free(array, FALSE), size); return true; } diff --git a/hw/nvram/spapr_nvram.c b/hw/nvram/spapr_nvram.c index 57ccc174f2..fc53a42572 100644 --- a/hw/nvram/spapr_nvram.c +++ b/hw/nvram/spapr_nvram.c @@ -48,11 +48,9 @@ struct SpaprNvram { BlockBackend *blk; VMChangeStateEntry *vmstate; }; -typedef struct SpaprNvram SpaprNvram; #define TYPE_VIO_SPAPR_NVRAM "spapr-nvram" -DECLARE_INSTANCE_CHECKER(SpaprNvram, VIO_SPAPR_NVRAM, - TYPE_VIO_SPAPR_NVRAM) +OBJECT_DECLARE_SIMPLE_TYPE(SpaprNvram, VIO_SPAPR_NVRAM) #define MIN_NVRAM_SIZE (8 * KiB) #define DEFAULT_NVRAM_SIZE (64 * KiB) diff --git a/hw/pci-bridge/dec.c b/hw/pci-bridge/dec.c index e88998d88c..4773d07e6d 100644 --- a/hw/pci-bridge/dec.c +++ b/hw/pci-bridge/dec.c @@ -34,9 +34,7 @@ #include "hw/pci/pci_bus.h" #include "qom/object.h" -typedef struct DECState DECState; -DECLARE_INSTANCE_CHECKER(DECState, DEC_21154, - TYPE_DEC_21154) +OBJECT_DECLARE_SIMPLE_TYPE(DECState, DEC_21154) struct DECState { PCIHostState parent_obj; diff --git a/hw/pci-bridge/gen_pcie_root_port.c b/hw/pci-bridge/gen_pcie_root_port.c index 67c71d566b..8931afc049 100644 --- a/hw/pci-bridge/gen_pcie_root_port.c +++ b/hw/pci-bridge/gen_pcie_root_port.c @@ -20,9 +20,7 @@ #include "qom/object.h" #define TYPE_GEN_PCIE_ROOT_PORT "pcie-root-port" -typedef struct GenPCIERootPort GenPCIERootPort; -DECLARE_INSTANCE_CHECKER(GenPCIERootPort, GEN_PCIE_ROOT_PORT, - TYPE_GEN_PCIE_ROOT_PORT) +OBJECT_DECLARE_SIMPLE_TYPE(GenPCIERootPort, GEN_PCIE_ROOT_PORT) #define GEN_PCIE_ROOT_PORT_AER_OFFSET 0x100 #define GEN_PCIE_ROOT_PORT_ACS_OFFSET \ diff --git a/hw/pci-bridge/pci_bridge_dev.c b/hw/pci-bridge/pci_bridge_dev.c index b86d76caf3..657a06ddbe 100644 --- a/hw/pci-bridge/pci_bridge_dev.c +++ b/hw/pci-bridge/pci_bridge_dev.c @@ -35,9 +35,7 @@ #define TYPE_PCI_BRIDGE_DEV "pci-bridge" #define TYPE_PCI_BRIDGE_SEAT_DEV "pci-bridge-seat" -typedef struct PCIBridgeDev PCIBridgeDev; -DECLARE_INSTANCE_CHECKER(PCIBridgeDev, PCI_BRIDGE_DEV, - TYPE_PCI_BRIDGE_DEV) +OBJECT_DECLARE_SIMPLE_TYPE(PCIBridgeDev, PCI_BRIDGE_DEV) struct PCIBridgeDev { /*< private >*/ diff --git a/hw/pci-bridge/pcie_pci_bridge.c b/hw/pci-bridge/pcie_pci_bridge.c index abc98f8cd9..1cd917a459 100644 --- a/hw/pci-bridge/pcie_pci_bridge.c +++ b/hw/pci-bridge/pcie_pci_bridge.c @@ -27,11 +27,9 @@ struct PCIEPCIBridge { MemoryRegion shpc_bar; /*< public >*/ }; -typedef struct PCIEPCIBridge PCIEPCIBridge; #define TYPE_PCIE_PCI_BRIDGE_DEV "pcie-pci-bridge" -DECLARE_INSTANCE_CHECKER(PCIEPCIBridge, PCIE_PCI_BRIDGE_DEV, - TYPE_PCIE_PCI_BRIDGE_DEV) +OBJECT_DECLARE_SIMPLE_TYPE(PCIEPCIBridge, PCIE_PCI_BRIDGE_DEV) static void pcie_pci_bridge_realize(PCIDevice *d, Error **errp) { diff --git a/hw/pci-host/bonito.c b/hw/pci-host/bonito.c index d10fbd39d3..a99eced065 100644 --- a/hw/pci-host/bonito.c +++ b/hw/pci-host/bonito.c @@ -240,12 +240,10 @@ struct BonitoState { }; #define TYPE_BONITO_PCI_HOST_BRIDGE "Bonito-pcihost" -DECLARE_INSTANCE_CHECKER(BonitoState, BONITO_PCI_HOST_BRIDGE, - TYPE_BONITO_PCI_HOST_BRIDGE) +OBJECT_DECLARE_SIMPLE_TYPE(BonitoState, BONITO_PCI_HOST_BRIDGE) #define TYPE_PCI_BONITO "Bonito" -DECLARE_INSTANCE_CHECKER(PCIBonitoState, PCI_BONITO, - TYPE_PCI_BONITO) +OBJECT_DECLARE_SIMPLE_TYPE(PCIBonitoState, PCI_BONITO) static void bonito_writel(void *opaque, hwaddr addr, uint64_t val, unsigned size) diff --git a/hw/pci-host/grackle.c b/hw/pci-host/grackle.c index fd7d6dcc06..57c29b20af 100644 --- a/hw/pci-host/grackle.c +++ b/hw/pci-host/grackle.c @@ -35,9 +35,7 @@ #include "trace.h" #include "qom/object.h" -typedef struct GrackleState GrackleState; -DECLARE_INSTANCE_CHECKER(GrackleState, GRACKLE_PCI_HOST_BRIDGE, - TYPE_GRACKLE_PCI_HOST_BRIDGE) +OBJECT_DECLARE_SIMPLE_TYPE(GrackleState, GRACKLE_PCI_HOST_BRIDGE) struct GrackleState { PCIHostState parent_obj; diff --git a/hw/pci-host/i440fx.c b/hw/pci-host/i440fx.c index 93c62235ca..aecbcc2446 100644 --- a/hw/pci-host/i440fx.c +++ b/hw/pci-host/i440fx.c @@ -42,9 +42,7 @@ * https://wiki.qemu.org/File:29054901.pdf */ -typedef struct I440FXState I440FXState; -DECLARE_INSTANCE_CHECKER(I440FXState, I440FX_PCI_HOST_BRIDGE, - TYPE_I440FX_PCI_HOST_BRIDGE) +OBJECT_DECLARE_SIMPLE_TYPE(I440FXState, I440FX_PCI_HOST_BRIDGE) struct I440FXState { PCIHostState parent_obj; diff --git a/hw/pci-host/ppce500.c b/hw/pci-host/ppce500.c index f376374e24..9517aab913 100644 --- a/hw/pci-host/ppce500.c +++ b/hw/pci-host/ppce500.c @@ -92,9 +92,7 @@ struct pci_inbound { #define TYPE_PPC_E500_PCI_HOST_BRIDGE "e500-pcihost" -typedef struct PPCE500PCIState PPCE500PCIState; -DECLARE_INSTANCE_CHECKER(PPCE500PCIState, PPC_E500_PCI_HOST_BRIDGE, - TYPE_PPC_E500_PCI_HOST_BRIDGE) +OBJECT_DECLARE_SIMPLE_TYPE(PPCE500PCIState, PPC_E500_PCI_HOST_BRIDGE) struct PPCE500PCIState { PCIHostState parent_obj; @@ -116,9 +114,7 @@ struct PPCE500PCIState { }; #define TYPE_PPC_E500_PCI_BRIDGE "e500-host-bridge" -typedef struct PPCE500PCIBridgeState PPCE500PCIBridgeState; -DECLARE_INSTANCE_CHECKER(PPCE500PCIBridgeState, PPC_E500_PCI_BRIDGE, - TYPE_PPC_E500_PCI_BRIDGE) +OBJECT_DECLARE_SIMPLE_TYPE(PPCE500PCIBridgeState, PPC_E500_PCI_BRIDGE) struct PPCE500PCIBridgeState { /*< private >*/ diff --git a/hw/pci-host/prep.c b/hw/pci-host/prep.c index b234fd7c8a..d0323fefb1 100644 --- a/hw/pci-host/prep.c +++ b/hw/pci-host/prep.c @@ -43,9 +43,7 @@ #define TYPE_RAVEN_PCI_DEVICE "raven" #define TYPE_RAVEN_PCI_HOST_BRIDGE "raven-pcihost" -typedef struct RavenPCIState RavenPCIState; -DECLARE_INSTANCE_CHECKER(RavenPCIState, RAVEN_PCI_DEVICE, - TYPE_RAVEN_PCI_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(RavenPCIState, RAVEN_PCI_DEVICE) struct RavenPCIState { PCIDevice dev; diff --git a/hw/ppc/e500-ccsr.h b/hw/ppc/e500-ccsr.h index de4b9d2bc3..249c17be3b 100644 --- a/hw/ppc/e500-ccsr.h +++ b/hw/ppc/e500-ccsr.h @@ -11,10 +11,8 @@ struct PPCE500CCSRState { MemoryRegion ccsr_space; }; -typedef struct PPCE500CCSRState PPCE500CCSRState; #define TYPE_CCSR "e500-ccsr" -DECLARE_INSTANCE_CHECKER(PPCE500CCSRState, CCSR, - TYPE_CCSR) +OBJECT_DECLARE_SIMPLE_TYPE(PPCE500CCSRState, CCSR) #endif /* E500_CCSR_H */ diff --git a/hw/ppc/e500.h b/hw/ppc/e500.h index 63870751ff..1e5853b032 100644 --- a/hw/ppc/e500.h +++ b/hw/ppc/e500.h @@ -14,7 +14,6 @@ struct PPCE500MachineState { */ PlatformBusDevice *pbus_dev; }; -typedef struct PPCE500MachineState PPCE500MachineState; struct PPCE500MachineClass { /*< private >*/ @@ -39,14 +38,12 @@ struct PPCE500MachineClass { hwaddr pci_mmio_bus_base; hwaddr spin_base; }; -typedef struct PPCE500MachineClass PPCE500MachineClass; void ppce500_init(MachineState *machine); hwaddr booke206_page_size_to_tlb(uint64_t size); #define TYPE_PPCE500_MACHINE "ppce500-base-machine" -DECLARE_OBJ_CHECKERS(PPCE500MachineState, PPCE500MachineClass, - PPCE500_MACHINE, TYPE_PPCE500_MACHINE) +OBJECT_DECLARE_TYPE(PPCE500MachineState, PPCE500MachineClass, PPCE500_MACHINE) #endif diff --git a/hw/ppc/mac.h b/hw/ppc/mac.h index 2b6425f600..f3976b9a45 100644 --- a/hw/ppc/mac.h +++ b/hw/ppc/mac.h @@ -92,9 +92,7 @@ struct Core99MachineState { /* Mac NVRAM */ #define TYPE_MACIO_NVRAM "macio-nvram" -typedef struct MacIONVRAMState MacIONVRAMState; -DECLARE_INSTANCE_CHECKER(MacIONVRAMState, MACIO_NVRAM, - TYPE_MACIO_NVRAM) +OBJECT_DECLARE_SIMPLE_TYPE(MacIONVRAMState, MACIO_NVRAM) struct MacIONVRAMState { /*< private >*/ diff --git a/hw/ppc/mpc8544_guts.c b/hw/ppc/mpc8544_guts.c index b76b5e4701..e8d2d51c20 100644 --- a/hw/ppc/mpc8544_guts.c +++ b/hw/ppc/mpc8544_guts.c @@ -55,9 +55,7 @@ #define MPC8544_GUTS_ADDR_SRDS2CR3 0xF18 #define TYPE_MPC8544_GUTS "mpc8544-guts" -typedef struct GutsState GutsState; -DECLARE_INSTANCE_CHECKER(GutsState, MPC8544_GUTS, - TYPE_MPC8544_GUTS) +OBJECT_DECLARE_SIMPLE_TYPE(GutsState, MPC8544_GUTS) struct GutsState { /*< private >*/ diff --git a/hw/ppc/ppc440_pcix.c b/hw/ppc/ppc440_pcix.c index a564fcd600..ee952314c8 100644 --- a/hw/ppc/ppc440_pcix.c +++ b/hw/ppc/ppc440_pcix.c @@ -46,9 +46,7 @@ struct PLBInMap { }; #define TYPE_PPC440_PCIX_HOST_BRIDGE "ppc440-pcix-host" -typedef struct PPC440PCIXState PPC440PCIXState; -DECLARE_INSTANCE_CHECKER(PPC440PCIXState, PPC440_PCIX_HOST_BRIDGE, - TYPE_PPC440_PCIX_HOST_BRIDGE) +OBJECT_DECLARE_SIMPLE_TYPE(PPC440PCIXState, PPC440_PCIX_HOST_BRIDGE) #define PPC440_PCIX_NR_POMS 3 #define PPC440_PCIX_NR_PIMS 3 diff --git a/hw/ppc/ppc440_uc.c b/hw/ppc/ppc440_uc.c index d9ca6bba9b..f6f89058ab 100644 --- a/hw/ppc/ppc440_uc.c +++ b/hw/ppc/ppc440_uc.c @@ -1033,9 +1033,7 @@ void ppc4xx_dma_init(CPUPPCState *env, int dcr_base) #include "hw/pci/pcie_host.h" #define TYPE_PPC460EX_PCIE_HOST "ppc460ex-pcie-host" -typedef struct PPC460EXPCIEState PPC460EXPCIEState; -DECLARE_INSTANCE_CHECKER(PPC460EXPCIEState, PPC460EX_PCIE_HOST, - TYPE_PPC460EX_PCIE_HOST) +OBJECT_DECLARE_SIMPLE_TYPE(PPC460EXPCIEState, PPC460EX_PCIE_HOST) struct PPC460EXPCIEState { PCIExpressHost host; diff --git a/hw/ppc/ppc4xx_pci.c b/hw/ppc/ppc4xx_pci.c index ca2553bf8b..28724c06f8 100644 --- a/hw/ppc/ppc4xx_pci.c +++ b/hw/ppc/ppc4xx_pci.c @@ -44,9 +44,7 @@ struct PCITargetMap { uint32_t la; }; -typedef struct PPC4xxPCIState PPC4xxPCIState; -DECLARE_INSTANCE_CHECKER(PPC4xxPCIState, PPC4xx_PCI_HOST_BRIDGE, - TYPE_PPC4xx_PCI_HOST_BRIDGE) +OBJECT_DECLARE_SIMPLE_TYPE(PPC4xxPCIState, PPC4xx_PCI_HOST_BRIDGE) #define PPC4xx_PCI_NR_PMMS 3 #define PPC4xx_PCI_NR_PTMS 2 diff --git a/hw/ppc/ppce500_spin.c b/hw/ppc/ppce500_spin.c index cd8000ad73..25c9ce745f 100644 --- a/hw/ppc/ppce500_spin.c +++ b/hw/ppc/ppce500_spin.c @@ -47,9 +47,7 @@ typedef struct spin_info { } QEMU_PACKED SpinInfo; #define TYPE_E500_SPIN "e500-spin" -typedef struct SpinState SpinState; -DECLARE_INSTANCE_CHECKER(SpinState, E500_SPIN, - TYPE_E500_SPIN) +OBJECT_DECLARE_SIMPLE_TYPE(SpinState, E500_SPIN) struct SpinState { SysBusDevice parent_obj; diff --git a/hw/ppc/prep_systemio.c b/hw/ppc/prep_systemio.c index d1e2fb3f8b..4e48ef245c 100644 --- a/hw/ppc/prep_systemio.c +++ b/hw/ppc/prep_systemio.c @@ -36,9 +36,7 @@ #include "trace.h" #define TYPE_PREP_SYSTEMIO "prep-systemio" -typedef struct PrepSystemIoState PrepSystemIoState; -DECLARE_INSTANCE_CHECKER(PrepSystemIoState, PREP_SYSTEMIO, - TYPE_PREP_SYSTEMIO) +OBJECT_DECLARE_SIMPLE_TYPE(PrepSystemIoState, PREP_SYSTEMIO) /* Bit as defined in PowerPC Reference Plaform v1.1, sect. 6.1.5, p. 132 */ #define PREP_BIT(n) (1 << (7 - (n))) diff --git a/hw/ppc/rs6000_mc.c b/hw/ppc/rs6000_mc.c index 8611ffa96d..4db5b51a2d 100644 --- a/hw/ppc/rs6000_mc.c +++ b/hw/ppc/rs6000_mc.c @@ -29,9 +29,7 @@ #include "qom/object.h" #define TYPE_RS6000MC "rs6000-mc" -typedef struct RS6000MCState RS6000MCState; -DECLARE_INSTANCE_CHECKER(RS6000MCState, RS6000MC, - TYPE_RS6000MC) +OBJECT_DECLARE_SIMPLE_TYPE(RS6000MCState, RS6000MC) struct RS6000MCState { ISADevice parent_obj; diff --git a/hw/ppc/spapr_rng.c b/hw/ppc/spapr_rng.c index 6c99633faa..d14800e9de 100644 --- a/hw/ppc/spapr_rng.c +++ b/hw/ppc/spapr_rng.c @@ -30,9 +30,7 @@ #include "kvm_ppc.h" #include "qom/object.h" -typedef struct SpaprRngState SpaprRngState; -DECLARE_INSTANCE_CHECKER(SpaprRngState, SPAPR_RNG, - TYPE_SPAPR_RNG) +OBJECT_DECLARE_SIMPLE_TYPE(SpaprRngState, SPAPR_RNG) struct SpaprRngState { /*< private >*/ diff --git a/hw/riscv/sifive_e.c b/hw/riscv/sifive_e.c index 40bbf530d4..759059cd7b 100644 --- a/hw/riscv/sifive_e.c +++ b/hw/riscv/sifive_e.c @@ -54,25 +54,25 @@ static const struct MemmapEntry { hwaddr base; hwaddr size; } sifive_e_memmap[] = { - [SIFIVE_E_DEBUG] = { 0x0, 0x1000 }, - [SIFIVE_E_MROM] = { 0x1000, 0x2000 }, - [SIFIVE_E_OTP] = { 0x20000, 0x2000 }, - [SIFIVE_E_CLINT] = { 0x2000000, 0x10000 }, - [SIFIVE_E_PLIC] = { 0xc000000, 0x4000000 }, - [SIFIVE_E_AON] = { 0x10000000, 0x8000 }, - [SIFIVE_E_PRCI] = { 0x10008000, 0x8000 }, - [SIFIVE_E_OTP_CTRL] = { 0x10010000, 0x1000 }, - [SIFIVE_E_GPIO0] = { 0x10012000, 0x1000 }, - [SIFIVE_E_UART0] = { 0x10013000, 0x1000 }, - [SIFIVE_E_QSPI0] = { 0x10014000, 0x1000 }, - [SIFIVE_E_PWM0] = { 0x10015000, 0x1000 }, - [SIFIVE_E_UART1] = { 0x10023000, 0x1000 }, - [SIFIVE_E_QSPI1] = { 0x10024000, 0x1000 }, - [SIFIVE_E_PWM1] = { 0x10025000, 0x1000 }, - [SIFIVE_E_QSPI2] = { 0x10034000, 0x1000 }, - [SIFIVE_E_PWM2] = { 0x10035000, 0x1000 }, - [SIFIVE_E_XIP] = { 0x20000000, 0x20000000 }, - [SIFIVE_E_DTIM] = { 0x80000000, 0x4000 } + [SIFIVE_E_DEV_DEBUG] = { 0x0, 0x1000 }, + [SIFIVE_E_DEV_MROM] = { 0x1000, 0x2000 }, + [SIFIVE_E_DEV_OTP] = { 0x20000, 0x2000 }, + [SIFIVE_E_DEV_CLINT] = { 0x2000000, 0x10000 }, + [SIFIVE_E_DEV_PLIC] = { 0xc000000, 0x4000000 }, + [SIFIVE_E_DEV_AON] = { 0x10000000, 0x8000 }, + [SIFIVE_E_DEV_PRCI] = { 0x10008000, 0x8000 }, + [SIFIVE_E_DEV_OTP_CTRL] = { 0x10010000, 0x1000 }, + [SIFIVE_E_DEV_GPIO0] = { 0x10012000, 0x1000 }, + [SIFIVE_E_DEV_UART0] = { 0x10013000, 0x1000 }, + [SIFIVE_E_DEV_QSPI0] = { 0x10014000, 0x1000 }, + [SIFIVE_E_DEV_PWM0] = { 0x10015000, 0x1000 }, + [SIFIVE_E_DEV_UART1] = { 0x10023000, 0x1000 }, + [SIFIVE_E_DEV_QSPI1] = { 0x10024000, 0x1000 }, + [SIFIVE_E_DEV_PWM1] = { 0x10025000, 0x1000 }, + [SIFIVE_E_DEV_QSPI2] = { 0x10034000, 0x1000 }, + [SIFIVE_E_DEV_PWM2] = { 0x10035000, 0x1000 }, + [SIFIVE_E_DEV_XIP] = { 0x20000000, 0x20000000 }, + [SIFIVE_E_DEV_DTIM] = { 0x80000000, 0x4000 } }; static void sifive_e_machine_init(MachineState *machine) @@ -90,9 +90,9 @@ static void sifive_e_machine_init(MachineState *machine) /* Data Tightly Integrated Memory */ memory_region_init_ram(main_mem, NULL, "riscv.sifive.e.ram", - memmap[SIFIVE_E_DTIM].size, &error_fatal); + memmap[SIFIVE_E_DEV_DTIM].size, &error_fatal); memory_region_add_subregion(sys_mem, - memmap[SIFIVE_E_DTIM].base, main_mem); + memmap[SIFIVE_E_DEV_DTIM].base, main_mem); /* Mask ROM reset vector */ uint32_t reset_vec[4]; @@ -111,7 +111,7 @@ static void sifive_e_machine_init(MachineState *machine) reset_vec[i] = cpu_to_le32(reset_vec[i]); } rom_add_blob_fixed_as("mrom.reset", reset_vec, sizeof(reset_vec), - memmap[SIFIVE_E_MROM].base, &address_space_memory); + memmap[SIFIVE_E_DEV_MROM].base, &address_space_memory); if (machine->kernel_filename) { riscv_load_kernel(machine->kernel_filename, NULL); @@ -195,12 +195,12 @@ static void sifive_e_soc_realize(DeviceState *dev, Error **errp) /* Mask ROM */ memory_region_init_rom(&s->mask_rom, OBJECT(dev), "riscv.sifive.e.mrom", - memmap[SIFIVE_E_MROM].size, &error_fatal); + memmap[SIFIVE_E_DEV_MROM].size, &error_fatal); memory_region_add_subregion(sys_mem, - memmap[SIFIVE_E_MROM].base, &s->mask_rom); + memmap[SIFIVE_E_DEV_MROM].base, &s->mask_rom); /* MMIO */ - s->plic = sifive_plic_create(memmap[SIFIVE_E_PLIC].base, + s->plic = sifive_plic_create(memmap[SIFIVE_E_DEV_PLIC].base, (char *)SIFIVE_E_PLIC_HART_CONFIG, 0, SIFIVE_E_PLIC_NUM_SOURCES, SIFIVE_E_PLIC_NUM_PRIORITIES, @@ -210,14 +210,14 @@ static void sifive_e_soc_realize(DeviceState *dev, Error **errp) SIFIVE_E_PLIC_ENABLE_STRIDE, SIFIVE_E_PLIC_CONTEXT_BASE, SIFIVE_E_PLIC_CONTEXT_STRIDE, - memmap[SIFIVE_E_PLIC].size); - sifive_clint_create(memmap[SIFIVE_E_CLINT].base, - memmap[SIFIVE_E_CLINT].size, 0, ms->smp.cpus, + memmap[SIFIVE_E_DEV_PLIC].size); + sifive_clint_create(memmap[SIFIVE_E_DEV_CLINT].base, + memmap[SIFIVE_E_DEV_CLINT].size, 0, ms->smp.cpus, SIFIVE_SIP_BASE, SIFIVE_TIMECMP_BASE, SIFIVE_TIME_BASE, SIFIVE_CLINT_TIMEBASE_FREQ, false); create_unimplemented_device("riscv.sifive.e.aon", - memmap[SIFIVE_E_AON].base, memmap[SIFIVE_E_AON].size); - sifive_e_prci_create(memmap[SIFIVE_E_PRCI].base); + memmap[SIFIVE_E_DEV_AON].base, memmap[SIFIVE_E_DEV_AON].size); + sifive_e_prci_create(memmap[SIFIVE_E_DEV_PRCI].base); /* GPIO */ @@ -226,7 +226,7 @@ static void sifive_e_soc_realize(DeviceState *dev, Error **errp) } /* Map GPIO registers */ - sysbus_mmio_map(SYS_BUS_DEVICE(&s->gpio), 0, memmap[SIFIVE_E_GPIO0].base); + sysbus_mmio_map(SYS_BUS_DEVICE(&s->gpio), 0, memmap[SIFIVE_E_DEV_GPIO0].base); /* Pass all GPIOs to the SOC layer so they are available to the board */ qdev_pass_gpios(DEVICE(&s->gpio), dev, NULL); @@ -238,27 +238,27 @@ static void sifive_e_soc_realize(DeviceState *dev, Error **errp) SIFIVE_E_GPIO0_IRQ0 + i)); } - sifive_uart_create(sys_mem, memmap[SIFIVE_E_UART0].base, + sifive_uart_create(sys_mem, memmap[SIFIVE_E_DEV_UART0].base, serial_hd(0), qdev_get_gpio_in(DEVICE(s->plic), SIFIVE_E_UART0_IRQ)); create_unimplemented_device("riscv.sifive.e.qspi0", - memmap[SIFIVE_E_QSPI0].base, memmap[SIFIVE_E_QSPI0].size); + memmap[SIFIVE_E_DEV_QSPI0].base, memmap[SIFIVE_E_DEV_QSPI0].size); create_unimplemented_device("riscv.sifive.e.pwm0", - memmap[SIFIVE_E_PWM0].base, memmap[SIFIVE_E_PWM0].size); - sifive_uart_create(sys_mem, memmap[SIFIVE_E_UART1].base, + memmap[SIFIVE_E_DEV_PWM0].base, memmap[SIFIVE_E_DEV_PWM0].size); + sifive_uart_create(sys_mem, memmap[SIFIVE_E_DEV_UART1].base, serial_hd(1), qdev_get_gpio_in(DEVICE(s->plic), SIFIVE_E_UART1_IRQ)); create_unimplemented_device("riscv.sifive.e.qspi1", - memmap[SIFIVE_E_QSPI1].base, memmap[SIFIVE_E_QSPI1].size); + memmap[SIFIVE_E_DEV_QSPI1].base, memmap[SIFIVE_E_DEV_QSPI1].size); create_unimplemented_device("riscv.sifive.e.pwm1", - memmap[SIFIVE_E_PWM1].base, memmap[SIFIVE_E_PWM1].size); + memmap[SIFIVE_E_DEV_PWM1].base, memmap[SIFIVE_E_DEV_PWM1].size); create_unimplemented_device("riscv.sifive.e.qspi2", - memmap[SIFIVE_E_QSPI2].base, memmap[SIFIVE_E_QSPI2].size); + memmap[SIFIVE_E_DEV_QSPI2].base, memmap[SIFIVE_E_DEV_QSPI2].size); create_unimplemented_device("riscv.sifive.e.pwm2", - memmap[SIFIVE_E_PWM2].base, memmap[SIFIVE_E_PWM2].size); + memmap[SIFIVE_E_DEV_PWM2].base, memmap[SIFIVE_E_DEV_PWM2].size); /* Flash memory */ memory_region_init_rom(&s->xip_mem, OBJECT(dev), "riscv.sifive.e.xip", - memmap[SIFIVE_E_XIP].size, &error_fatal); - memory_region_add_subregion(sys_mem, memmap[SIFIVE_E_XIP].base, + memmap[SIFIVE_E_DEV_XIP].size, &error_fatal); + memory_region_add_subregion(sys_mem, memmap[SIFIVE_E_DEV_XIP].base, &s->xip_mem); } diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c index 4f12a93188..a97637fb33 100644 --- a/hw/riscv/sifive_u.c +++ b/hw/riscv/sifive_u.c @@ -70,23 +70,23 @@ static const struct MemmapEntry { hwaddr base; hwaddr size; } sifive_u_memmap[] = { - [SIFIVE_U_DEBUG] = { 0x0, 0x100 }, - [SIFIVE_U_MROM] = { 0x1000, 0xf000 }, - [SIFIVE_U_CLINT] = { 0x2000000, 0x10000 }, - [SIFIVE_U_L2CC] = { 0x2010000, 0x1000 }, - [SIFIVE_U_PDMA] = { 0x3000000, 0x100000 }, - [SIFIVE_U_L2LIM] = { 0x8000000, 0x2000000 }, - [SIFIVE_U_PLIC] = { 0xc000000, 0x4000000 }, - [SIFIVE_U_PRCI] = { 0x10000000, 0x1000 }, - [SIFIVE_U_UART0] = { 0x10010000, 0x1000 }, - [SIFIVE_U_UART1] = { 0x10011000, 0x1000 }, - [SIFIVE_U_GPIO] = { 0x10060000, 0x1000 }, - [SIFIVE_U_OTP] = { 0x10070000, 0x1000 }, - [SIFIVE_U_GEM] = { 0x10090000, 0x2000 }, - [SIFIVE_U_GEM_MGMT] = { 0x100a0000, 0x1000 }, - [SIFIVE_U_DMC] = { 0x100b0000, 0x10000 }, - [SIFIVE_U_FLASH0] = { 0x20000000, 0x10000000 }, - [SIFIVE_U_DRAM] = { 0x80000000, 0x0 }, + [SIFIVE_U_DEV_DEBUG] = { 0x0, 0x100 }, + [SIFIVE_U_DEV_MROM] = { 0x1000, 0xf000 }, + [SIFIVE_U_DEV_CLINT] = { 0x2000000, 0x10000 }, + [SIFIVE_U_DEV_L2CC] = { 0x2010000, 0x1000 }, + [SIFIVE_U_DEV_PDMA] = { 0x3000000, 0x100000 }, + [SIFIVE_U_DEV_L2LIM] = { 0x8000000, 0x2000000 }, + [SIFIVE_U_DEV_PLIC] = { 0xc000000, 0x4000000 }, + [SIFIVE_U_DEV_PRCI] = { 0x10000000, 0x1000 }, + [SIFIVE_U_DEV_UART0] = { 0x10010000, 0x1000 }, + [SIFIVE_U_DEV_UART1] = { 0x10011000, 0x1000 }, + [SIFIVE_U_DEV_GPIO] = { 0x10060000, 0x1000 }, + [SIFIVE_U_DEV_OTP] = { 0x10070000, 0x1000 }, + [SIFIVE_U_DEV_GEM] = { 0x10090000, 0x2000 }, + [SIFIVE_U_DEV_GEM_MGMT] = { 0x100a0000, 0x1000 }, + [SIFIVE_U_DEV_DMC] = { 0x100b0000, 0x10000 }, + [SIFIVE_U_DEV_FLASH0] = { 0x20000000, 0x10000000 }, + [SIFIVE_U_DEV_DRAM] = { 0x80000000, 0x0 }, }; #define OTP_SERIAL 1 @@ -145,10 +145,10 @@ static void create_fdt(SiFiveUState *s, const struct MemmapEntry *memmap, g_free(nodename); nodename = g_strdup_printf("/memory@%lx", - (long)memmap[SIFIVE_U_DRAM].base); + (long)memmap[SIFIVE_U_DEV_DRAM].base); qemu_fdt_add_subnode(fdt, nodename); qemu_fdt_setprop_cells(fdt, nodename, "reg", - memmap[SIFIVE_U_DRAM].base >> 32, memmap[SIFIVE_U_DRAM].base, + memmap[SIFIVE_U_DEV_DRAM].base >> 32, memmap[SIFIVE_U_DEV_DRAM].base, mem_size >> 32, mem_size); qemu_fdt_setprop_string(fdt, nodename, "device_type", "memory"); g_free(nodename); @@ -203,39 +203,39 @@ static void create_fdt(SiFiveUState *s, const struct MemmapEntry *memmap, g_free(nodename); } nodename = g_strdup_printf("/soc/clint@%lx", - (long)memmap[SIFIVE_U_CLINT].base); + (long)memmap[SIFIVE_U_DEV_CLINT].base); qemu_fdt_add_subnode(fdt, nodename); qemu_fdt_setprop_string(fdt, nodename, "compatible", "riscv,clint0"); qemu_fdt_setprop_cells(fdt, nodename, "reg", - 0x0, memmap[SIFIVE_U_CLINT].base, - 0x0, memmap[SIFIVE_U_CLINT].size); + 0x0, memmap[SIFIVE_U_DEV_CLINT].base, + 0x0, memmap[SIFIVE_U_DEV_CLINT].size); qemu_fdt_setprop(fdt, nodename, "interrupts-extended", cells, ms->smp.cpus * sizeof(uint32_t) * 4); g_free(cells); g_free(nodename); nodename = g_strdup_printf("/soc/otp@%lx", - (long)memmap[SIFIVE_U_OTP].base); + (long)memmap[SIFIVE_U_DEV_OTP].base); qemu_fdt_add_subnode(fdt, nodename); qemu_fdt_setprop_cell(fdt, nodename, "fuse-count", SIFIVE_U_OTP_REG_SIZE); qemu_fdt_setprop_cells(fdt, nodename, "reg", - 0x0, memmap[SIFIVE_U_OTP].base, - 0x0, memmap[SIFIVE_U_OTP].size); + 0x0, memmap[SIFIVE_U_DEV_OTP].base, + 0x0, memmap[SIFIVE_U_DEV_OTP].size); qemu_fdt_setprop_string(fdt, nodename, "compatible", "sifive,fu540-c000-otp"); g_free(nodename); prci_phandle = phandle++; nodename = g_strdup_printf("/soc/clock-controller@%lx", - (long)memmap[SIFIVE_U_PRCI].base); + (long)memmap[SIFIVE_U_DEV_PRCI].base); qemu_fdt_add_subnode(fdt, nodename); qemu_fdt_setprop_cell(fdt, nodename, "phandle", prci_phandle); qemu_fdt_setprop_cell(fdt, nodename, "#clock-cells", 0x1); qemu_fdt_setprop_cells(fdt, nodename, "clocks", hfclk_phandle, rtcclk_phandle); qemu_fdt_setprop_cells(fdt, nodename, "reg", - 0x0, memmap[SIFIVE_U_PRCI].base, - 0x0, memmap[SIFIVE_U_PRCI].size); + 0x0, memmap[SIFIVE_U_DEV_PRCI].base, + 0x0, memmap[SIFIVE_U_DEV_PRCI].size); qemu_fdt_setprop_string(fdt, nodename, "compatible", "sifive,fu540-c000-prci"); g_free(nodename); @@ -259,7 +259,7 @@ static void create_fdt(SiFiveUState *s, const struct MemmapEntry *memmap, g_free(nodename); } nodename = g_strdup_printf("/soc/interrupt-controller@%lx", - (long)memmap[SIFIVE_U_PLIC].base); + (long)memmap[SIFIVE_U_DEV_PLIC].base); qemu_fdt_add_subnode(fdt, nodename); qemu_fdt_setprop_cell(fdt, nodename, "#interrupt-cells", 1); qemu_fdt_setprop_string(fdt, nodename, "compatible", "riscv,plic0"); @@ -267,8 +267,8 @@ static void create_fdt(SiFiveUState *s, const struct MemmapEntry *memmap, qemu_fdt_setprop(fdt, nodename, "interrupts-extended", cells, (ms->smp.cpus * 4 - 2) * sizeof(uint32_t)); qemu_fdt_setprop_cells(fdt, nodename, "reg", - 0x0, memmap[SIFIVE_U_PLIC].base, - 0x0, memmap[SIFIVE_U_PLIC].size); + 0x0, memmap[SIFIVE_U_DEV_PLIC].base, + 0x0, memmap[SIFIVE_U_DEV_PLIC].size); qemu_fdt_setprop_cell(fdt, nodename, "riscv,ndev", 0x35); qemu_fdt_setprop_cell(fdt, nodename, "phandle", plic_phandle); plic_phandle = qemu_fdt_get_phandle(fdt, nodename); @@ -277,7 +277,7 @@ static void create_fdt(SiFiveUState *s, const struct MemmapEntry *memmap, gpio_phandle = phandle++; nodename = g_strdup_printf("/soc/gpio@%lx", - (long)memmap[SIFIVE_U_GPIO].base); + (long)memmap[SIFIVE_U_DEV_GPIO].base); qemu_fdt_add_subnode(fdt, nodename); qemu_fdt_setprop_cell(fdt, nodename, "phandle", gpio_phandle); qemu_fdt_setprop_cells(fdt, nodename, "clocks", @@ -287,8 +287,8 @@ static void create_fdt(SiFiveUState *s, const struct MemmapEntry *memmap, qemu_fdt_setprop_cell(fdt, nodename, "#gpio-cells", 2); qemu_fdt_setprop(fdt, nodename, "gpio-controller", NULL, 0); qemu_fdt_setprop_cells(fdt, nodename, "reg", - 0x0, memmap[SIFIVE_U_GPIO].base, - 0x0, memmap[SIFIVE_U_GPIO].size); + 0x0, memmap[SIFIVE_U_DEV_GPIO].base, + 0x0, memmap[SIFIVE_U_DEV_GPIO].size); qemu_fdt_setprop_cells(fdt, nodename, "interrupts", SIFIVE_U_GPIO_IRQ0, SIFIVE_U_GPIO_IRQ1, SIFIVE_U_GPIO_IRQ2, SIFIVE_U_GPIO_IRQ3, SIFIVE_U_GPIO_IRQ4, SIFIVE_U_GPIO_IRQ5, SIFIVE_U_GPIO_IRQ6, @@ -306,7 +306,7 @@ static void create_fdt(SiFiveUState *s, const struct MemmapEntry *memmap, g_free(nodename); nodename = g_strdup_printf("/soc/dma@%lx", - (long)memmap[SIFIVE_U_PDMA].base); + (long)memmap[SIFIVE_U_DEV_PDMA].base); qemu_fdt_add_subnode(fdt, nodename); qemu_fdt_setprop_cell(fdt, nodename, "#dma-cells", 1); qemu_fdt_setprop_cells(fdt, nodename, "interrupts", @@ -315,18 +315,18 @@ static void create_fdt(SiFiveUState *s, const struct MemmapEntry *memmap, SIFIVE_U_PDMA_IRQ6, SIFIVE_U_PDMA_IRQ7); qemu_fdt_setprop_cell(fdt, nodename, "interrupt-parent", plic_phandle); qemu_fdt_setprop_cells(fdt, nodename, "reg", - 0x0, memmap[SIFIVE_U_PDMA].base, - 0x0, memmap[SIFIVE_U_PDMA].size); + 0x0, memmap[SIFIVE_U_DEV_PDMA].base, + 0x0, memmap[SIFIVE_U_DEV_PDMA].size); qemu_fdt_setprop_string(fdt, nodename, "compatible", "sifive,fu540-c000-pdma"); g_free(nodename); nodename = g_strdup_printf("/soc/cache-controller@%lx", - (long)memmap[SIFIVE_U_L2CC].base); + (long)memmap[SIFIVE_U_DEV_L2CC].base); qemu_fdt_add_subnode(fdt, nodename); qemu_fdt_setprop_cells(fdt, nodename, "reg", - 0x0, memmap[SIFIVE_U_L2CC].base, - 0x0, memmap[SIFIVE_U_L2CC].size); + 0x0, memmap[SIFIVE_U_DEV_L2CC].base, + 0x0, memmap[SIFIVE_U_DEV_L2CC].size); qemu_fdt_setprop_cells(fdt, nodename, "interrupts", SIFIVE_U_L2CC_IRQ0, SIFIVE_U_L2CC_IRQ1, SIFIVE_U_L2CC_IRQ2); qemu_fdt_setprop_cell(fdt, nodename, "interrupt-parent", plic_phandle); @@ -341,15 +341,15 @@ static void create_fdt(SiFiveUState *s, const struct MemmapEntry *memmap, phy_phandle = phandle++; nodename = g_strdup_printf("/soc/ethernet@%lx", - (long)memmap[SIFIVE_U_GEM].base); + (long)memmap[SIFIVE_U_DEV_GEM].base); qemu_fdt_add_subnode(fdt, nodename); qemu_fdt_setprop_string(fdt, nodename, "compatible", "sifive,fu540-c000-gem"); qemu_fdt_setprop_cells(fdt, nodename, "reg", - 0x0, memmap[SIFIVE_U_GEM].base, - 0x0, memmap[SIFIVE_U_GEM].size, - 0x0, memmap[SIFIVE_U_GEM_MGMT].base, - 0x0, memmap[SIFIVE_U_GEM_MGMT].size); + 0x0, memmap[SIFIVE_U_DEV_GEM].base, + 0x0, memmap[SIFIVE_U_DEV_GEM].size, + 0x0, memmap[SIFIVE_U_DEV_GEM_MGMT].base, + 0x0, memmap[SIFIVE_U_DEV_GEM_MGMT].size); qemu_fdt_setprop_string(fdt, nodename, "reg-names", "control"); qemu_fdt_setprop_string(fdt, nodename, "phy-mode", "gmii"); qemu_fdt_setprop_cell(fdt, nodename, "phy-handle", phy_phandle); @@ -370,19 +370,19 @@ static void create_fdt(SiFiveUState *s, const struct MemmapEntry *memmap, g_free(nodename); nodename = g_strdup_printf("/soc/ethernet@%lx/ethernet-phy@0", - (long)memmap[SIFIVE_U_GEM].base); + (long)memmap[SIFIVE_U_DEV_GEM].base); qemu_fdt_add_subnode(fdt, nodename); qemu_fdt_setprop_cell(fdt, nodename, "phandle", phy_phandle); qemu_fdt_setprop_cell(fdt, nodename, "reg", 0x0); g_free(nodename); nodename = g_strdup_printf("/soc/serial@%lx", - (long)memmap[SIFIVE_U_UART0].base); + (long)memmap[SIFIVE_U_DEV_UART0].base); qemu_fdt_add_subnode(fdt, nodename); qemu_fdt_setprop_string(fdt, nodename, "compatible", "sifive,uart0"); qemu_fdt_setprop_cells(fdt, nodename, "reg", - 0x0, memmap[SIFIVE_U_UART0].base, - 0x0, memmap[SIFIVE_U_UART0].size); + 0x0, memmap[SIFIVE_U_DEV_UART0].base, + 0x0, memmap[SIFIVE_U_DEV_UART0].size); qemu_fdt_setprop_cells(fdt, nodename, "clocks", prci_phandle, PRCI_CLK_TLCLK); qemu_fdt_setprop_cell(fdt, nodename, "interrupt-parent", plic_phandle); @@ -414,7 +414,7 @@ static void sifive_u_machine_init(MachineState *machine) MemoryRegion *system_memory = get_system_memory(); MemoryRegion *main_mem = g_new(MemoryRegion, 1); MemoryRegion *flash0 = g_new(MemoryRegion, 1); - target_ulong start_addr = memmap[SIFIVE_U_DRAM].base; + target_ulong start_addr = memmap[SIFIVE_U_DEV_DRAM].base; uint32_t start_addr_hi32 = 0x00000000; int i; uint32_t fdt_load_addr; @@ -429,13 +429,13 @@ static void sifive_u_machine_init(MachineState *machine) /* register RAM */ memory_region_init_ram(main_mem, NULL, "riscv.sifive.u.ram", machine->ram_size, &error_fatal); - memory_region_add_subregion(system_memory, memmap[SIFIVE_U_DRAM].base, + memory_region_add_subregion(system_memory, memmap[SIFIVE_U_DEV_DRAM].base, main_mem); /* register QSPI0 Flash */ memory_region_init_ram(flash0, NULL, "riscv.sifive.u.flash0", - memmap[SIFIVE_U_FLASH0].size, &error_fatal); - memory_region_add_subregion(system_memory, memmap[SIFIVE_U_FLASH0].base, + memmap[SIFIVE_U_DEV_FLASH0].size, &error_fatal); + memory_region_add_subregion(system_memory, memmap[SIFIVE_U_DEV_FLASH0].base, flash0); /* register gpio-restart */ @@ -461,14 +461,14 @@ static void sifive_u_machine_init(MachineState *machine) switch (s->msel) { case MSEL_MEMMAP_QSPI0_FLASH: - start_addr = memmap[SIFIVE_U_FLASH0].base; + start_addr = memmap[SIFIVE_U_DEV_FLASH0].base; break; case MSEL_L2LIM_QSPI0_FLASH: case MSEL_L2LIM_QSPI2_SD: - start_addr = memmap[SIFIVE_U_L2LIM].base; + start_addr = memmap[SIFIVE_U_DEV_L2LIM].base; break; default: - start_addr = memmap[SIFIVE_U_DRAM].base; + start_addr = memmap[SIFIVE_U_DEV_DRAM].base; break; } @@ -496,7 +496,7 @@ static void sifive_u_machine_init(MachineState *machine) } /* Compute the fdt load address in dram */ - fdt_load_addr = riscv_load_fdt(memmap[SIFIVE_U_DRAM].base, + fdt_load_addr = riscv_load_fdt(memmap[SIFIVE_U_DEV_DRAM].base, machine->ram_size, s->fdt); #if defined(TARGET_RISCV64) start_addr_hi32 = start_addr >> 32; @@ -528,10 +528,10 @@ static void sifive_u_machine_init(MachineState *machine) reset_vec[i] = cpu_to_le32(reset_vec[i]); } rom_add_blob_fixed_as("mrom.reset", reset_vec, sizeof(reset_vec), - memmap[SIFIVE_U_MROM].base, &address_space_memory); + memmap[SIFIVE_U_DEV_MROM].base, &address_space_memory); - riscv_rom_copy_firmware_info(memmap[SIFIVE_U_MROM].base, - memmap[SIFIVE_U_MROM].size, + riscv_rom_copy_firmware_info(memmap[SIFIVE_U_DEV_MROM].base, + memmap[SIFIVE_U_DEV_MROM].size, sizeof(reset_vec), kernel_entry); } @@ -674,8 +674,8 @@ static void sifive_u_soc_realize(DeviceState *dev, Error **errp) /* boot rom */ memory_region_init_rom(mask_rom, OBJECT(dev), "riscv.sifive.u.mrom", - memmap[SIFIVE_U_MROM].size, &error_fatal); - memory_region_add_subregion(system_memory, memmap[SIFIVE_U_MROM].base, + memmap[SIFIVE_U_DEV_MROM].size, &error_fatal); + memory_region_add_subregion(system_memory, memmap[SIFIVE_U_DEV_MROM].base, mask_rom); /* @@ -688,8 +688,8 @@ static void sifive_u_soc_realize(DeviceState *dev, Error **errp) * too generous to misbehaving guests. */ memory_region_init_ram(l2lim_mem, NULL, "riscv.sifive.u.l2lim", - memmap[SIFIVE_U_L2LIM].size, &error_fatal); - memory_region_add_subregion(system_memory, memmap[SIFIVE_U_L2LIM].base, + memmap[SIFIVE_U_DEV_L2LIM].size, &error_fatal); + memory_region_add_subregion(system_memory, memmap[SIFIVE_U_DEV_L2LIM].base, l2lim_mem); /* create PLIC hart topology configuration string */ @@ -707,7 +707,7 @@ static void sifive_u_soc_realize(DeviceState *dev, Error **errp) } /* MMIO */ - s->plic = sifive_plic_create(memmap[SIFIVE_U_PLIC].base, + s->plic = sifive_plic_create(memmap[SIFIVE_U_DEV_PLIC].base, plic_hart_config, 0, SIFIVE_U_PLIC_NUM_SOURCES, SIFIVE_U_PLIC_NUM_PRIORITIES, @@ -717,27 +717,27 @@ static void sifive_u_soc_realize(DeviceState *dev, Error **errp) SIFIVE_U_PLIC_ENABLE_STRIDE, SIFIVE_U_PLIC_CONTEXT_BASE, SIFIVE_U_PLIC_CONTEXT_STRIDE, - memmap[SIFIVE_U_PLIC].size); + memmap[SIFIVE_U_DEV_PLIC].size); g_free(plic_hart_config); - sifive_uart_create(system_memory, memmap[SIFIVE_U_UART0].base, + sifive_uart_create(system_memory, memmap[SIFIVE_U_DEV_UART0].base, serial_hd(0), qdev_get_gpio_in(DEVICE(s->plic), SIFIVE_U_UART0_IRQ)); - sifive_uart_create(system_memory, memmap[SIFIVE_U_UART1].base, + sifive_uart_create(system_memory, memmap[SIFIVE_U_DEV_UART1].base, serial_hd(1), qdev_get_gpio_in(DEVICE(s->plic), SIFIVE_U_UART1_IRQ)); - sifive_clint_create(memmap[SIFIVE_U_CLINT].base, - memmap[SIFIVE_U_CLINT].size, 0, ms->smp.cpus, + sifive_clint_create(memmap[SIFIVE_U_DEV_CLINT].base, + memmap[SIFIVE_U_DEV_CLINT].size, 0, ms->smp.cpus, SIFIVE_SIP_BASE, SIFIVE_TIMECMP_BASE, SIFIVE_TIME_BASE, SIFIVE_CLINT_TIMEBASE_FREQ, false); if (!sysbus_realize(SYS_BUS_DEVICE(&s->prci), errp)) { return; } - sysbus_mmio_map(SYS_BUS_DEVICE(&s->prci), 0, memmap[SIFIVE_U_PRCI].base); + sysbus_mmio_map(SYS_BUS_DEVICE(&s->prci), 0, memmap[SIFIVE_U_DEV_PRCI].base); qdev_prop_set_uint32(DEVICE(&s->gpio), "ngpio", 16); if (!sysbus_realize(SYS_BUS_DEVICE(&s->gpio), errp)) { return; } - sysbus_mmio_map(SYS_BUS_DEVICE(&s->gpio), 0, memmap[SIFIVE_U_GPIO].base); + sysbus_mmio_map(SYS_BUS_DEVICE(&s->gpio), 0, memmap[SIFIVE_U_DEV_GPIO].base); /* Pass all GPIOs to the SOC layer so they are available to the board */ qdev_pass_gpios(DEVICE(&s->gpio), dev, NULL); @@ -751,7 +751,7 @@ static void sifive_u_soc_realize(DeviceState *dev, Error **errp) /* PDMA */ sysbus_realize(SYS_BUS_DEVICE(&s->dma), errp); - sysbus_mmio_map(SYS_BUS_DEVICE(&s->dma), 0, memmap[SIFIVE_U_PDMA].base); + sysbus_mmio_map(SYS_BUS_DEVICE(&s->dma), 0, memmap[SIFIVE_U_DEV_PDMA].base); /* Connect PDMA interrupts to the PLIC */ for (i = 0; i < SIFIVE_PDMA_IRQS; i++) { @@ -764,7 +764,7 @@ static void sifive_u_soc_realize(DeviceState *dev, Error **errp) if (!sysbus_realize(SYS_BUS_DEVICE(&s->otp), errp)) { return; } - sysbus_mmio_map(SYS_BUS_DEVICE(&s->otp), 0, memmap[SIFIVE_U_OTP].base); + sysbus_mmio_map(SYS_BUS_DEVICE(&s->otp), 0, memmap[SIFIVE_U_DEV_OTP].base); /* FIXME use qdev NIC properties instead of nd_table[] */ if (nd->used) { @@ -776,18 +776,18 @@ static void sifive_u_soc_realize(DeviceState *dev, Error **errp) if (!sysbus_realize(SYS_BUS_DEVICE(&s->gem), errp)) { return; } - sysbus_mmio_map(SYS_BUS_DEVICE(&s->gem), 0, memmap[SIFIVE_U_GEM].base); + sysbus_mmio_map(SYS_BUS_DEVICE(&s->gem), 0, memmap[SIFIVE_U_DEV_GEM].base); sysbus_connect_irq(SYS_BUS_DEVICE(&s->gem), 0, qdev_get_gpio_in(DEVICE(s->plic), SIFIVE_U_GEM_IRQ)); create_unimplemented_device("riscv.sifive.u.gem-mgmt", - memmap[SIFIVE_U_GEM_MGMT].base, memmap[SIFIVE_U_GEM_MGMT].size); + memmap[SIFIVE_U_DEV_GEM_MGMT].base, memmap[SIFIVE_U_DEV_GEM_MGMT].size); create_unimplemented_device("riscv.sifive.u.dmc", - memmap[SIFIVE_U_DMC].base, memmap[SIFIVE_U_DMC].size); + memmap[SIFIVE_U_DEV_DMC].base, memmap[SIFIVE_U_DEV_DMC].size); create_unimplemented_device("riscv.sifive.u.l2cc", - memmap[SIFIVE_U_L2CC].base, memmap[SIFIVE_U_L2CC].size); + memmap[SIFIVE_U_DEV_L2CC].base, memmap[SIFIVE_U_DEV_L2CC].size); } static Property sifive_u_soc_props[] = { diff --git a/hw/rtc/ds1338.c b/hw/rtc/ds1338.c index 10fac3d9c9..bc5ce1a9f4 100644 --- a/hw/rtc/ds1338.c +++ b/hw/rtc/ds1338.c @@ -30,9 +30,7 @@ #define CTRL_OSF 0x20 #define TYPE_DS1338 "ds1338" -typedef struct DS1338State DS1338State; -DECLARE_INSTANCE_CHECKER(DS1338State, DS1338, - TYPE_DS1338) +OBJECT_DECLARE_SIMPLE_TYPE(DS1338State, DS1338) struct DS1338State { I2CSlave parent_obj; diff --git a/hw/rtc/exynos4210_rtc.c b/hw/rtc/exynos4210_rtc.c index f8a4fe8a47..4c97624478 100644 --- a/hw/rtc/exynos4210_rtc.c +++ b/hw/rtc/exynos4210_rtc.c @@ -85,9 +85,7 @@ #define RTC_BASE_FREQ 32768 #define TYPE_EXYNOS4210_RTC "exynos4210.rtc" -typedef struct Exynos4210RTCState Exynos4210RTCState; -DECLARE_INSTANCE_CHECKER(Exynos4210RTCState, EXYNOS4210_RTC, - TYPE_EXYNOS4210_RTC) +OBJECT_DECLARE_SIMPLE_TYPE(Exynos4210RTCState, EXYNOS4210_RTC) struct Exynos4210RTCState { SysBusDevice parent_obj; diff --git a/hw/rtc/m41t80.c b/hw/rtc/m41t80.c index 0b7048c3f4..396d110ba2 100644 --- a/hw/rtc/m41t80.c +++ b/hw/rtc/m41t80.c @@ -17,9 +17,7 @@ #include "qom/object.h" #define TYPE_M41T80 "m41t80" -typedef struct M41t80State M41t80State; -DECLARE_INSTANCE_CHECKER(M41t80State, M41T80, - TYPE_M41T80) +OBJECT_DECLARE_SIMPLE_TYPE(M41t80State, M41T80) struct M41t80State { I2CSlave parent_obj; diff --git a/hw/rtc/sun4v-rtc.c b/hw/rtc/sun4v-rtc.c index 18979d25d0..e037acd1b5 100644 --- a/hw/rtc/sun4v-rtc.c +++ b/hw/rtc/sun4v-rtc.c @@ -20,9 +20,7 @@ #define TYPE_SUN4V_RTC "sun4v_rtc" -typedef struct Sun4vRtc Sun4vRtc; -DECLARE_INSTANCE_CHECKER(Sun4vRtc, SUN4V_RTC, - TYPE_SUN4V_RTC) +OBJECT_DECLARE_SIMPLE_TYPE(Sun4vRtc, SUN4V_RTC) struct Sun4vRtc { SysBusDevice parent_obj; diff --git a/hw/rtc/twl92230.c b/hw/rtc/twl92230.c index 4f83eff5c3..f838913b37 100644 --- a/hw/rtc/twl92230.c +++ b/hw/rtc/twl92230.c @@ -34,9 +34,7 @@ #define VERBOSE 1 #define TYPE_TWL92230 "twl92230" -typedef struct MenelausState MenelausState; -DECLARE_INSTANCE_CHECKER(MenelausState, TWL92230, - TYPE_TWL92230) +OBJECT_DECLARE_SIMPLE_TYPE(MenelausState, TWL92230) struct MenelausState { I2CSlave parent_obj; diff --git a/hw/s390x/ccw-device.h b/hw/s390x/ccw-device.h index cf7d492084..832c78cd42 100644 --- a/hw/s390x/ccw-device.h +++ b/hw/s390x/ccw-device.h @@ -38,7 +38,6 @@ struct CCWDeviceClass { void (*realize)(CcwDevice *, Error **); void (*refill_ids)(CcwDevice *); }; -typedef struct CCWDeviceClass CCWDeviceClass; static inline CcwDevice *to_ccw_dev_fast(DeviceState *d) { @@ -47,7 +46,6 @@ static inline CcwDevice *to_ccw_dev_fast(DeviceState *d) #define TYPE_CCW_DEVICE "ccw-device" -DECLARE_OBJ_CHECKERS(CcwDevice, CCWDeviceClass, - CCW_DEVICE, TYPE_CCW_DEVICE) +OBJECT_DECLARE_TYPE(CcwDevice, CCWDeviceClass, CCW_DEVICE) #endif diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h index 9e6061a043..9e90169695 100644 --- a/hw/s390x/ipl.h +++ b/hw/s390x/ipl.h @@ -153,9 +153,7 @@ struct QemuIplParameters { typedef struct QemuIplParameters QemuIplParameters; #define TYPE_S390_IPL "s390-ipl" -typedef struct S390IPLState S390IPLState; -DECLARE_INSTANCE_CHECKER(S390IPLState, S390_IPL, - TYPE_S390_IPL) +OBJECT_DECLARE_SIMPLE_TYPE(S390IPLState, S390_IPL) struct S390IPLState { /*< private >*/ diff --git a/hw/s390x/s390-pci-bus.h b/hw/s390x/s390-pci-bus.h index 045805980f..97464d0ad3 100644 --- a/hw/s390x/s390-pci-bus.h +++ b/hw/s390x/s390-pci-bus.h @@ -37,18 +37,10 @@ #define UID_UNDEFINED 0 #define UID_CHECKING_ENABLED 0x01 -typedef struct S390pciState S390pciState; -DECLARE_INSTANCE_CHECKER(S390pciState, S390_PCI_HOST_BRIDGE, - TYPE_S390_PCI_HOST_BRIDGE) -typedef struct S390PCIBus S390PCIBus; -DECLARE_INSTANCE_CHECKER(S390PCIBus, S390_PCI_BUS, - TYPE_S390_PCI_BUS) -typedef struct S390PCIBusDevice S390PCIBusDevice; -DECLARE_INSTANCE_CHECKER(S390PCIBusDevice, S390_PCI_DEVICE, - TYPE_S390_PCI_DEVICE) -typedef struct S390PCIIOMMU S390PCIIOMMU; -DECLARE_INSTANCE_CHECKER(S390PCIIOMMU, S390_PCI_IOMMU, - TYPE_S390_PCI_IOMMU) +OBJECT_DECLARE_SIMPLE_TYPE(S390pciState, S390_PCI_HOST_BRIDGE) +OBJECT_DECLARE_SIMPLE_TYPE(S390PCIBus, S390_PCI_BUS) +OBJECT_DECLARE_SIMPLE_TYPE(S390PCIBusDevice, S390_PCI_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(S390PCIIOMMU, S390_PCI_IOMMU) #define HP_EVENT_TO_CONFIGURED 0x0301 #define HP_EVENT_RESERVED_TO_STANDBY 0x0302 diff --git a/hw/s390x/s390-skeys.c b/hw/s390x/s390-skeys.c index db2f49cb27..5cc559fe4c 100644 --- a/hw/s390x/s390-skeys.c +++ b/hw/s390x/s390-skeys.c @@ -125,7 +125,7 @@ void qmp_dump_skeys(const char *filename, Error **errp) return; } - fd = qemu_open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600); + fd = qemu_open_old(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600); if (fd < 0) { error_setg_file_open(errp, errno, filename); return; diff --git a/hw/s390x/virtio-ccw.h b/hw/s390x/virtio-ccw.h index cea259685d..49a2b8ca42 100644 --- a/hw/s390x/virtio-ccw.h +++ b/hw/s390x/virtio-ccw.h @@ -54,10 +54,7 @@ #define CCW_CMD_SET_VIRTIO_REV 0x83 #define TYPE_VIRTIO_CCW_DEVICE "virtio-ccw-device" -typedef struct VirtIOCCWDeviceClass VirtIOCCWDeviceClass; -typedef struct VirtioCcwDevice VirtioCcwDevice; -DECLARE_OBJ_CHECKERS(VirtioCcwDevice, VirtIOCCWDeviceClass, - VIRTIO_CCW_DEVICE, TYPE_VIRTIO_CCW_DEVICE) +OBJECT_DECLARE_TYPE(VirtioCcwDevice, VirtIOCCWDeviceClass, VIRTIO_CCW_DEVICE) typedef struct VirtioBusState VirtioCcwBusState; typedef struct VirtioBusClass VirtioCcwBusClass; @@ -105,9 +102,7 @@ static inline int virtio_ccw_rev_max(VirtioCcwDevice *dev) /* virtio-scsi-ccw */ #define TYPE_VIRTIO_SCSI_CCW "virtio-scsi-ccw" -typedef struct VirtIOSCSICcw VirtIOSCSICcw; -DECLARE_INSTANCE_CHECKER(VirtIOSCSICcw, VIRTIO_SCSI_CCW, - TYPE_VIRTIO_SCSI_CCW) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOSCSICcw, VIRTIO_SCSI_CCW) struct VirtIOSCSICcw { VirtioCcwDevice parent_obj; @@ -118,9 +113,7 @@ struct VirtIOSCSICcw { /* vhost-scsi-ccw */ #define TYPE_VHOST_SCSI_CCW "vhost-scsi-ccw" -typedef struct VHostSCSICcw VHostSCSICcw; -DECLARE_INSTANCE_CHECKER(VHostSCSICcw, VHOST_SCSI_CCW, - TYPE_VHOST_SCSI_CCW) +OBJECT_DECLARE_SIMPLE_TYPE(VHostSCSICcw, VHOST_SCSI_CCW) struct VHostSCSICcw { VirtioCcwDevice parent_obj; @@ -131,9 +124,7 @@ struct VHostSCSICcw { /* virtio-blk-ccw */ #define TYPE_VIRTIO_BLK_CCW "virtio-blk-ccw" -typedef struct VirtIOBlkCcw VirtIOBlkCcw; -DECLARE_INSTANCE_CHECKER(VirtIOBlkCcw, VIRTIO_BLK_CCW, - TYPE_VIRTIO_BLK_CCW) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOBlkCcw, VIRTIO_BLK_CCW) struct VirtIOBlkCcw { VirtioCcwDevice parent_obj; @@ -143,9 +134,7 @@ struct VirtIOBlkCcw { /* virtio-balloon-ccw */ #define TYPE_VIRTIO_BALLOON_CCW "virtio-balloon-ccw" -typedef struct VirtIOBalloonCcw VirtIOBalloonCcw; -DECLARE_INSTANCE_CHECKER(VirtIOBalloonCcw, VIRTIO_BALLOON_CCW, - TYPE_VIRTIO_BALLOON_CCW) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOBalloonCcw, VIRTIO_BALLOON_CCW) struct VirtIOBalloonCcw { VirtioCcwDevice parent_obj; @@ -155,9 +144,7 @@ struct VirtIOBalloonCcw { /* virtio-serial-ccw */ #define TYPE_VIRTIO_SERIAL_CCW "virtio-serial-ccw" -typedef struct VirtioSerialCcw VirtioSerialCcw; -DECLARE_INSTANCE_CHECKER(VirtioSerialCcw, VIRTIO_SERIAL_CCW, - TYPE_VIRTIO_SERIAL_CCW) +OBJECT_DECLARE_SIMPLE_TYPE(VirtioSerialCcw, VIRTIO_SERIAL_CCW) struct VirtioSerialCcw { VirtioCcwDevice parent_obj; @@ -167,9 +154,7 @@ struct VirtioSerialCcw { /* virtio-net-ccw */ #define TYPE_VIRTIO_NET_CCW "virtio-net-ccw" -typedef struct VirtIONetCcw VirtIONetCcw; -DECLARE_INSTANCE_CHECKER(VirtIONetCcw, VIRTIO_NET_CCW, - TYPE_VIRTIO_NET_CCW) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIONetCcw, VIRTIO_NET_CCW) struct VirtIONetCcw { VirtioCcwDevice parent_obj; @@ -179,9 +164,7 @@ struct VirtIONetCcw { /* virtio-rng-ccw */ #define TYPE_VIRTIO_RNG_CCW "virtio-rng-ccw" -typedef struct VirtIORNGCcw VirtIORNGCcw; -DECLARE_INSTANCE_CHECKER(VirtIORNGCcw, VIRTIO_RNG_CCW, - TYPE_VIRTIO_RNG_CCW) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIORNGCcw, VIRTIO_RNG_CCW) struct VirtIORNGCcw { VirtioCcwDevice parent_obj; @@ -191,9 +174,7 @@ struct VirtIORNGCcw { /* virtio-crypto-ccw */ #define TYPE_VIRTIO_CRYPTO_CCW "virtio-crypto-ccw" -typedef struct VirtIOCryptoCcw VirtIOCryptoCcw; -DECLARE_INSTANCE_CHECKER(VirtIOCryptoCcw, VIRTIO_CRYPTO_CCW, - TYPE_VIRTIO_CRYPTO_CCW) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOCryptoCcw, VIRTIO_CRYPTO_CCW) struct VirtIOCryptoCcw { VirtioCcwDevice parent_obj; @@ -206,9 +187,7 @@ VirtIODevice *virtio_ccw_get_vdev(SubchDev *sch); #include "hw/9pfs/virtio-9p.h" #define TYPE_VIRTIO_9P_CCW "virtio-9p-ccw" -typedef struct V9fsCCWState V9fsCCWState; -DECLARE_INSTANCE_CHECKER(V9fsCCWState, VIRTIO_9P_CCW, - TYPE_VIRTIO_9P_CCW) +OBJECT_DECLARE_SIMPLE_TYPE(V9fsCCWState, VIRTIO_9P_CCW) struct V9fsCCWState { VirtioCcwDevice parent_obj; @@ -219,9 +198,7 @@ struct V9fsCCWState { #ifdef CONFIG_VHOST_VSOCK #define TYPE_VHOST_VSOCK_CCW "vhost-vsock-ccw" -typedef struct VHostVSockCCWState VHostVSockCCWState; -DECLARE_INSTANCE_CHECKER(VHostVSockCCWState, VHOST_VSOCK_CCW, - TYPE_VHOST_VSOCK_CCW) +OBJECT_DECLARE_SIMPLE_TYPE(VHostVSockCCWState, VHOST_VSOCK_CCW) struct VHostVSockCCWState { VirtioCcwDevice parent_obj; @@ -231,9 +208,7 @@ struct VHostVSockCCWState { #endif /* CONFIG_VHOST_VSOCK */ #define TYPE_VIRTIO_GPU_CCW "virtio-gpu-ccw" -typedef struct VirtIOGPUCcw VirtIOGPUCcw; -DECLARE_INSTANCE_CHECKER(VirtIOGPUCcw, VIRTIO_GPU_CCW, - TYPE_VIRTIO_GPU_CCW) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOGPUCcw, VIRTIO_GPU_CCW) struct VirtIOGPUCcw { VirtioCcwDevice parent_obj; @@ -241,9 +216,7 @@ struct VirtIOGPUCcw { }; #define TYPE_VIRTIO_INPUT_CCW "virtio-input-ccw" -typedef struct VirtIOInputCcw VirtIOInputCcw; -DECLARE_INSTANCE_CHECKER(VirtIOInputCcw, VIRTIO_INPUT_CCW, - TYPE_VIRTIO_INPUT_CCW) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOInputCcw, VIRTIO_INPUT_CCW) struct VirtIOInputCcw { VirtioCcwDevice parent_obj; @@ -254,9 +227,7 @@ struct VirtIOInputCcw { #define TYPE_VIRTIO_KEYBOARD_CCW "virtio-keyboard-ccw" #define TYPE_VIRTIO_MOUSE_CCW "virtio-mouse-ccw" #define TYPE_VIRTIO_TABLET_CCW "virtio-tablet-ccw" -typedef struct VirtIOInputHIDCcw VirtIOInputHIDCcw; -DECLARE_INSTANCE_CHECKER(VirtIOInputHIDCcw, VIRTIO_INPUT_HID_CCW, - TYPE_VIRTIO_INPUT_HID_CCW) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOInputHIDCcw, VIRTIO_INPUT_HID_CCW) struct VirtIOInputHIDCcw { VirtioCcwDevice parent_obj; diff --git a/hw/scsi/lsi53c895a.c b/hw/scsi/lsi53c895a.c index e8354a47da..7d13c7dc1c 100644 --- a/hw/scsi/lsi53c895a.c +++ b/hw/scsi/lsi53c895a.c @@ -305,13 +305,11 @@ struct LSIState { uint8_t script_ram[2048 * sizeof(uint32_t)]; }; -typedef struct LSIState LSIState; #define TYPE_LSI53C810 "lsi53c810" #define TYPE_LSI53C895A "lsi53c895a" -DECLARE_INSTANCE_CHECKER(LSIState, LSI53C895A, - TYPE_LSI53C895A) +OBJECT_DECLARE_SIMPLE_TYPE(LSIState, LSI53C895A) static const char *scsi_phases[] = { "DOUT", diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c index 1f0388a755..e859534eaf 100644 --- a/hw/scsi/scsi-disk.c +++ b/hw/scsi/scsi-disk.c @@ -55,10 +55,7 @@ #define TYPE_SCSI_DISK_BASE "scsi-disk-base" -typedef struct SCSIDiskClass SCSIDiskClass; -typedef struct SCSIDiskState SCSIDiskState; -DECLARE_OBJ_CHECKERS(SCSIDiskState, SCSIDiskClass, - SCSI_DISK_BASE, TYPE_SCSI_DISK_BASE) +OBJECT_DECLARE_TYPE(SCSIDiskState, SCSIDiskClass, SCSI_DISK_BASE) struct SCSIDiskClass { SCSIDeviceClass parent_class; diff --git a/hw/scsi/spapr_vscsi.c b/hw/scsi/spapr_vscsi.c index c3e6d1ecef..4aa0224c47 100644 --- a/hw/scsi/spapr_vscsi.c +++ b/hw/scsi/spapr_vscsi.c @@ -91,9 +91,7 @@ typedef struct vscsi_req { } vscsi_req; #define TYPE_VIO_SPAPR_VSCSI_DEVICE "spapr-vscsi" -typedef struct VSCSIState VSCSIState; -DECLARE_INSTANCE_CHECKER(VSCSIState, VIO_SPAPR_VSCSI_DEVICE, - TYPE_VIO_SPAPR_VSCSI_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(VSCSIState, VIO_SPAPR_VSCSI_DEVICE) struct VSCSIState { SpaprVioDevice vdev; diff --git a/hw/scsi/vmw_pvscsi.c b/hw/scsi/vmw_pvscsi.c index 40095bed09..a63d25de48 100644 --- a/hw/scsi/vmw_pvscsi.c +++ b/hw/scsi/vmw_pvscsi.c @@ -61,12 +61,9 @@ struct PVSCSIClass { PCIDeviceClass parent_class; DeviceRealize parent_dc_realize; }; -typedef struct PVSCSIClass PVSCSIClass; #define TYPE_PVSCSI "pvscsi" -typedef struct PVSCSIState PVSCSIState; -DECLARE_OBJ_CHECKERS(PVSCSIState, PVSCSIClass, - PVSCSI, TYPE_PVSCSI) +OBJECT_DECLARE_TYPE(PVSCSIState, PVSCSIClass, PVSCSI) /* Compatibility flags for migration */ diff --git a/hw/sd/milkymist-memcard.c b/hw/sd/milkymist-memcard.c index 4d3ec28f5d..8cde32049e 100644 --- a/hw/sd/milkymist-memcard.c +++ b/hw/sd/milkymist-memcard.c @@ -64,9 +64,7 @@ enum { }; #define TYPE_MILKYMIST_MEMCARD "milkymist-memcard" -typedef struct MilkymistMemcardState MilkymistMemcardState; -DECLARE_INSTANCE_CHECKER(MilkymistMemcardState, MILKYMIST_MEMCARD, - TYPE_MILKYMIST_MEMCARD) +OBJECT_DECLARE_SIMPLE_TYPE(MilkymistMemcardState, MILKYMIST_MEMCARD) #define TYPE_MILKYMIST_SDBUS "milkymist-sdbus" diff --git a/hw/sd/pl181.c b/hw/sd/pl181.c index 7829e933a5..960f155098 100644 --- a/hw/sd/pl181.c +++ b/hw/sd/pl181.c @@ -23,9 +23,7 @@ #define PL181_FIFO_LEN 16 #define TYPE_PL181 "pl181" -typedef struct PL181State PL181State; -DECLARE_INSTANCE_CHECKER(PL181State, PL181, - TYPE_PL181) +OBJECT_DECLARE_SIMPLE_TYPE(PL181State, PL181) #define TYPE_PL181_BUS "pl181-bus" diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index dd07258d4e..14c8e04a89 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -52,11 +52,9 @@ struct ssi_sd_state { int32_t stopping; SDBus sdbus; }; -typedef struct ssi_sd_state ssi_sd_state; #define TYPE_SSI_SD "ssi-sd" -DECLARE_INSTANCE_CHECKER(ssi_sd_state, SSI_SD, - TYPE_SSI_SD) +OBJECT_DECLARE_SIMPLE_TYPE(ssi_sd_state, SSI_SD) /* State word bits. */ #define SSI_SDR_LOCKED 0x0001 diff --git a/hw/sh4/sh_pci.c b/hw/sh4/sh_pci.c index dc73845125..73d2d0bccb 100644 --- a/hw/sh4/sh_pci.c +++ b/hw/sh4/sh_pci.c @@ -35,9 +35,7 @@ #define TYPE_SH_PCI_HOST_BRIDGE "sh_pci" -typedef struct SHPCIState SHPCIState; -DECLARE_INSTANCE_CHECKER(SHPCIState, SH_PCI_HOST_BRIDGE, - TYPE_SH_PCI_HOST_BRIDGE) +OBJECT_DECLARE_SIMPLE_TYPE(SHPCIState, SH_PCI_HOST_BRIDGE) struct SHPCIState { PCIHostState parent_obj; diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c index 947b69d159..54a2b2f9ef 100644 --- a/hw/sparc/sun4m.c +++ b/hw/sparc/sun4m.c @@ -582,9 +582,7 @@ static void idreg_init(hwaddr addr) idreg_data, sizeof(idreg_data)); } -typedef struct IDRegState IDRegState; -DECLARE_INSTANCE_CHECKER(IDRegState, MACIO_ID_REGISTER, - TYPE_MACIO_ID_REGISTER) +OBJECT_DECLARE_SIMPLE_TYPE(IDRegState, MACIO_ID_REGISTER) struct IDRegState { SysBusDevice parent_obj; @@ -625,9 +623,7 @@ static const TypeInfo idreg_info = { }; #define TYPE_TCX_AFX "tcx_afx" -typedef struct AFXState AFXState; -DECLARE_INSTANCE_CHECKER(AFXState, TCX_AFX, - TYPE_TCX_AFX) +OBJECT_DECLARE_SIMPLE_TYPE(AFXState, TCX_AFX) struct AFXState { SysBusDevice parent_obj; diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c index b4aabfc076..ad5ca2472a 100644 --- a/hw/sparc64/sun4u.c +++ b/hw/sparc64/sun4u.c @@ -90,11 +90,9 @@ struct EbusState { MemoryRegion bar0; MemoryRegion bar1; }; -typedef struct EbusState EbusState; #define TYPE_EBUS "ebus" -DECLARE_INSTANCE_CHECKER(EbusState, EBUS, - TYPE_EBUS) +OBJECT_DECLARE_SIMPLE_TYPE(EbusState, EBUS) const char *fw_cfg_arch_key_name(uint16_t key) { @@ -229,9 +227,7 @@ typedef struct ResetData { } ResetData; #define TYPE_SUN4U_POWER "power" -typedef struct PowerDevice PowerDevice; -DECLARE_INSTANCE_CHECKER(PowerDevice, SUN4U_POWER, - TYPE_SUN4U_POWER) +OBJECT_DECLARE_SIMPLE_TYPE(PowerDevice, SUN4U_POWER) struct PowerDevice { SysBusDevice parent_obj; diff --git a/hw/ssi/ssi.c b/hw/ssi/ssi.c index faf7633e70..4278d0e444 100644 --- a/hw/ssi/ssi.c +++ b/hw/ssi/ssi.c @@ -24,8 +24,7 @@ struct SSIBus { }; #define TYPE_SSI_BUS "SSI" -DECLARE_INSTANCE_CHECKER(SSIBus, SSI_BUS, - TYPE_SSI_BUS) +OBJECT_DECLARE_SIMPLE_TYPE(SSIBus, SSI_BUS) static const TypeInfo ssi_bus_info = { .name = TYPE_SSI_BUS, diff --git a/hw/ssi/xilinx_spi.c b/hw/ssi/xilinx_spi.c index 34fc8da69a..fec8817d94 100644 --- a/hw/ssi/xilinx_spi.c +++ b/hw/ssi/xilinx_spi.c @@ -79,9 +79,7 @@ #define FIFO_CAPACITY 256 #define TYPE_XILINX_SPI "xlnx.xps-spi" -typedef struct XilinxSPI XilinxSPI; -DECLARE_INSTANCE_CHECKER(XilinxSPI, XILINX_SPI, - TYPE_XILINX_SPI) +OBJECT_DECLARE_SIMPLE_TYPE(XilinxSPI, XILINX_SPI) struct XilinxSPI { SysBusDevice parent_obj; diff --git a/hw/timer/altera_timer.c b/hw/timer/altera_timer.c index c694c98d08..c6e02d2b5a 100644 --- a/hw/timer/altera_timer.c +++ b/hw/timer/altera_timer.c @@ -45,9 +45,7 @@ #define CONTROL_STOP 0x0008 #define TYPE_ALTERA_TIMER "ALTR.timer" -typedef struct AlteraTimer AlteraTimer; -DECLARE_INSTANCE_CHECKER(AlteraTimer, ALTERA_TIMER, - TYPE_ALTERA_TIMER) +OBJECT_DECLARE_SIMPLE_TYPE(AlteraTimer, ALTERA_TIMER) struct AlteraTimer { SysBusDevice busdev; diff --git a/hw/timer/arm_timer.c b/hw/timer/arm_timer.c index 79117f45b0..98e70b2d26 100644 --- a/hw/timer/arm_timer.c +++ b/hw/timer/arm_timer.c @@ -191,9 +191,7 @@ static arm_timer_state *arm_timer_init(uint32_t freq) */ #define TYPE_SP804 "sp804" -typedef struct SP804State SP804State; -DECLARE_INSTANCE_CHECKER(SP804State, SP804, - TYPE_SP804) +OBJECT_DECLARE_SIMPLE_TYPE(SP804State, SP804) struct SP804State { SysBusDevice parent_obj; @@ -313,9 +311,7 @@ static void sp804_realize(DeviceState *dev, Error **errp) /* Integrator/CP timer module. */ #define TYPE_INTEGRATOR_PIT "integrator_pit" -typedef struct icp_pit_state icp_pit_state; -DECLARE_INSTANCE_CHECKER(icp_pit_state, INTEGRATOR_PIT, - TYPE_INTEGRATOR_PIT) +OBJECT_DECLARE_SIMPLE_TYPE(icp_pit_state, INTEGRATOR_PIT) struct icp_pit_state { SysBusDevice parent_obj; diff --git a/hw/timer/cadence_ttc.c b/hw/timer/cadence_ttc.c index 52e637545a..64108241ba 100644 --- a/hw/timer/cadence_ttc.c +++ b/hw/timer/cadence_ttc.c @@ -70,9 +70,7 @@ typedef struct { } CadenceTimerState; #define TYPE_CADENCE_TTC "cadence_ttc" -typedef struct CadenceTTCState CadenceTTCState; -DECLARE_INSTANCE_CHECKER(CadenceTTCState, CADENCE_TTC, - TYPE_CADENCE_TTC) +OBJECT_DECLARE_SIMPLE_TYPE(CadenceTTCState, CADENCE_TTC) struct CadenceTTCState { SysBusDevice parent_obj; diff --git a/hw/timer/exynos4210_mct.c b/hw/timer/exynos4210_mct.c index 0329cae3d9..08ee3ca76c 100644 --- a/hw/timer/exynos4210_mct.c +++ b/hw/timer/exynos4210_mct.c @@ -243,9 +243,7 @@ typedef struct { } Exynos4210MCTLT; #define TYPE_EXYNOS4210_MCT "exynos4210.mct" -typedef struct Exynos4210MCTState Exynos4210MCTState; -DECLARE_INSTANCE_CHECKER(Exynos4210MCTState, EXYNOS4210_MCT, - TYPE_EXYNOS4210_MCT) +OBJECT_DECLARE_SIMPLE_TYPE(Exynos4210MCTState, EXYNOS4210_MCT) struct Exynos4210MCTState { SysBusDevice parent_obj; diff --git a/hw/timer/exynos4210_pwm.c b/hw/timer/exynos4210_pwm.c index 5340fc0425..4fa3d87396 100644 --- a/hw/timer/exynos4210_pwm.c +++ b/hw/timer/exynos4210_pwm.c @@ -103,9 +103,7 @@ typedef struct { } Exynos4210PWM; #define TYPE_EXYNOS4210_PWM "exynos4210.pwm" -typedef struct Exynos4210PWMState Exynos4210PWMState; -DECLARE_INSTANCE_CHECKER(Exynos4210PWMState, EXYNOS4210_PWM, - TYPE_EXYNOS4210_PWM) +OBJECT_DECLARE_SIMPLE_TYPE(Exynos4210PWMState, EXYNOS4210_PWM) struct Exynos4210PWMState { SysBusDevice parent_obj; diff --git a/hw/timer/grlib_gptimer.c b/hw/timer/grlib_gptimer.c index e539fc24f0..d511890109 100644 --- a/hw/timer/grlib_gptimer.c +++ b/hw/timer/grlib_gptimer.c @@ -56,9 +56,7 @@ #define COUNTER_RELOAD_OFFSET 0x04 #define TIMER_BASE 0x10 -typedef struct GPTimerUnit GPTimerUnit; -DECLARE_INSTANCE_CHECKER(GPTimerUnit, GRLIB_GPTIMER, - TYPE_GRLIB_GPTIMER) +OBJECT_DECLARE_SIMPLE_TYPE(GPTimerUnit, GRLIB_GPTIMER) typedef struct GPTimer GPTimer; diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c index edaa5a0adf..05fd86af81 100644 --- a/hw/timer/hpet.c +++ b/hw/timer/hpet.c @@ -48,9 +48,7 @@ #define HPET_MSI_SUPPORT 0 -typedef struct HPETState HPETState; -DECLARE_INSTANCE_CHECKER(HPETState, HPET, - TYPE_HPET) +OBJECT_DECLARE_SIMPLE_TYPE(HPETState, HPET) struct HPETState; typedef struct HPETTimer { /* timers */ diff --git a/hw/timer/lm32_timer.c b/hw/timer/lm32_timer.c index 93ecb51a97..be87c65b3e 100644 --- a/hw/timer/lm32_timer.c +++ b/hw/timer/lm32_timer.c @@ -56,9 +56,7 @@ enum { }; #define TYPE_LM32_TIMER "lm32-timer" -typedef struct LM32TimerState LM32TimerState; -DECLARE_INSTANCE_CHECKER(LM32TimerState, LM32_TIMER, - TYPE_LM32_TIMER) +OBJECT_DECLARE_SIMPLE_TYPE(LM32TimerState, LM32_TIMER) struct LM32TimerState { SysBusDevice parent_obj; diff --git a/hw/timer/milkymist-sysctl.c b/hw/timer/milkymist-sysctl.c index 29500e0457..950437b685 100644 --- a/hw/timer/milkymist-sysctl.c +++ b/hw/timer/milkymist-sysctl.c @@ -63,9 +63,7 @@ enum { }; #define TYPE_MILKYMIST_SYSCTL "milkymist-sysctl" -typedef struct MilkymistSysctlState MilkymistSysctlState; -DECLARE_INSTANCE_CHECKER(MilkymistSysctlState, MILKYMIST_SYSCTL, - TYPE_MILKYMIST_SYSCTL) +OBJECT_DECLARE_SIMPLE_TYPE(MilkymistSysctlState, MILKYMIST_SYSCTL) struct MilkymistSysctlState { SysBusDevice parent_obj; diff --git a/hw/timer/puv3_ost.c b/hw/timer/puv3_ost.c index 3a35ac2b0a..d5bf26b56b 100644 --- a/hw/timer/puv3_ost.c +++ b/hw/timer/puv3_ost.c @@ -21,9 +21,7 @@ #include "hw/unicore32/puv3.h" #define TYPE_PUV3_OST "puv3_ost" -typedef struct PUV3OSTState PUV3OSTState; -DECLARE_INSTANCE_CHECKER(PUV3OSTState, PUV3_OST, - TYPE_PUV3_OST) +OBJECT_DECLARE_SIMPLE_TYPE(PUV3OSTState, PUV3_OST) /* puv3 ostimer implementation. */ struct PUV3OSTState { diff --git a/hw/timer/pxa2xx_timer.c b/hw/timer/pxa2xx_timer.c index 8c3a1f5489..2ae5ae3212 100644 --- a/hw/timer/pxa2xx_timer.c +++ b/hw/timer/pxa2xx_timer.c @@ -67,9 +67,7 @@ static int pxa2xx_timer4_freq[8] = { }; #define TYPE_PXA2XX_TIMER "pxa2xx-timer" -typedef struct PXA2xxTimerInfo PXA2xxTimerInfo; -DECLARE_INSTANCE_CHECKER(PXA2xxTimerInfo, PXA2XX_TIMER, - TYPE_PXA2XX_TIMER) +OBJECT_DECLARE_SIMPLE_TYPE(PXA2xxTimerInfo, PXA2XX_TIMER) typedef struct { diff --git a/hw/timer/slavio_timer.c b/hw/timer/slavio_timer.c index 08d6888015..5b2d20cb6a 100644 --- a/hw/timer/slavio_timer.c +++ b/hw/timer/slavio_timer.c @@ -60,9 +60,7 @@ typedef struct CPUTimerState { } CPUTimerState; #define TYPE_SLAVIO_TIMER "slavio_timer" -typedef struct SLAVIO_TIMERState SLAVIO_TIMERState; -DECLARE_INSTANCE_CHECKER(SLAVIO_TIMERState, SLAVIO_TIMER, - TYPE_SLAVIO_TIMER) +OBJECT_DECLARE_SIMPLE_TYPE(SLAVIO_TIMERState, SLAVIO_TIMER) struct SLAVIO_TIMERState { SysBusDevice parent_obj; diff --git a/hw/tpm/tpm_tis_isa.c b/hw/tpm/tpm_tis_isa.c index fafdcffa9c..6fd876eebf 100644 --- a/hw/tpm/tpm_tis_isa.c +++ b/hw/tpm/tpm_tis_isa.c @@ -38,10 +38,8 @@ struct TPMStateISA { /*< public >*/ TPMState state; /* not a QOM object */ }; -typedef struct TPMStateISA TPMStateISA; -DECLARE_INSTANCE_CHECKER(TPMStateISA, TPM_TIS_ISA, - TYPE_TPM_TIS_ISA) +OBJECT_DECLARE_SIMPLE_TYPE(TPMStateISA, TPM_TIS_ISA) static int tpm_tis_pre_save_isa(void *opaque) { diff --git a/hw/tpm/tpm_tis_sysbus.c b/hw/tpm/tpm_tis_sysbus.c index 20b28eeb28..2c32aa7099 100644 --- a/hw/tpm/tpm_tis_sysbus.c +++ b/hw/tpm/tpm_tis_sysbus.c @@ -38,10 +38,8 @@ struct TPMStateSysBus { /*< public >*/ TPMState state; /* not a QOM object */ }; -typedef struct TPMStateSysBus TPMStateSysBus; -DECLARE_INSTANCE_CHECKER(TPMStateSysBus, TPM_TIS_SYSBUS, - TYPE_TPM_TIS_SYSBUS) +OBJECT_DECLARE_SIMPLE_TYPE(TPMStateSysBus, TPM_TIS_SYSBUS) static int tpm_tis_pre_save_sysbus(void *opaque) { diff --git a/hw/usb/ccid.h b/hw/usb/ccid.h index ef2bb3462d..6b82a55bd4 100644 --- a/hw/usb/ccid.h +++ b/hw/usb/ccid.h @@ -13,13 +13,10 @@ #include "hw/qdev-core.h" #include "qom/object.h" -typedef struct CCIDCardState CCIDCardState; typedef struct CCIDCardInfo CCIDCardInfo; #define TYPE_CCID_CARD "ccid-card" -typedef struct CCIDCardClass CCIDCardClass; -DECLARE_OBJ_CHECKERS(CCIDCardState, CCIDCardClass, - CCID_CARD, TYPE_CCID_CARD) +OBJECT_DECLARE_TYPE(CCIDCardState, CCIDCardClass, CCID_CARD) /* * callbacks to be used by the CCID device (hw/usb-ccid.c) to call diff --git a/hw/usb/dev-audio.c b/hw/usb/dev-audio.c index 65247ca799..e1486f81e0 100644 --- a/hw/usb/dev-audio.c +++ b/hw/usb/dev-audio.c @@ -654,11 +654,9 @@ struct USBAudioState { uint32_t buffer_user, buffer; bool multi; }; -typedef struct USBAudioState USBAudioState; #define TYPE_USB_AUDIO "usb-audio" -DECLARE_INSTANCE_CHECKER(USBAudioState, USB_AUDIO, - TYPE_USB_AUDIO) +OBJECT_DECLARE_SIMPLE_TYPE(USBAudioState, USB_AUDIO) static void output_callback(void *opaque, int avail) { diff --git a/hw/usb/dev-hid.c b/hw/usb/dev-hid.c index 05cfe6baca..fc39bab79f 100644 --- a/hw/usb/dev-hid.c +++ b/hw/usb/dev-hid.c @@ -44,11 +44,9 @@ struct USBHIDState { char *display; uint32_t head; }; -typedef struct USBHIDState USBHIDState; #define TYPE_USB_HID "usb-hid" -DECLARE_INSTANCE_CHECKER(USBHIDState, USB_HID, - TYPE_USB_HID) +OBJECT_DECLARE_SIMPLE_TYPE(USBHIDState, USB_HID) enum { STR_MANUFACTURER = 1, diff --git a/hw/usb/dev-hub.c b/hw/usb/dev-hub.c index 7a182f9bec..40c1f90694 100644 --- a/hw/usb/dev-hub.c +++ b/hw/usb/dev-hub.c @@ -50,11 +50,9 @@ struct USBHubState { QEMUTimer *port_timer; USBHubPort ports[MAX_PORTS]; }; -typedef struct USBHubState USBHubState; #define TYPE_USB_HUB "usb-hub" -DECLARE_INSTANCE_CHECKER(USBHubState, USB_HUB, - TYPE_USB_HUB) +OBJECT_DECLARE_SIMPLE_TYPE(USBHubState, USB_HUB) #define ClearHubFeature (0x2000 | USB_REQ_CLEAR_FEATURE) #define ClearPortFeature (0x2300 | USB_REQ_CLEAR_FEATURE) diff --git a/hw/usb/dev-mtp.c b/hw/usb/dev-mtp.c index c61c0e0878..bbb8274344 100644 --- a/hw/usb/dev-mtp.c +++ b/hw/usb/dev-mtp.c @@ -238,8 +238,7 @@ typedef struct { } QEMU_PACKED ObjectInfo; #define TYPE_USB_MTP "usb-mtp" -DECLARE_INSTANCE_CHECKER(MTPState, USB_MTP, - TYPE_USB_MTP) +OBJECT_DECLARE_SIMPLE_TYPE(MTPState, USB_MTP) #define QEMU_STORAGE_ID 0x00010001 diff --git a/hw/usb/dev-network.c b/hw/usb/dev-network.c index cd32f57685..6c49c16015 100644 --- a/hw/usb/dev-network.c +++ b/hw/usb/dev-network.c @@ -653,11 +653,9 @@ struct USBNetState { NICConf conf; QTAILQ_HEAD(, rndis_response) rndis_resp; }; -typedef struct USBNetState USBNetState; #define TYPE_USB_NET "usb-net" -DECLARE_INSTANCE_CHECKER(USBNetState, USB_NET, - TYPE_USB_NET) +OBJECT_DECLARE_SIMPLE_TYPE(USBNetState, USB_NET) static int is_rndis(USBNetState *s) { diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c index 1a038a222e..b1622b7c7f 100644 --- a/hw/usb/dev-serial.c +++ b/hw/usb/dev-serial.c @@ -110,11 +110,9 @@ struct USBSerialState { int latency; /* ms */ CharBackend cs; }; -typedef struct USBSerialState USBSerialState; #define TYPE_USB_SERIAL "usb-serial-dev" -DECLARE_INSTANCE_CHECKER(USBSerialState, USB_SERIAL, - TYPE_USB_SERIAL) +OBJECT_DECLARE_SIMPLE_TYPE(USBSerialState, USB_SERIAL) enum { STR_MANUFACTURER = 1, diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c index 59b2248f34..946df9734a 100644 --- a/hw/usb/dev-smartcard-reader.c +++ b/hw/usb/dev-smartcard-reader.c @@ -61,9 +61,7 @@ do { \ #define D_VERBOSE 4 #define TYPE_USB_CCID_DEV "usb-ccid" -typedef struct USBCCIDState USBCCIDState; -DECLARE_INSTANCE_CHECKER(USBCCIDState, USB_CCID_DEV, - TYPE_USB_CCID_DEV) +OBJECT_DECLARE_SIMPLE_TYPE(USBCCIDState, USB_CCID_DEV) /* * The two options for variable sized buffers: * make them constant size, for large enough constant, @@ -1177,8 +1175,7 @@ static Property ccid_props[] = { }; #define TYPE_CCID_BUS "ccid-bus" -DECLARE_INSTANCE_CHECKER(CCIDBus, CCID_BUS, - TYPE_CCID_BUS) +OBJECT_DECLARE_SIMPLE_TYPE(CCIDBus, CCID_BUS) static const TypeInfo ccid_bus_info = { .name = TYPE_CCID_BUS, diff --git a/hw/usb/dev-uas.c b/hw/usb/dev-uas.c index c36c8e7820..cec071d96c 100644 --- a/hw/usb/dev-uas.c +++ b/hw/usb/dev-uas.c @@ -133,8 +133,7 @@ struct UASDevice { }; #define TYPE_USB_UAS "usb-uas" -DECLARE_INSTANCE_CHECKER(UASDevice, USB_UAS, - TYPE_USB_UAS) +OBJECT_DECLARE_SIMPLE_TYPE(UASDevice, USB_UAS) struct UASRequest { uint16_t tag; diff --git a/hw/usb/dev-wacom.c b/hw/usb/dev-wacom.c index 85c4d827bf..b595048635 100644 --- a/hw/usb/dev-wacom.c +++ b/hw/usb/dev-wacom.c @@ -53,11 +53,9 @@ struct USBWacomState { uint8_t idle; int changed; }; -typedef struct USBWacomState USBWacomState; #define TYPE_USB_WACOM "usb-wacom-tablet" -DECLARE_INSTANCE_CHECKER(USBWacomState, USB_WACOM, - TYPE_USB_WACOM) +OBJECT_DECLARE_SIMPLE_TYPE(USBWacomState, USB_WACOM) enum { STR_MANUFACTURER = 1, diff --git a/hw/usb/hcd-dwc2.h b/hw/usb/hcd-dwc2.h index 919e3e43b1..6998b04706 100644 --- a/hw/usb/hcd-dwc2.h +++ b/hw/usb/hcd-dwc2.h @@ -181,7 +181,6 @@ struct DWC2Class { }; #define TYPE_DWC2_USB "dwc2-usb" -DECLARE_OBJ_CHECKERS(DWC2State, DWC2Class, - DWC2_USB, TYPE_DWC2_USB) +OBJECT_DECLARE_TYPE(DWC2State, DWC2Class, DWC2_USB) #endif diff --git a/hw/usb/hcd-ehci.h b/hw/usb/hcd-ehci.h index 1301ce0be7..fd122dd4cd 100644 --- a/hw/usb/hcd-ehci.h +++ b/hw/usb/hcd-ehci.h @@ -329,9 +329,7 @@ void usb_ehci_unrealize(EHCIState *s, DeviceState *dev); void ehci_reset(void *opaque); #define TYPE_PCI_EHCI "pci-ehci-usb" -typedef struct EHCIPCIState EHCIPCIState; -DECLARE_INSTANCE_CHECKER(EHCIPCIState, PCI_EHCI, - TYPE_PCI_EHCI) +OBJECT_DECLARE_SIMPLE_TYPE(EHCIPCIState, PCI_EHCI) struct EHCIPCIState { /*< private >*/ @@ -350,10 +348,7 @@ struct EHCIPCIState { #define TYPE_PPC4xx_EHCI "ppc4xx-ehci-usb" #define TYPE_FUSBH200_EHCI "fusbh200-ehci-usb" -typedef struct EHCISysBusState EHCISysBusState; -typedef struct SysBusEHCIClass SysBusEHCIClass; -DECLARE_OBJ_CHECKERS(EHCISysBusState, SysBusEHCIClass, - SYS_BUS_EHCI, TYPE_SYS_BUS_EHCI) +OBJECT_DECLARE_TYPE(EHCISysBusState, SysBusEHCIClass, SYS_BUS_EHCI) struct EHCISysBusState { /*< private >*/ @@ -374,9 +369,7 @@ struct SysBusEHCIClass { uint16_t portnr; }; -typedef struct FUSBH200EHCIState FUSBH200EHCIState; -DECLARE_INSTANCE_CHECKER(FUSBH200EHCIState, FUSBH200_EHCI, - TYPE_FUSBH200_EHCI) +OBJECT_DECLARE_SIMPLE_TYPE(FUSBH200EHCIState, FUSBH200_EHCI) struct FUSBH200EHCIState { /*< private >*/ diff --git a/hw/usb/hcd-ohci-pci.c b/hw/usb/hcd-ohci-pci.c index f8168a06a3..f95199e0bb 100644 --- a/hw/usb/hcd-ohci-pci.c +++ b/hw/usb/hcd-ohci-pci.c @@ -32,9 +32,7 @@ #include "qom/object.h" #define TYPE_PCI_OHCI "pci-ohci" -typedef struct OHCIPCIState OHCIPCIState; -DECLARE_INSTANCE_CHECKER(OHCIPCIState, PCI_OHCI, - TYPE_PCI_OHCI) +OBJECT_DECLARE_SIMPLE_TYPE(OHCIPCIState, PCI_OHCI) struct OHCIPCIState { /*< private >*/ diff --git a/hw/usb/hcd-ohci.h b/hw/usb/hcd-ohci.h index 6e28e97839..11ac57058d 100644 --- a/hw/usb/hcd-ohci.h +++ b/hw/usb/hcd-ohci.h @@ -93,9 +93,7 @@ typedef struct OHCIState { } OHCIState; #define TYPE_SYSBUS_OHCI "sysbus-ohci" -typedef struct OHCISysBusState OHCISysBusState; -DECLARE_INSTANCE_CHECKER(OHCISysBusState, SYSBUS_OHCI, - TYPE_SYSBUS_OHCI) +OBJECT_DECLARE_SIMPLE_TYPE(OHCISysBusState, SYSBUS_OHCI) struct OHCISysBusState { /*< private >*/ diff --git a/hw/usb/hcd-xhci.h b/hw/usb/hcd-xhci.h index 2110c0399e..c3dfc14405 100644 --- a/hw/usb/hcd-xhci.h +++ b/hw/usb/hcd-xhci.h @@ -27,9 +27,7 @@ #define TYPE_NEC_XHCI "nec-usb-xhci" #define TYPE_QEMU_XHCI "qemu-xhci" -typedef struct XHCIState XHCIState; -DECLARE_INSTANCE_CHECKER(XHCIState, XHCI, - TYPE_XHCI) +OBJECT_DECLARE_SIMPLE_TYPE(XHCIState, XHCI) #define MAXPORTS_2 15 #define MAXPORTS_3 15 diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c index 43c93504a2..b950501d10 100644 --- a/hw/usb/host-libusb.c +++ b/hw/usb/host-libusb.c @@ -61,9 +61,7 @@ /* ------------------------------------------------------------------------ */ #define TYPE_USB_HOST_DEVICE "usb-host" -typedef struct USBHostDevice USBHostDevice; -DECLARE_INSTANCE_CHECKER(USBHostDevice, USB_HOST_DEVICE, - TYPE_USB_HOST_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(USBHostDevice, USB_HOST_DEVICE) typedef struct USBHostRequest USBHostRequest; typedef struct USBHostIsoXfer USBHostIsoXfer; @@ -1147,7 +1145,7 @@ static void usb_host_realize(USBDevice *udev, Error **errp) if (s->hostdevice) { int fd; s->needs_autoscan = false; - fd = qemu_open(s->hostdevice, O_RDWR); + fd = qemu_open_old(s->hostdevice, O_RDWR); if (fd < 0) { error_setg_errno(errp, errno, "failed to open %s", s->hostdevice); return; diff --git a/hw/usb/tusb6010.c b/hw/usb/tusb6010.c index dd20996d13..1dd4071e68 100644 --- a/hw/usb/tusb6010.c +++ b/hw/usb/tusb6010.c @@ -31,9 +31,7 @@ #include "qom/object.h" #define TYPE_TUSB6010 "tusb6010" -typedef struct TUSBState TUSBState; -DECLARE_INSTANCE_CHECKER(TUSBState, TUSB6010, - TYPE_TUSB6010) +OBJECT_DECLARE_SIMPLE_TYPE(TUSBState, TUSB6010) struct TUSBState { SysBusDevice parent_obj; diff --git a/hw/usb/u2f-passthru.c b/hw/usb/u2f-passthru.c index e9c8aa4595..ae00e93f35 100644 --- a/hw/usb/u2f-passthru.c +++ b/hw/usb/u2f-passthru.c @@ -383,7 +383,7 @@ static int u2f_passthru_open_from_device(struct udev_device *device) { const char *devnode = udev_device_get_devnode(device); - int fd = qemu_open(devnode, O_RDWR); + int fd = qemu_open_old(devnode, O_RDWR); if (fd < 0) { return -1; } else if (!u2f_passthru_is_u2f_device(fd)) { @@ -482,7 +482,7 @@ static void u2f_passthru_realize(U2FKeyState *base, Error **errp) return; #endif } else { - fd = qemu_open(key->hidraw, O_RDWR); + fd = qemu_open_old(key->hidraw, O_RDWR); if (fd < 0) { error_setg(errp, "%s: Failed to open %s", TYPE_U2F_PASSTHRU, key->hidraw); diff --git a/hw/vfio/ap.c b/hw/vfio/ap.c index 582c091a24..9571c2f91f 100644 --- a/hw/vfio/ap.c +++ b/hw/vfio/ap.c @@ -36,10 +36,8 @@ struct VFIOAPDevice { APDevice apdev; VFIODevice vdev; }; -typedef struct VFIOAPDevice VFIOAPDevice; -DECLARE_INSTANCE_CHECKER(VFIOAPDevice, VFIO_AP_DEVICE, - TYPE_VFIO_AP_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(VFIOAPDevice, VFIO_AP_DEVICE) static void vfio_ap_compute_needs_reset(VFIODevice *vdev) { diff --git a/hw/vfio/common.c b/hw/vfio/common.c index 33357140b8..13471ae294 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -1254,7 +1254,7 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as, } } - fd = qemu_open("/dev/vfio/vfio", O_RDWR); + fd = qemu_open_old("/dev/vfio/vfio", O_RDWR); if (fd < 0) { error_setg_errno(errp, errno, "failed to open /dev/vfio/vfio"); ret = -errno; @@ -1479,7 +1479,7 @@ VFIOGroup *vfio_get_group(int groupid, AddressSpace *as, Error **errp) group = g_malloc0(sizeof(*group)); snprintf(path, sizeof(path), "/dev/vfio/%d", groupid); - group->fd = qemu_open(path, O_RDWR); + group->fd = qemu_open_old(path, O_RDWR); if (group->fd < 0) { error_setg_errno(errp, errno, "failed to open %s", path); goto free_group_exit; diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h index 5e53d5b863..bce71a9ac9 100644 --- a/hw/vfio/pci.h +++ b/hw/vfio/pci.h @@ -115,9 +115,7 @@ typedef struct VFIOMSIXInfo { } VFIOMSIXInfo; #define TYPE_VFIO_PCI "vfio-pci" -typedef struct VFIOPCIDevice VFIOPCIDevice; -DECLARE_INSTANCE_CHECKER(VFIOPCIDevice, VFIO_PCI, - TYPE_VFIO_PCI) +OBJECT_DECLARE_SIMPLE_TYPE(VFIOPCIDevice, VFIO_PCI) struct VFIOPCIDevice { PCIDevice pdev; diff --git a/hw/virtio/virtio-input-pci.c b/hw/virtio/virtio-input-pci.c index 85acd3d2eb..48e9ff38e2 100644 --- a/hw/virtio/virtio-input-pci.c +++ b/hw/virtio/virtio-input-pci.c @@ -14,14 +14,11 @@ #include "qemu/module.h" #include "qom/object.h" -typedef struct VirtIOInputPCI VirtIOInputPCI; -typedef struct VirtIOInputHIDPCI VirtIOInputHIDPCI; /* * virtio-input-pci: This extends VirtioPCIProxy. */ -DECLARE_INSTANCE_CHECKER(VirtIOInputPCI, VIRTIO_INPUT_PCI, - TYPE_VIRTIO_INPUT_PCI) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOInputPCI, VIRTIO_INPUT_PCI) struct VirtIOInputPCI { VirtIOPCIProxy parent_obj; @@ -32,8 +29,7 @@ struct VirtIOInputPCI { #define TYPE_VIRTIO_KEYBOARD_PCI "virtio-keyboard-pci" #define TYPE_VIRTIO_MOUSE_PCI "virtio-mouse-pci" #define TYPE_VIRTIO_TABLET_PCI "virtio-tablet-pci" -DECLARE_INSTANCE_CHECKER(VirtIOInputHIDPCI, VIRTIO_INPUT_HID_PCI, - TYPE_VIRTIO_INPUT_HID_PCI) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOInputHIDPCI, VIRTIO_INPUT_HID_PCI) struct VirtIOInputHIDPCI { VirtIOPCIProxy parent_obj; diff --git a/hw/virtio/virtio-pci.h b/hw/virtio/virtio-pci.h index 47b6bb4e26..06e2af12de 100644 --- a/hw/virtio/virtio-pci.h +++ b/hw/virtio/virtio-pci.h @@ -19,7 +19,6 @@ #include "hw/virtio/virtio-bus.h" #include "qom/object.h" -typedef struct VirtIOPCIProxy VirtIOPCIProxy; /* virtio-pci-bus */ @@ -91,9 +90,7 @@ typedef struct { * virtio-pci: This is the PCIDevice which has a virtio-pci-bus. */ #define TYPE_VIRTIO_PCI "virtio-pci" -typedef struct VirtioPCIClass VirtioPCIClass; -DECLARE_OBJ_CHECKERS(VirtIOPCIProxy, VirtioPCIClass, - VIRTIO_PCI, TYPE_VIRTIO_PCI) +OBJECT_DECLARE_TYPE(VirtIOPCIProxy, VirtioPCIClass, VIRTIO_PCI) struct VirtioPCIClass { PCIDeviceClass parent_class; diff --git a/hw/watchdog/wdt_i6300esb.c b/hw/watchdog/wdt_i6300esb.c index 4f64899a56..502f45a939 100644 --- a/hw/watchdog/wdt_i6300esb.c +++ b/hw/watchdog/wdt_i6300esb.c @@ -102,11 +102,9 @@ struct I6300State { */ }; -typedef struct I6300State I6300State; #define TYPE_WATCHDOG_I6300ESB_DEVICE "i6300esb" -DECLARE_INSTANCE_CHECKER(I6300State, WATCHDOG_I6300ESB_DEVICE, - TYPE_WATCHDOG_I6300ESB_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(I6300State, WATCHDOG_I6300ESB_DEVICE) /* This function is called when the watchdog has either been enabled * (hence it starts counting down) or has been keep-alived. diff --git a/hw/xen/xen_pt.h b/hw/xen/xen_pt.h index f46971eac6..c74c4678f2 100644 --- a/hw/xen/xen_pt.h +++ b/hw/xen/xen_pt.h @@ -37,11 +37,9 @@ void xen_pt_log(const PCIDevice *d, const char *f, ...) GCC_FMT_ATTR(2, 3); typedef const struct XenPTRegInfo XenPTRegInfo; typedef struct XenPTReg XenPTReg; -typedef struct XenPCIPassthroughState XenPCIPassthroughState; #define TYPE_XEN_PT_DEVICE "xen-pci-passthrough" -DECLARE_INSTANCE_CHECKER(XenPCIPassthroughState, XEN_PT_DEVICE, - TYPE_XEN_PT_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(XenPCIPassthroughState, XEN_PT_DEVICE) uint32_t igd_read_opregion(XenPCIPassthroughState *s); void igd_write_opregion(XenPCIPassthroughState *s, uint32_t val); diff --git a/include/authz/base.h b/include/authz/base.h index 06b5e29f6f..eca170ee1a 100644 --- a/include/authz/base.h +++ b/include/authz/base.h @@ -28,7 +28,7 @@ #define TYPE_QAUTHZ "authz" OBJECT_DECLARE_TYPE(QAuthZ, QAuthZClass, - qauthz, QAUTHZ) + QAUTHZ) /** diff --git a/include/authz/list.h b/include/authz/list.h index 5676bb375c..f73bc5c50a 100644 --- a/include/authz/list.h +++ b/include/authz/list.h @@ -27,8 +27,8 @@ #define TYPE_QAUTHZ_LIST "authz-list" -OBJECT_DECLARE_SIMPLE_TYPE(QAuthZList, qauthz_list, - QAUTHZ_LIST, QAuthZClass) +OBJECT_DECLARE_SIMPLE_TYPE(QAuthZList, + QAUTHZ_LIST) diff --git a/include/authz/listfile.h b/include/authz/listfile.h index b491227bbe..51824f3fb2 100644 --- a/include/authz/listfile.h +++ b/include/authz/listfile.h @@ -27,8 +27,8 @@ #define TYPE_QAUTHZ_LIST_FILE "authz-list-file" -OBJECT_DECLARE_SIMPLE_TYPE(QAuthZListFile, qauthz_list_file, - QAUTHZ_LIST_FILE, QAuthZClass) +OBJECT_DECLARE_SIMPLE_TYPE(QAuthZListFile, + QAUTHZ_LIST_FILE) diff --git a/include/authz/pamacct.h b/include/authz/pamacct.h index 7804853ddf..d05c18a3a4 100644 --- a/include/authz/pamacct.h +++ b/include/authz/pamacct.h @@ -27,8 +27,8 @@ #define TYPE_QAUTHZ_PAM "authz-pam" -OBJECT_DECLARE_SIMPLE_TYPE(QAuthZPAM, qauthz_pam, - QAUTHZ_PAM, QAuthZClass) +OBJECT_DECLARE_SIMPLE_TYPE(QAuthZPAM, + QAUTHZ_PAM) diff --git a/include/authz/simple.h b/include/authz/simple.h index 346fcb0c6c..9f5b979e13 100644 --- a/include/authz/simple.h +++ b/include/authz/simple.h @@ -26,8 +26,8 @@ #define TYPE_QAUTHZ_SIMPLE "authz-simple" -OBJECT_DECLARE_SIMPLE_TYPE(QAuthZSimple, qauthz_simple, - QAUTHZ_SIMPLE, QAuthZClass) +OBJECT_DECLARE_SIMPLE_TYPE(QAuthZSimple, + QAUTHZ_SIMPLE) diff --git a/include/block/throttle-groups.h b/include/block/throttle-groups.h index 20b308f619..8bf7d233fa 100644 --- a/include/block/throttle-groups.h +++ b/include/block/throttle-groups.h @@ -60,9 +60,7 @@ typedef struct ThrottleGroupMember { } ThrottleGroupMember; #define TYPE_THROTTLE_GROUP "throttle-group" -typedef struct ThrottleGroup ThrottleGroup; -DECLARE_INSTANCE_CHECKER(ThrottleGroup, THROTTLE_GROUP, - TYPE_THROTTLE_GROUP) +OBJECT_DECLARE_SIMPLE_TYPE(ThrottleGroup, THROTTLE_GROUP) const char *throttle_group_get_name(ThrottleGroupMember *tgm); diff --git a/include/chardev/char.h b/include/chardev/char.h index 5874de57ea..db42f0a8c6 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -226,9 +226,7 @@ int qemu_chr_write(Chardev *s, const uint8_t *buf, int len, bool write_all); int qemu_chr_wait_connected(Chardev *chr, Error **errp); #define TYPE_CHARDEV "chardev" -typedef struct ChardevClass ChardevClass; -DECLARE_OBJ_CHECKERS(Chardev, ChardevClass, - CHARDEV, TYPE_CHARDEV) +OBJECT_DECLARE_TYPE(Chardev, ChardevClass, CHARDEV) #define TYPE_CHARDEV_NULL "chardev-null" #define TYPE_CHARDEV_MUX "chardev-mux" diff --git a/include/crypto/secret_common.h b/include/crypto/secret_common.h index daf00c3b2a..42c7ff7af6 100644 --- a/include/crypto/secret_common.h +++ b/include/crypto/secret_common.h @@ -26,7 +26,7 @@ #define TYPE_QCRYPTO_SECRET_COMMON "secret_common" OBJECT_DECLARE_TYPE(QCryptoSecretCommon, QCryptoSecretCommonClass, - qcrypto_secret_common, QCRYPTO_SECRET_COMMON) + QCRYPTO_SECRET_COMMON) struct QCryptoSecretCommon { diff --git a/include/crypto/secret_keyring.h b/include/crypto/secret_keyring.h index 73d2a8f501..3758852cb8 100644 --- a/include/crypto/secret_keyring.h +++ b/include/crypto/secret_keyring.h @@ -26,8 +26,8 @@ #include "crypto/secret_common.h" #define TYPE_QCRYPTO_SECRET_KEYRING "secret_keyring" -OBJECT_DECLARE_SIMPLE_TYPE(QCryptoSecretKeyring, qcrypto_secret_keyring, - QCRYPTO_SECRET_KEYRING, QCryptoSecretCommonClass) +OBJECT_DECLARE_SIMPLE_TYPE(QCryptoSecretKeyring, + QCRYPTO_SECRET_KEYRING) struct QCryptoSecretKeyring { diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h index 1be05a3c0f..6bed92e8fc 100644 --- a/include/hw/acpi/generic_event_device.h +++ b/include/hw/acpi/generic_event_device.h @@ -67,13 +67,26 @@ #define ACPI_POWER_BUTTON_DEVICE "PWRB" #define TYPE_ACPI_GED "acpi-ged" -typedef struct AcpiGedState AcpiGedState; -DECLARE_INSTANCE_CHECKER(AcpiGedState, ACPI_GED, - TYPE_ACPI_GED) +OBJECT_DECLARE_SIMPLE_TYPE(AcpiGedState, ACPI_GED) + +#define TYPE_ACPI_GED_X86 "acpi-ged-x86" +#define ACPI_GED_X86(obj) \ + OBJECT_CHECK(AcpiGedX86State, (obj), TYPE_ACPI_GED_X86) #define ACPI_GED_EVT_SEL_OFFSET 0x0 #define ACPI_GED_EVT_SEL_LEN 0x4 +#define ACPI_GED_REG_SLEEP_CTL 0x00 +#define ACPI_GED_REG_SLEEP_STS 0x01 +#define ACPI_GED_REG_RESET 0x02 +#define ACPI_GED_REG_COUNT 0x03 + +/* ACPI_GED_REG_RESET value for reset*/ +#define ACPI_GED_RESET_VALUE 0x42 + +/* ACPI_GED_REG_SLEEP_CTL.SLP_TYP value for S5 (aka poweroff) */ +#define ACPI_GED_SLP_TYP_S5 0x05 + #define GED_DEVICE "GED" #define AML_GED_EVT_REG "EREG" #define AML_GED_EVT_SEL "ESEL" @@ -89,6 +102,7 @@ DECLARE_INSTANCE_CHECKER(AcpiGedState, ACPI_GED, typedef struct GEDState { MemoryRegion evt; + MemoryRegion regs; uint32_t sel; } GEDState; @@ -104,5 +118,6 @@ struct AcpiGedState { void build_ged_aml(Aml *table, const char* name, HotplugHandler *hotplug_dev, uint32_t ged_irq, AmlRegionSpace rs, hwaddr ged_base); +void acpi_dsdt_add_power_button(Aml *scope); #endif diff --git a/include/hw/acpi/vmgenid.h b/include/hw/acpi/vmgenid.h index aff574df5f..d50fbacb8e 100644 --- a/include/hw/acpi/vmgenid.h +++ b/include/hw/acpi/vmgenid.h @@ -16,9 +16,7 @@ * OVMF SDT Header Probe Supressor */ -typedef struct VmGenIdState VmGenIdState; -DECLARE_INSTANCE_CHECKER(VmGenIdState, VMGENID, - TYPE_VMGENID) +OBJECT_DECLARE_SIMPLE_TYPE(VmGenIdState, VMGENID) struct VmGenIdState { DeviceClass parent_obj; diff --git a/include/hw/adc/stm32f2xx_adc.h b/include/hw/adc/stm32f2xx_adc.h index 6a4f8e955b..42b48981f2 100644 --- a/include/hw/adc/stm32f2xx_adc.h +++ b/include/hw/adc/stm32f2xx_adc.h @@ -59,9 +59,7 @@ #define ADC_COMMON_ADDRESS 0x100 #define TYPE_STM32F2XX_ADC "stm32f2xx-adc" -typedef struct STM32F2XXADCState STM32F2XXADCState; -DECLARE_INSTANCE_CHECKER(STM32F2XXADCState, STM32F2XX_ADC, - TYPE_STM32F2XX_ADC) +OBJECT_DECLARE_SIMPLE_TYPE(STM32F2XXADCState, STM32F2XX_ADC) struct STM32F2XXADCState { /* <private> */ diff --git a/include/hw/arm/allwinner-a10.h b/include/hw/arm/allwinner-a10.h index d13b6cf50f..a76dc7b84d 100644 --- a/include/hw/arm/allwinner-a10.h +++ b/include/hw/arm/allwinner-a10.h @@ -22,9 +22,7 @@ #define AW_A10_NUM_USB 2 #define TYPE_AW_A10 "allwinner-a10" -typedef struct AwA10State AwA10State; -DECLARE_INSTANCE_CHECKER(AwA10State, AW_A10, - TYPE_AW_A10) +OBJECT_DECLARE_SIMPLE_TYPE(AwA10State, AW_A10) struct AwA10State { /*< private >*/ diff --git a/include/hw/arm/allwinner-h3.h b/include/hw/arm/allwinner-h3.h index a93e019521..cc308a5d2c 100644 --- a/include/hw/arm/allwinner-h3.h +++ b/include/hw/arm/allwinner-h3.h @@ -106,9 +106,7 @@ enum { #define TYPE_AW_H3 "allwinner-h3" /** Convert input object to Allwinner H3 state object */ -typedef struct AwH3State AwH3State; -DECLARE_INSTANCE_CHECKER(AwH3State, AW_H3, - TYPE_AW_H3) +OBJECT_DECLARE_SIMPLE_TYPE(AwH3State, AW_H3) /** @} */ diff --git a/include/hw/arm/armsse.h b/include/hw/arm/armsse.h index b844ef6bc0..77f86771c3 100644 --- a/include/hw/arm/armsse.h +++ b/include/hw/arm/armsse.h @@ -109,7 +109,7 @@ #define TYPE_ARM_SSE "arm-sse" OBJECT_DECLARE_TYPE(ARMSSE, ARMSSEClass, - arm_sse, ARM_SSE) + ARM_SSE) /* * These type names are for specific IoTKit subsystems; other than diff --git a/include/hw/arm/armv7m.h b/include/hw/arm/armv7m.h index dcb891d9cc..0791dcb68a 100644 --- a/include/hw/arm/armv7m.h +++ b/include/hw/arm/armv7m.h @@ -16,9 +16,7 @@ #include "qom/object.h" #define TYPE_BITBAND "ARM,bitband-memory" -typedef struct BitBandState BitBandState; -DECLARE_INSTANCE_CHECKER(BitBandState, BITBAND, - TYPE_BITBAND) +OBJECT_DECLARE_SIMPLE_TYPE(BitBandState, BITBAND) struct BitBandState { /*< private >*/ @@ -32,9 +30,7 @@ struct BitBandState { }; #define TYPE_ARMV7M "armv7m" -typedef struct ARMv7MState ARMv7MState; -DECLARE_INSTANCE_CHECKER(ARMv7MState, ARMV7M, - TYPE_ARMV7M) +OBJECT_DECLARE_SIMPLE_TYPE(ARMv7MState, ARMV7M) #define ARMV7M_NUM_BITBANDS 2 diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h index 05c7d53df3..11cfe6e358 100644 --- a/include/hw/arm/aspeed_soc.h +++ b/include/hw/arm/aspeed_soc.h @@ -62,12 +62,9 @@ struct AspeedSoCState { AspeedSDHCIState sdhci; AspeedSDHCIState emmc; }; -typedef struct AspeedSoCState AspeedSoCState; #define TYPE_ASPEED_SOC "aspeed-soc" -typedef struct AspeedSoCClass AspeedSoCClass; -DECLARE_OBJ_CHECKERS(AspeedSoCState, AspeedSoCClass, - ASPEED_SOC, TYPE_ASPEED_SOC) +OBJECT_DECLARE_TYPE(AspeedSoCState, AspeedSoCClass, ASPEED_SOC) struct AspeedSoCClass { DeviceClass parent_class; diff --git a/include/hw/arm/bcm2835_peripherals.h b/include/hw/arm/bcm2835_peripherals.h index b4d3ae121a..13d7c4c553 100644 --- a/include/hw/arm/bcm2835_peripherals.h +++ b/include/hw/arm/bcm2835_peripherals.h @@ -32,9 +32,7 @@ #include "qom/object.h" #define TYPE_BCM2835_PERIPHERALS "bcm2835-peripherals" -typedef struct BCM2835PeripheralState BCM2835PeripheralState; -DECLARE_INSTANCE_CHECKER(BCM2835PeripheralState, BCM2835_PERIPHERALS, - TYPE_BCM2835_PERIPHERALS) +OBJECT_DECLARE_SIMPLE_TYPE(BCM2835PeripheralState, BCM2835_PERIPHERALS) struct BCM2835PeripheralState { /*< private >*/ diff --git a/include/hw/arm/bcm2836.h b/include/hw/arm/bcm2836.h index 181d9563d0..428c15d316 100644 --- a/include/hw/arm/bcm2836.h +++ b/include/hw/arm/bcm2836.h @@ -18,10 +18,7 @@ #include "qom/object.h" #define TYPE_BCM283X "bcm283x" -typedef struct BCM283XClass BCM283XClass; -typedef struct BCM283XState BCM283XState; -DECLARE_OBJ_CHECKERS(BCM283XState, BCM283XClass, - BCM283X, TYPE_BCM283X) +OBJECT_DECLARE_TYPE(BCM283XState, BCM283XClass, BCM283X) #define BCM283X_NCPUS 4 diff --git a/include/hw/arm/digic.h b/include/hw/arm/digic.h index f3ba398914..8f2735c284 100644 --- a/include/hw/arm/digic.h +++ b/include/hw/arm/digic.h @@ -25,9 +25,7 @@ #define TYPE_DIGIC "digic" -typedef struct DigicState DigicState; -DECLARE_INSTANCE_CHECKER(DigicState, DIGIC, - TYPE_DIGIC) +OBJECT_DECLARE_SIMPLE_TYPE(DigicState, DIGIC) #define DIGIC4_NB_TIMERS 3 diff --git a/include/hw/arm/exynos4210.h b/include/hw/arm/exynos4210.h index c2de1dc102..60b9e126f5 100644 --- a/include/hw/arm/exynos4210.h +++ b/include/hw/arm/exynos4210.h @@ -103,11 +103,9 @@ struct Exynos4210State { I2CBus *i2c_if[EXYNOS4210_I2C_NUMBER]; qemu_or_irq pl330_irq_orgate[EXYNOS4210_NUM_DMA]; }; -typedef struct Exynos4210State Exynos4210State; #define TYPE_EXYNOS4210_SOC "exynos4210" -DECLARE_INSTANCE_CHECKER(Exynos4210State, EXYNOS4210_SOC, - TYPE_EXYNOS4210_SOC) +OBJECT_DECLARE_SIMPLE_TYPE(Exynos4210State, EXYNOS4210_SOC) void exynos4210_write_secondary(ARMCPU *cpu, const struct arm_boot_info *info); diff --git a/include/hw/arm/fsl-imx25.h b/include/hw/arm/fsl-imx25.h index e239505724..971f35dd16 100644 --- a/include/hw/arm/fsl-imx25.h +++ b/include/hw/arm/fsl-imx25.h @@ -35,9 +35,7 @@ #include "qom/object.h" #define TYPE_FSL_IMX25 "fsl,imx25" -typedef struct FslIMX25State FslIMX25State; -DECLARE_INSTANCE_CHECKER(FslIMX25State, FSL_IMX25, - TYPE_FSL_IMX25) +OBJECT_DECLARE_SIMPLE_TYPE(FslIMX25State, FSL_IMX25) #define FSL_IMX25_NUM_UARTS 5 #define FSL_IMX25_NUM_GPTS 4 diff --git a/include/hw/arm/fsl-imx31.h b/include/hw/arm/fsl-imx31.h index 64b4ca07b7..b9792d58ae 100644 --- a/include/hw/arm/fsl-imx31.h +++ b/include/hw/arm/fsl-imx31.h @@ -31,9 +31,7 @@ #include "qom/object.h" #define TYPE_FSL_IMX31 "fsl,imx31" -typedef struct FslIMX31State FslIMX31State; -DECLARE_INSTANCE_CHECKER(FslIMX31State, FSL_IMX31, - TYPE_FSL_IMX31) +OBJECT_DECLARE_SIMPLE_TYPE(FslIMX31State, FSL_IMX31) #define FSL_IMX31_NUM_UARTS 2 #define FSL_IMX31_NUM_EPITS 2 diff --git a/include/hw/arm/fsl-imx6.h b/include/hw/arm/fsl-imx6.h index 602b9aff36..29cc425acc 100644 --- a/include/hw/arm/fsl-imx6.h +++ b/include/hw/arm/fsl-imx6.h @@ -37,9 +37,7 @@ #include "qom/object.h" #define TYPE_FSL_IMX6 "fsl,imx6" -typedef struct FslIMX6State FslIMX6State; -DECLARE_INSTANCE_CHECKER(FslIMX6State, FSL_IMX6, - TYPE_FSL_IMX6) +OBJECT_DECLARE_SIMPLE_TYPE(FslIMX6State, FSL_IMX6) #define FSL_IMX6_NUM_CPUS 4 #define FSL_IMX6_NUM_UARTS 5 diff --git a/include/hw/arm/fsl-imx6ul.h b/include/hw/arm/fsl-imx6ul.h index e4862fdb2c..f8ebfba4f9 100644 --- a/include/hw/arm/fsl-imx6ul.h +++ b/include/hw/arm/fsl-imx6ul.h @@ -41,9 +41,7 @@ #include "qom/object.h" #define TYPE_FSL_IMX6UL "fsl,imx6ul" -typedef struct FslIMX6ULState FslIMX6ULState; -DECLARE_INSTANCE_CHECKER(FslIMX6ULState, FSL_IMX6UL, - TYPE_FSL_IMX6UL) +OBJECT_DECLARE_SIMPLE_TYPE(FslIMX6ULState, FSL_IMX6UL) enum FslIMX6ULConfiguration { FSL_IMX6UL_NUM_CPUS = 1, diff --git a/include/hw/arm/fsl-imx7.h b/include/hw/arm/fsl-imx7.h index 434d1d0641..161fdc36da 100644 --- a/include/hw/arm/fsl-imx7.h +++ b/include/hw/arm/fsl-imx7.h @@ -42,9 +42,7 @@ #include "qom/object.h" #define TYPE_FSL_IMX7 "fsl,imx7" -typedef struct FslIMX7State FslIMX7State; -DECLARE_INSTANCE_CHECKER(FslIMX7State, FSL_IMX7, - TYPE_FSL_IMX7) +OBJECT_DECLARE_SIMPLE_TYPE(FslIMX7State, FSL_IMX7) enum FslIMX7Configuration { FSL_IMX7_NUM_CPUS = 2, diff --git a/include/hw/arm/msf2-soc.h b/include/hw/arm/msf2-soc.h index 9b93d0d64e..d406184685 100644 --- a/include/hw/arm/msf2-soc.h +++ b/include/hw/arm/msf2-soc.h @@ -33,9 +33,7 @@ #include "qom/object.h" #define TYPE_MSF2_SOC "msf2-soc" -typedef struct MSF2State MSF2State; -DECLARE_INSTANCE_CHECKER(MSF2State, MSF2_SOC, - TYPE_MSF2_SOC) +OBJECT_DECLARE_SIMPLE_TYPE(MSF2State, MSF2_SOC) #define MSF2_NUM_SPIS 2 #define MSF2_NUM_UARTS 2 diff --git a/include/hw/arm/nrf51_soc.h b/include/hw/arm/nrf51_soc.h index b69492b29d..f8a6725b77 100644 --- a/include/hw/arm/nrf51_soc.h +++ b/include/hw/arm/nrf51_soc.h @@ -20,9 +20,7 @@ #include "qom/object.h" #define TYPE_NRF51_SOC "nrf51-soc" -typedef struct NRF51State NRF51State; -DECLARE_INSTANCE_CHECKER(NRF51State, NRF51_SOC, - TYPE_NRF51_SOC) +OBJECT_DECLARE_SIMPLE_TYPE(NRF51State, NRF51_SOC) #define NRF51_NUM_TIMERS 3 diff --git a/include/hw/arm/omap.h b/include/hw/arm/omap.h index 0dbf1712f4..ff6a173f8a 100644 --- a/include/hw/arm/omap.h +++ b/include/hw/arm/omap.h @@ -94,9 +94,7 @@ void omap_intc_set_fclk(omap_intr_handler *intc, omap_clk clk); /* omap_i2c.c */ #define TYPE_OMAP_I2C "omap_i2c" -typedef struct OMAPI2CState OMAPI2CState; -DECLARE_INSTANCE_CHECKER(OMAPI2CState, OMAP_I2C, - TYPE_OMAP_I2C) +OBJECT_DECLARE_SIMPLE_TYPE(OMAPI2CState, OMAP_I2C) /* TODO: clock framework (see above) */ diff --git a/include/hw/arm/pxa.h b/include/hw/arm/pxa.h index 9046876134..1095504b86 100644 --- a/include/hw/arm/pxa.h +++ b/include/hw/arm/pxa.h @@ -88,9 +88,7 @@ void pxa2xx_lcd_vsync_notifier(PXA2xxLCDState *s, qemu_irq handler); /* pxa2xx_mmci.c */ #define TYPE_PXA2XX_MMCI "pxa2xx-mmci" -typedef struct PXA2xxMMCIState PXA2xxMMCIState; -DECLARE_INSTANCE_CHECKER(PXA2xxMMCIState, PXA2XX_MMCI, - TYPE_PXA2XX_MMCI) +OBJECT_DECLARE_SIMPLE_TYPE(PXA2xxMMCIState, PXA2XX_MMCI) PXA2xxMMCIState *pxa2xx_mmci_init(MemoryRegion *sysmem, hwaddr base, @@ -100,9 +98,7 @@ void pxa2xx_mmci_handlers(PXA2xxMMCIState *s, qemu_irq readonly, /* pxa2xx_pcmcia.c */ #define TYPE_PXA2XX_PCMCIA "pxa2xx-pcmcia" -typedef struct PXA2xxPCMCIAState PXA2xxPCMCIAState; -DECLARE_INSTANCE_CHECKER(PXA2xxPCMCIAState, PXA2XX_PCMCIA, - TYPE_PXA2XX_PCMCIA) +OBJECT_DECLARE_SIMPLE_TYPE(PXA2xxPCMCIAState, PXA2XX_PCMCIA) PXA2xxPCMCIAState *pxa2xx_pcmcia_init(MemoryRegion *sysmem, hwaddr base); @@ -130,13 +126,10 @@ I2CBus *pxa2xx_i2c_bus(PXA2xxI2CState *s); #define TYPE_PXA2XX_I2C "pxa2xx_i2c" typedef struct PXA2xxI2SState PXA2xxI2SState; -DECLARE_INSTANCE_CHECKER(PXA2xxI2CState, PXA2XX_I2C, - TYPE_PXA2XX_I2C) +OBJECT_DECLARE_SIMPLE_TYPE(PXA2xxI2CState, PXA2XX_I2C) #define TYPE_PXA2XX_FIR "pxa2xx-fir" -typedef struct PXA2xxFIrState PXA2xxFIrState; -DECLARE_INSTANCE_CHECKER(PXA2xxFIrState, PXA2XX_FIR, - TYPE_PXA2XX_FIR) +OBJECT_DECLARE_SIMPLE_TYPE(PXA2xxFIrState, PXA2XX_FIR) typedef struct { ARMCPU *cpu; diff --git a/include/hw/arm/smmu-common.h b/include/hw/arm/smmu-common.h index 54d0872fd8..706be3c6d0 100644 --- a/include/hw/arm/smmu-common.h +++ b/include/hw/arm/smmu-common.h @@ -118,7 +118,6 @@ struct SMMUState { uint8_t bus_num; PCIBus *primary_bus; }; -typedef struct SMMUState SMMUState; struct SMMUBaseClass { /* <private> */ @@ -129,11 +128,9 @@ struct SMMUBaseClass { DeviceRealize parent_realize; }; -typedef struct SMMUBaseClass SMMUBaseClass; #define TYPE_ARM_SMMU "arm-smmu" -DECLARE_OBJ_CHECKERS(SMMUState, SMMUBaseClass, - ARM_SMMU, TYPE_ARM_SMMU) +OBJECT_DECLARE_TYPE(SMMUState, SMMUBaseClass, ARM_SMMU) /* Return the SMMUPciBus handle associated to a PCI bus number */ SMMUPciBus *smmu_find_smmu_pcibus(SMMUState *s, uint8_t bus_num); diff --git a/include/hw/arm/smmuv3.h b/include/hw/arm/smmuv3.h index 2a3f6dd197..c641e60735 100644 --- a/include/hw/arm/smmuv3.h +++ b/include/hw/arm/smmuv3.h @@ -63,7 +63,6 @@ struct SMMUv3State { qemu_irq irq[4]; QemuMutex mutex; }; -typedef struct SMMUv3State SMMUv3State; typedef enum { SMMU_IRQ_EVTQ, @@ -80,10 +79,8 @@ struct SMMUv3Class { DeviceRealize parent_realize; DeviceReset parent_reset; }; -typedef struct SMMUv3Class SMMUv3Class; #define TYPE_ARM_SMMUV3 "arm-smmuv3" -DECLARE_OBJ_CHECKERS(SMMUv3State, SMMUv3Class, - ARM_SMMUV3, TYPE_ARM_SMMUV3) +OBJECT_DECLARE_TYPE(SMMUv3State, SMMUv3Class, ARM_SMMUV3) #endif diff --git a/include/hw/arm/stm32f205_soc.h b/include/hw/arm/stm32f205_soc.h index 9c2f4818a6..985ff63aa9 100644 --- a/include/hw/arm/stm32f205_soc.h +++ b/include/hw/arm/stm32f205_soc.h @@ -35,9 +35,7 @@ #include "qom/object.h" #define TYPE_STM32F205_SOC "stm32f205-soc" -typedef struct STM32F205State STM32F205State; -DECLARE_INSTANCE_CHECKER(STM32F205State, STM32F205_SOC, - TYPE_STM32F205_SOC) +OBJECT_DECLARE_SIMPLE_TYPE(STM32F205State, STM32F205_SOC) #define STM_NUM_USARTS 6 #define STM_NUM_TIMERS 4 diff --git a/include/hw/arm/stm32f405_soc.h b/include/hw/arm/stm32f405_soc.h index f1a22763f4..347105e709 100644 --- a/include/hw/arm/stm32f405_soc.h +++ b/include/hw/arm/stm32f405_soc.h @@ -36,9 +36,7 @@ #include "qom/object.h" #define TYPE_STM32F405_SOC "stm32f405-soc" -typedef struct STM32F405State STM32F405State; -DECLARE_INSTANCE_CHECKER(STM32F405State, STM32F405_SOC, - TYPE_STM32F405_SOC) +OBJECT_DECLARE_SIMPLE_TYPE(STM32F405State, STM32F405_SOC) #define STM_NUM_USARTS 7 #define STM_NUM_TIMERS 4 diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index 392b0bd571..d018a4f297 100644 --- a/include/hw/arm/virt.h +++ b/include/hw/arm/virt.h @@ -128,7 +128,6 @@ struct VirtMachineClass { bool kvm_no_adjvtime; bool acpi_expose_flash; }; -typedef struct VirtMachineClass VirtMachineClass; struct VirtMachineState { MachineState parent; @@ -165,13 +164,11 @@ struct VirtMachineState { DeviceState *acpi_dev; Notifier powerdown_notifier; }; -typedef struct VirtMachineState VirtMachineState; #define VIRT_ECAM_ID(high) (high ? VIRT_HIGH_PCIE_ECAM : VIRT_PCIE_ECAM) #define TYPE_VIRT_MACHINE MACHINE_TYPE_NAME("virt") -DECLARE_OBJ_CHECKERS(VirtMachineState, VirtMachineClass, - VIRT_MACHINE, TYPE_VIRT_MACHINE) +OBJECT_DECLARE_TYPE(VirtMachineState, VirtMachineClass, VIRT_MACHINE) void virt_acpi_setup(VirtMachineState *vms); bool virt_is_acpi_enabled(VirtMachineState *vms); diff --git a/include/hw/arm/xlnx-versal.h b/include/hw/arm/xlnx-versal.h index eaa9023fd6..8ce8e63b56 100644 --- a/include/hw/arm/xlnx-versal.h +++ b/include/hw/arm/xlnx-versal.h @@ -23,9 +23,7 @@ #include "qom/object.h" #define TYPE_XLNX_VERSAL "xlnx-versal" -typedef struct Versal Versal; -DECLARE_INSTANCE_CHECKER(Versal, XLNX_VERSAL, - TYPE_XLNX_VERSAL) +OBJECT_DECLARE_SIMPLE_TYPE(Versal, XLNX_VERSAL) #define XLNX_VERSAL_NR_ACPUS 2 #define XLNX_VERSAL_NR_UARTS 2 diff --git a/include/hw/arm/xlnx-zynqmp.h b/include/hw/arm/xlnx-zynqmp.h index 4cc97b4610..567d0dba09 100644 --- a/include/hw/arm/xlnx-zynqmp.h +++ b/include/hw/arm/xlnx-zynqmp.h @@ -35,9 +35,7 @@ #include "qom/object.h" #define TYPE_XLNX_ZYNQMP "xlnx,zynqmp" -typedef struct XlnxZynqMPState XlnxZynqMPState; -DECLARE_INSTANCE_CHECKER(XlnxZynqMPState, XLNX_ZYNQMP, - TYPE_XLNX_ZYNQMP) +OBJECT_DECLARE_SIMPLE_TYPE(XlnxZynqMPState, XLNX_ZYNQMP) #define XLNX_ZYNQMP_NUM_APU_CPUS 4 #define XLNX_ZYNQMP_NUM_RPU_CPUS 2 diff --git a/include/hw/block/flash.h b/include/hw/block/flash.h index 3e26303705..7dde0adcee 100644 --- a/include/hw/block/flash.h +++ b/include/hw/block/flash.h @@ -9,9 +9,7 @@ /* pflash_cfi01.c */ #define TYPE_PFLASH_CFI01 "cfi.pflash01" -typedef struct PFlashCFI01 PFlashCFI01; -DECLARE_INSTANCE_CHECKER(PFlashCFI01, PFLASH_CFI01, - TYPE_PFLASH_CFI01) +OBJECT_DECLARE_SIMPLE_TYPE(PFlashCFI01, PFLASH_CFI01) PFlashCFI01 *pflash_cfi01_register(hwaddr base, @@ -30,9 +28,7 @@ void pflash_cfi01_legacy_drive(PFlashCFI01 *dev, DriveInfo *dinfo); /* pflash_cfi02.c */ #define TYPE_PFLASH_CFI02 "cfi.pflash02" -typedef struct PFlashCFI02 PFlashCFI02; -DECLARE_INSTANCE_CHECKER(PFlashCFI02, PFLASH_CFI02, - TYPE_PFLASH_CFI02) +OBJECT_DECLARE_SIMPLE_TYPE(PFlashCFI02, PFLASH_CFI02) PFlashCFI02 *pflash_cfi02_register(hwaddr base, diff --git a/include/hw/block/swim.h b/include/hw/block/swim.h index 8287da7c30..5a49029543 100644 --- a/include/hw/block/swim.h +++ b/include/hw/block/swim.h @@ -17,13 +17,10 @@ #define SWIM_MAX_FD 2 -typedef struct SWIMDrive SWIMDrive; -typedef struct SWIMBus SWIMBus; typedef struct SWIMCtrl SWIMCtrl; #define TYPE_SWIM_DRIVE "swim-drive" -DECLARE_INSTANCE_CHECKER(SWIMDrive, SWIM_DRIVE, - TYPE_SWIM_DRIVE) +OBJECT_DECLARE_SIMPLE_TYPE(SWIMDrive, SWIM_DRIVE) struct SWIMDrive { DeviceState qdev; @@ -32,8 +29,7 @@ struct SWIMDrive { }; #define TYPE_SWIM_BUS "swim-bus" -DECLARE_INSTANCE_CHECKER(SWIMBus, SWIM_BUS, - TYPE_SWIM_BUS) +OBJECT_DECLARE_SIMPLE_TYPE(SWIMBus, SWIM_BUS) struct SWIMBus { BusState bus; @@ -70,9 +66,7 @@ struct SWIMCtrl { }; #define TYPE_SWIM "swim" -typedef struct Swim Swim; -DECLARE_INSTANCE_CHECKER(Swim, SWIM, - TYPE_SWIM) +OBJECT_DECLARE_SIMPLE_TYPE(Swim, SWIM) struct Swim { SysBusDevice parent_obj; diff --git a/include/hw/boards.h b/include/hw/boards.h index 795910d01b..56aa1ca335 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -21,8 +21,7 @@ #define TYPE_MACHINE "machine" #undef MACHINE /* BSD defines it and QEMU does not use it */ -DECLARE_OBJ_CHECKERS(MachineState, MachineClass, - MACHINE, TYPE_MACHINE) +OBJECT_DECLARE_TYPE(MachineState, MachineClass, MACHINE) extern MachineState *current_machine; diff --git a/include/hw/char/avr_usart.h b/include/hw/char/avr_usart.h index 5202f152b0..bb57532403 100644 --- a/include/hw/char/avr_usart.h +++ b/include/hw/char/avr_usart.h @@ -58,9 +58,7 @@ #define USART_CSRC_CSZ0 (1 << 1) #define TYPE_AVR_USART "avr-usart" -typedef struct AVRUsartState AVRUsartState; -DECLARE_INSTANCE_CHECKER(AVRUsartState, AVR_USART, - TYPE_AVR_USART) +OBJECT_DECLARE_SIMPLE_TYPE(AVRUsartState, AVR_USART) struct AVRUsartState { /* <private> */ diff --git a/include/hw/char/bcm2835_aux.h b/include/hw/char/bcm2835_aux.h index a08795c47f..9e081793a0 100644 --- a/include/hw/char/bcm2835_aux.h +++ b/include/hw/char/bcm2835_aux.h @@ -14,9 +14,7 @@ #include "qom/object.h" #define TYPE_BCM2835_AUX "bcm2835-aux" -typedef struct BCM2835AuxState BCM2835AuxState; -DECLARE_INSTANCE_CHECKER(BCM2835AuxState, BCM2835_AUX, - TYPE_BCM2835_AUX) +OBJECT_DECLARE_SIMPLE_TYPE(BCM2835AuxState, BCM2835_AUX) #define BCM2835_AUX_RX_FIFO_LEN 8 diff --git a/include/hw/char/cadence_uart.h b/include/hw/char/cadence_uart.h index 1734f53541..e7f7cd8468 100644 --- a/include/hw/char/cadence_uart.h +++ b/include/hw/char/cadence_uart.h @@ -32,9 +32,7 @@ #define CADENCE_UART_R_MAX (0x48/4) #define TYPE_CADENCE_UART "cadence_uart" -typedef struct CadenceUARTState CadenceUARTState; -DECLARE_INSTANCE_CHECKER(CadenceUARTState, CADENCE_UART, - TYPE_CADENCE_UART) +OBJECT_DECLARE_SIMPLE_TYPE(CadenceUARTState, CADENCE_UART) struct CadenceUARTState { /*< private >*/ diff --git a/include/hw/char/cmsdk-apb-uart.h b/include/hw/char/cmsdk-apb-uart.h index 2c3869aa16..9daff0eeee 100644 --- a/include/hw/char/cmsdk-apb-uart.h +++ b/include/hw/char/cmsdk-apb-uart.h @@ -18,9 +18,7 @@ #include "qom/object.h" #define TYPE_CMSDK_APB_UART "cmsdk-apb-uart" -typedef struct CMSDKAPBUART CMSDKAPBUART; -DECLARE_INSTANCE_CHECKER(CMSDKAPBUART, CMSDK_APB_UART, - TYPE_CMSDK_APB_UART) +OBJECT_DECLARE_SIMPLE_TYPE(CMSDKAPBUART, CMSDK_APB_UART) struct CMSDKAPBUART { /*< private >*/ diff --git a/include/hw/char/digic-uart.h b/include/hw/char/digic-uart.h index 01d406833d..f710a1a099 100644 --- a/include/hw/char/digic-uart.h +++ b/include/hw/char/digic-uart.h @@ -23,9 +23,7 @@ #include "qom/object.h" #define TYPE_DIGIC_UART "digic-uart" -typedef struct DigicUartState DigicUartState; -DECLARE_INSTANCE_CHECKER(DigicUartState, DIGIC_UART, - TYPE_DIGIC_UART) +OBJECT_DECLARE_SIMPLE_TYPE(DigicUartState, DIGIC_UART) enum { R_TX = 0x00, diff --git a/include/hw/char/escc.h b/include/hw/char/escc.h index 5eaec507da..7e9482dee2 100644 --- a/include/hw/char/escc.h +++ b/include/hw/char/escc.h @@ -11,9 +11,7 @@ #define TYPE_ESCC "escc" #define ESCC_SIZE 4 -typedef struct ESCCState ESCCState; -DECLARE_INSTANCE_CHECKER(ESCCState, ESCC, - TYPE_ESCC) +OBJECT_DECLARE_SIMPLE_TYPE(ESCCState, ESCC) typedef enum { escc_chn_a, escc_chn_b, diff --git a/include/hw/char/ibex_uart.h b/include/hw/char/ibex_uart.h index 36eb75fc4c..03d19e3f6f 100644 --- a/include/hw/char/ibex_uart.h +++ b/include/hw/char/ibex_uart.h @@ -70,9 +70,7 @@ REG32(TIMEOUT_CTRL, 0x2c) #define IBEX_UART_CLOCK 50000000 /* 50MHz clock */ #define TYPE_IBEX_UART "ibex-uart" -typedef struct IbexUartState IbexUartState; -DECLARE_INSTANCE_CHECKER(IbexUartState, IBEX_UART, - TYPE_IBEX_UART) +OBJECT_DECLARE_SIMPLE_TYPE(IbexUartState, IBEX_UART) struct IbexUartState { /* <private> */ diff --git a/include/hw/char/imx_serial.h b/include/hw/char/imx_serial.h index 200f1ec33a..91c9894ad5 100644 --- a/include/hw/char/imx_serial.h +++ b/include/hw/char/imx_serial.h @@ -23,9 +23,7 @@ #include "qom/object.h" #define TYPE_IMX_SERIAL "imx.serial" -typedef struct IMXSerialState IMXSerialState; -DECLARE_INSTANCE_CHECKER(IMXSerialState, IMX_SERIAL, - TYPE_IMX_SERIAL) +OBJECT_DECLARE_SIMPLE_TYPE(IMXSerialState, IMX_SERIAL) #define URXD_CHARRDY (1<<15) /* character read is valid */ #define URXD_ERR (1<<14) /* Character has error */ diff --git a/include/hw/char/nrf51_uart.h b/include/hw/char/nrf51_uart.h index 0cf3c4e328..561b6383c4 100644 --- a/include/hw/char/nrf51_uart.h +++ b/include/hw/char/nrf51_uart.h @@ -20,9 +20,7 @@ #define UART_SIZE 0x1000 #define TYPE_NRF51_UART "nrf51_soc.uart" -typedef struct NRF51UARTState NRF51UARTState; -DECLARE_INSTANCE_CHECKER(NRF51UARTState, NRF51_UART, - TYPE_NRF51_UART) +OBJECT_DECLARE_SIMPLE_TYPE(NRF51UARTState, NRF51_UART) REG32(UART_STARTRX, 0x000) REG32(UART_STOPRX, 0x004) diff --git a/include/hw/char/pl011.h b/include/hw/char/pl011.h index 80de4ecde6..a91ea50e11 100644 --- a/include/hw/char/pl011.h +++ b/include/hw/char/pl011.h @@ -22,9 +22,7 @@ #include "qom/object.h" #define TYPE_PL011 "pl011" -typedef struct PL011State PL011State; -DECLARE_INSTANCE_CHECKER(PL011State, PL011, - TYPE_PL011) +OBJECT_DECLARE_SIMPLE_TYPE(PL011State, PL011) /* This shares the same struct (and cast macro) as the base pl011 device */ #define TYPE_PL011_LUMINARY "pl011_luminary" diff --git a/include/hw/char/serial.h b/include/hw/char/serial.h index 264f529a7f..db4f9af18c 100644 --- a/include/hw/char/serial.h +++ b/include/hw/char/serial.h @@ -89,14 +89,12 @@ struct SerialMM { uint8_t regshift; uint8_t endianness; }; -typedef struct SerialMM SerialMM; struct SerialIO { SysBusDevice parent; SerialState serial; }; -typedef struct SerialIO SerialIO; extern const VMStateDescription vmstate_serial; extern const MemoryRegionOps serial_io_ops; @@ -104,16 +102,13 @@ extern const MemoryRegionOps serial_io_ops; void serial_set_frequency(SerialState *s, uint32_t frequency); #define TYPE_SERIAL "serial" -DECLARE_INSTANCE_CHECKER(SerialState, SERIAL, - TYPE_SERIAL) +OBJECT_DECLARE_SIMPLE_TYPE(SerialState, SERIAL) #define TYPE_SERIAL_MM "serial-mm" -DECLARE_INSTANCE_CHECKER(SerialMM, SERIAL_MM, - TYPE_SERIAL_MM) +OBJECT_DECLARE_SIMPLE_TYPE(SerialMM, SERIAL_MM) #define TYPE_SERIAL_IO "serial-io" -DECLARE_INSTANCE_CHECKER(SerialIO, SERIAL_IO, - TYPE_SERIAL_IO) +OBJECT_DECLARE_SIMPLE_TYPE(SerialIO, SERIAL_IO) SerialMM *serial_mm_init(MemoryRegion *address_space, hwaddr base, int regshift, diff --git a/include/hw/char/sifive_uart.h b/include/hw/char/sifive_uart.h index 65668825a3..3e962be659 100644 --- a/include/hw/char/sifive_uart.h +++ b/include/hw/char/sifive_uart.h @@ -22,6 +22,7 @@ #include "chardev/char-fe.h" #include "hw/sysbus.h" +#include "qom/object.h" enum { SIFIVE_UART_TXFIFO = 0, @@ -51,10 +52,11 @@ enum { #define TYPE_SIFIVE_UART "riscv.sifive.uart" -#define SIFIVE_UART(obj) \ - OBJECT_CHECK(SiFiveUARTState, (obj), TYPE_SIFIVE_UART) +typedef struct SiFiveUARTState SiFiveUARTState; +DECLARE_INSTANCE_CHECKER(SiFiveUARTState, SIFIVE_UART, + TYPE_SIFIVE_UART) -typedef struct SiFiveUARTState { +struct SiFiveUARTState { /*< private >*/ SysBusDevice parent_obj; @@ -69,7 +71,7 @@ typedef struct SiFiveUARTState { uint32_t txctrl; uint32_t rxctrl; uint32_t div; -} SiFiveUARTState; +}; SiFiveUARTState *sifive_uart_create(MemoryRegion *address_space, hwaddr base, Chardev *chr, qemu_irq irq); diff --git a/include/hw/char/stm32f2xx_usart.h b/include/hw/char/stm32f2xx_usart.h index 1670c076d4..65bcc85470 100644 --- a/include/hw/char/stm32f2xx_usart.h +++ b/include/hw/char/stm32f2xx_usart.h @@ -54,9 +54,7 @@ #define USART_CR1_RE (1 << 2) #define TYPE_STM32F2XX_USART "stm32f2xx-usart" -typedef struct STM32F2XXUsartState STM32F2XXUsartState; -DECLARE_INSTANCE_CHECKER(STM32F2XXUsartState, STM32F2XX_USART, - TYPE_STM32F2XX_USART) +OBJECT_DECLARE_SIMPLE_TYPE(STM32F2XXUsartState, STM32F2XX_USART) struct STM32F2XXUsartState { /* <private> */ diff --git a/include/hw/clock.h b/include/hw/clock.h index b524509b47..d357594df9 100644 --- a/include/hw/clock.h +++ b/include/hw/clock.h @@ -18,9 +18,7 @@ #include "qemu/queue.h" #define TYPE_CLOCK "clock" -typedef struct Clock Clock; -DECLARE_INSTANCE_CHECKER(Clock, CLOCK, - TYPE_CLOCK) +OBJECT_DECLARE_SIMPLE_TYPE(Clock, CLOCK) typedef void ClockCallback(void *opaque); diff --git a/include/hw/core/generic-loader.h b/include/hw/core/generic-loader.h index 8e86532df6..19d87b39c8 100644 --- a/include/hw/core/generic-loader.h +++ b/include/hw/core/generic-loader.h @@ -40,10 +40,8 @@ struct GenericLoaderState { bool data_be; bool set_pc; }; -typedef struct GenericLoaderState GenericLoaderState; #define TYPE_GENERIC_LOADER "loader" -DECLARE_INSTANCE_CHECKER(GenericLoaderState, GENERIC_LOADER, - TYPE_GENERIC_LOADER) +OBJECT_DECLARE_SIMPLE_TYPE(GenericLoaderState, GENERIC_LOADER) #endif diff --git a/include/hw/core/split-irq.h b/include/hw/core/split-irq.h index 76d42b29aa..ff8852f407 100644 --- a/include/hw/core/split-irq.h +++ b/include/hw/core/split-irq.h @@ -42,10 +42,8 @@ #define MAX_SPLIT_LINES 16 -typedef struct SplitIRQ SplitIRQ; -DECLARE_INSTANCE_CHECKER(SplitIRQ, SPLIT_IRQ, - TYPE_SPLIT_IRQ) +OBJECT_DECLARE_SIMPLE_TYPE(SplitIRQ, SPLIT_IRQ) struct SplitIRQ { DeviceState parent_obj; diff --git a/include/hw/cpu/a15mpcore.h b/include/hw/cpu/a15mpcore.h index 58d8ac7415..75d39e5458 100644 --- a/include/hw/cpu/a15mpcore.h +++ b/include/hw/cpu/a15mpcore.h @@ -27,9 +27,7 @@ /* A15MP private memory region. */ #define TYPE_A15MPCORE_PRIV "a15mpcore_priv" -typedef struct A15MPPrivState A15MPPrivState; -DECLARE_INSTANCE_CHECKER(A15MPPrivState, A15MPCORE_PRIV, - TYPE_A15MPCORE_PRIV) +OBJECT_DECLARE_SIMPLE_TYPE(A15MPPrivState, A15MPCORE_PRIV) struct A15MPPrivState { /*< private >*/ diff --git a/include/hw/cpu/a9mpcore.h b/include/hw/cpu/a9mpcore.h index 37e5cfce08..e0396ab6af 100644 --- a/include/hw/cpu/a9mpcore.h +++ b/include/hw/cpu/a9mpcore.h @@ -18,9 +18,7 @@ #include "qom/object.h" #define TYPE_A9MPCORE_PRIV "a9mpcore_priv" -typedef struct A9MPPrivState A9MPPrivState; -DECLARE_INSTANCE_CHECKER(A9MPPrivState, A9MPCORE_PRIV, - TYPE_A9MPCORE_PRIV) +OBJECT_DECLARE_SIMPLE_TYPE(A9MPPrivState, A9MPCORE_PRIV) struct A9MPPrivState { /*< private >*/ diff --git a/include/hw/cpu/arm11mpcore.h b/include/hw/cpu/arm11mpcore.h index 411d7e6659..2cac8c1232 100644 --- a/include/hw/cpu/arm11mpcore.h +++ b/include/hw/cpu/arm11mpcore.h @@ -17,9 +17,7 @@ #include "qom/object.h" #define TYPE_ARM11MPCORE_PRIV "arm11mpcore_priv" -typedef struct ARM11MPCorePriveState ARM11MPCorePriveState; -DECLARE_INSTANCE_CHECKER(ARM11MPCorePriveState, ARM11MPCORE_PRIV, - TYPE_ARM11MPCORE_PRIV) +OBJECT_DECLARE_SIMPLE_TYPE(ARM11MPCorePriveState, ARM11MPCORE_PRIV) struct ARM11MPCorePriveState { SysBusDevice parent_obj; diff --git a/include/hw/cpu/cluster.h b/include/hw/cpu/cluster.h index 1c807c5902..53fbf36af5 100644 --- a/include/hw/cpu/cluster.h +++ b/include/hw/cpu/cluster.h @@ -55,9 +55,7 @@ */ #define TYPE_CPU_CLUSTER "cpu-cluster" -typedef struct CPUClusterState CPUClusterState; -DECLARE_INSTANCE_CHECKER(CPUClusterState, CPU_CLUSTER, - TYPE_CPU_CLUSTER) +OBJECT_DECLARE_SIMPLE_TYPE(CPUClusterState, CPU_CLUSTER) /* * This limit is imposed by TCG, which puts the cluster ID into an diff --git a/include/hw/cpu/core.h b/include/hw/cpu/core.h index 61ea3481f8..98ab91647e 100644 --- a/include/hw/cpu/core.h +++ b/include/hw/cpu/core.h @@ -14,9 +14,7 @@ #define TYPE_CPU_CORE "cpu-core" -typedef struct CPUCore CPUCore; -DECLARE_INSTANCE_CHECKER(CPUCore, CPU_CORE, - TYPE_CPU_CORE) +OBJECT_DECLARE_SIMPLE_TYPE(CPUCore, CPU_CORE) struct CPUCore { /*< private >*/ diff --git a/include/hw/display/bcm2835_fb.h b/include/hw/display/bcm2835_fb.h index 226d77a264..38671afffd 100644 --- a/include/hw/display/bcm2835_fb.h +++ b/include/hw/display/bcm2835_fb.h @@ -17,9 +17,7 @@ #include "qom/object.h" #define TYPE_BCM2835_FB "bcm2835-fb" -typedef struct BCM2835FBState BCM2835FBState; -DECLARE_INSTANCE_CHECKER(BCM2835FBState, BCM2835_FB, - TYPE_BCM2835_FB) +OBJECT_DECLARE_SIMPLE_TYPE(BCM2835FBState, BCM2835_FB) /* * Configuration information about the fb which the guest can program diff --git a/include/hw/display/dpcd.h b/include/hw/display/dpcd.h index 09304dd1f6..a4e37abf6f 100644 --- a/include/hw/display/dpcd.h +++ b/include/hw/display/dpcd.h @@ -26,11 +26,9 @@ #define DPCD_H #include "qom/object.h" -typedef struct DPCDState DPCDState; #define TYPE_DPCD "dpcd" -DECLARE_INSTANCE_CHECKER(DPCDState, DPCD, - TYPE_DPCD) +OBJECT_DECLARE_SIMPLE_TYPE(DPCDState, DPCD) /* DCPD Revision. */ #define DPCD_REVISION 0x00 diff --git a/include/hw/display/i2c-ddc.h b/include/hw/display/i2c-ddc.h index fbabfea5a9..94b5880587 100644 --- a/include/hw/display/i2c-ddc.h +++ b/include/hw/display/i2c-ddc.h @@ -34,10 +34,8 @@ struct I2CDDCState { uint8_t edid_blob[128]; }; -typedef struct I2CDDCState I2CDDCState; #define TYPE_I2CDDC "i2c-ddc" -DECLARE_INSTANCE_CHECKER(I2CDDCState, I2CDDC, - TYPE_I2CDDC) +OBJECT_DECLARE_SIMPLE_TYPE(I2CDDCState, I2CDDC) #endif /* I2C_DDC_H */ diff --git a/include/hw/display/macfb.h b/include/hw/display/macfb.h index 0960480b75..c133fa271e 100644 --- a/include/hw/display/macfb.h +++ b/include/hw/display/macfb.h @@ -32,9 +32,7 @@ typedef struct MacfbState { } MacfbState; #define TYPE_MACFB "sysbus-macfb" -typedef struct MacfbSysBusState MacfbSysBusState; -DECLARE_INSTANCE_CHECKER(MacfbSysBusState, MACFB, - TYPE_MACFB) +OBJECT_DECLARE_SIMPLE_TYPE(MacfbSysBusState, MACFB) struct MacfbSysBusState { SysBusDevice busdev; @@ -43,10 +41,7 @@ struct MacfbSysBusState { }; #define TYPE_NUBUS_MACFB "nubus-macfb" -typedef struct MacfbNubusDeviceClass MacfbNubusDeviceClass; -typedef struct MacfbNubusState MacfbNubusState; -DECLARE_OBJ_CHECKERS(MacfbNubusState, MacfbNubusDeviceClass, - NUBUS_MACFB, TYPE_NUBUS_MACFB) +OBJECT_DECLARE_TYPE(MacfbNubusState, MacfbNubusDeviceClass, NUBUS_MACFB) struct MacfbNubusDeviceClass { DeviceClass parent_class; diff --git a/include/hw/display/xlnx_dp.h b/include/hw/display/xlnx_dp.h index 3b7d9e5a2a..8ab4733bb8 100644 --- a/include/hw/display/xlnx_dp.h +++ b/include/hw/display/xlnx_dp.h @@ -103,10 +103,8 @@ struct XlnxDPState { DPCDState *dpcd; I2CDDCState *edid; }; -typedef struct XlnxDPState XlnxDPState; #define TYPE_XLNX_DP "xlnx.v-dp" -DECLARE_INSTANCE_CHECKER(XlnxDPState, XLNX_DP, - TYPE_XLNX_DP) +OBJECT_DECLARE_SIMPLE_TYPE(XlnxDPState, XLNX_DP) #endif diff --git a/include/hw/dma/bcm2835_dma.h b/include/hw/dma/bcm2835_dma.h index b94dae779a..1d26b1d8d0 100644 --- a/include/hw/dma/bcm2835_dma.h +++ b/include/hw/dma/bcm2835_dma.h @@ -26,9 +26,7 @@ typedef struct { } BCM2835DMAChan; #define TYPE_BCM2835_DMA "bcm2835-dma" -typedef struct BCM2835DMAState BCM2835DMAState; -DECLARE_INSTANCE_CHECKER(BCM2835DMAState, BCM2835_DMA, - TYPE_BCM2835_DMA) +OBJECT_DECLARE_SIMPLE_TYPE(BCM2835DMAState, BCM2835_DMA) #define BCM2835_DMA_NCHANS 16 diff --git a/include/hw/dma/i8257.h b/include/hw/dma/i8257.h index 362ce7b8dc..f652345d65 100644 --- a/include/hw/dma/i8257.h +++ b/include/hw/dma/i8257.h @@ -6,9 +6,7 @@ #include "qom/object.h" #define TYPE_I8257 "i8257" -typedef struct I8257State I8257State; -DECLARE_INSTANCE_CHECKER(I8257State, I8257, - TYPE_I8257) +OBJECT_DECLARE_SIMPLE_TYPE(I8257State, I8257) typedef struct I8257Regs { int now[2]; diff --git a/include/hw/dma/pl080.h b/include/hw/dma/pl080.h index e9669bf5ae..1883f04270 100644 --- a/include/hw/dma/pl080.h +++ b/include/hw/dma/pl080.h @@ -43,9 +43,7 @@ typedef struct { #define TYPE_PL080 "pl080" #define TYPE_PL081 "pl081" -typedef struct PL080State PL080State; -DECLARE_INSTANCE_CHECKER(PL080State, PL080, - TYPE_PL080) +OBJECT_DECLARE_SIMPLE_TYPE(PL080State, PL080) struct PL080State { SysBusDevice parent_obj; diff --git a/include/hw/dma/xlnx-zdma.h b/include/hw/dma/xlnx-zdma.h index f638abe568..6602e7ffa7 100644 --- a/include/hw/dma/xlnx-zdma.h +++ b/include/hw/dma/xlnx-zdma.h @@ -76,11 +76,9 @@ struct XlnxZDMA { to model write only mode. */ uint8_t buf[2048]; }; -typedef struct XlnxZDMA XlnxZDMA; #define TYPE_XLNX_ZDMA "xlnx.zdma" -DECLARE_INSTANCE_CHECKER(XlnxZDMA, XLNX_ZDMA, - TYPE_XLNX_ZDMA) +OBJECT_DECLARE_SIMPLE_TYPE(XlnxZDMA, XLNX_ZDMA) #endif /* XLNX_ZDMA_H */ diff --git a/include/hw/dma/xlnx-zynq-devcfg.h b/include/hw/dma/xlnx-zynq-devcfg.h index e16b08f9c5..e4cf085d70 100644 --- a/include/hw/dma/xlnx-zynq-devcfg.h +++ b/include/hw/dma/xlnx-zynq-devcfg.h @@ -33,9 +33,7 @@ #define TYPE_XLNX_ZYNQ_DEVCFG "xlnx.ps7-dev-cfg" -typedef struct XlnxZynqDevcfg XlnxZynqDevcfg; -DECLARE_INSTANCE_CHECKER(XlnxZynqDevcfg, XLNX_ZYNQ_DEVCFG, - TYPE_XLNX_ZYNQ_DEVCFG) +OBJECT_DECLARE_SIMPLE_TYPE(XlnxZynqDevcfg, XLNX_ZYNQ_DEVCFG) #define XLNX_ZYNQ_DEVCFG_R_MAX (0x100 / 4) diff --git a/include/hw/dma/xlnx_dpdma.h b/include/hw/dma/xlnx_dpdma.h index 94b01cad0a..40537a848b 100644 --- a/include/hw/dma/xlnx_dpdma.h +++ b/include/hw/dma/xlnx_dpdma.h @@ -43,11 +43,9 @@ struct XlnxDPDMAState { qemu_irq irq; }; -typedef struct XlnxDPDMAState XlnxDPDMAState; #define TYPE_XLNX_DPDMA "xlnx.dpdma" -DECLARE_INSTANCE_CHECKER(XlnxDPDMAState, XLNX_DPDMA, - TYPE_XLNX_DPDMA) +OBJECT_DECLARE_SIMPLE_TYPE(XlnxDPDMAState, XLNX_DPDMA) /* * xlnx_dpdma_start_operation: Start the operation on the specified channel. The diff --git a/include/hw/gpio/aspeed_gpio.h b/include/hw/gpio/aspeed_gpio.h index 2582e6e0dc..e1636ce7fe 100644 --- a/include/hw/gpio/aspeed_gpio.h +++ b/include/hw/gpio/aspeed_gpio.h @@ -14,10 +14,7 @@ #include "qom/object.h" #define TYPE_ASPEED_GPIO "aspeed.gpio" -typedef struct AspeedGPIOClass AspeedGPIOClass; -typedef struct AspeedGPIOState AspeedGPIOState; -DECLARE_OBJ_CHECKERS(AspeedGPIOState, AspeedGPIOClass, - ASPEED_GPIO, TYPE_ASPEED_GPIO) +OBJECT_DECLARE_TYPE(AspeedGPIOState, AspeedGPIOClass, ASPEED_GPIO) #define ASPEED_GPIO_MAX_NR_SETS 8 #define ASPEED_REGS_PER_BANK 14 diff --git a/include/hw/gpio/bcm2835_gpio.h b/include/hw/gpio/bcm2835_gpio.h index e06e08a0fe..1c53a05090 100644 --- a/include/hw/gpio/bcm2835_gpio.h +++ b/include/hw/gpio/bcm2835_gpio.h @@ -33,10 +33,8 @@ struct BCM2835GpioState { uint8_t sd_fsel; qemu_irq out[54]; }; -typedef struct BCM2835GpioState BCM2835GpioState; #define TYPE_BCM2835_GPIO "bcm2835_gpio" -DECLARE_INSTANCE_CHECKER(BCM2835GpioState, BCM2835_GPIO, - TYPE_BCM2835_GPIO) +OBJECT_DECLARE_SIMPLE_TYPE(BCM2835GpioState, BCM2835_GPIO) #endif diff --git a/include/hw/gpio/imx_gpio.h b/include/hw/gpio/imx_gpio.h index a72b272ace..227860b9f0 100644 --- a/include/hw/gpio/imx_gpio.h +++ b/include/hw/gpio/imx_gpio.h @@ -24,9 +24,7 @@ #include "qom/object.h" #define TYPE_IMX_GPIO "imx.gpio" -typedef struct IMXGPIOState IMXGPIOState; -DECLARE_INSTANCE_CHECKER(IMXGPIOState, IMX_GPIO, - TYPE_IMX_GPIO) +OBJECT_DECLARE_SIMPLE_TYPE(IMXGPIOState, IMX_GPIO) #define IMX_GPIO_MEM_SIZE 0x20 diff --git a/include/hw/gpio/nrf51_gpio.h b/include/hw/gpio/nrf51_gpio.h index 55d7d24a52..8f9c2f86da 100644 --- a/include/hw/gpio/nrf51_gpio.h +++ b/include/hw/gpio/nrf51_gpio.h @@ -29,9 +29,7 @@ #include "hw/sysbus.h" #include "qom/object.h" #define TYPE_NRF51_GPIO "nrf51_soc.gpio" -typedef struct NRF51GPIOState NRF51GPIOState; -DECLARE_INSTANCE_CHECKER(NRF51GPIOState, NRF51_GPIO, - TYPE_NRF51_GPIO) +OBJECT_DECLARE_SIMPLE_TYPE(NRF51GPIOState, NRF51_GPIO) #define NRF51_GPIO_PINS 32 diff --git a/include/hw/gpio/sifive_gpio.h b/include/hw/gpio/sifive_gpio.h index cf12fcfd62..fc53785c9d 100644 --- a/include/hw/gpio/sifive_gpio.h +++ b/include/hw/gpio/sifive_gpio.h @@ -15,9 +15,12 @@ #define SIFIVE_GPIO_H #include "hw/sysbus.h" +#include "qom/object.h" #define TYPE_SIFIVE_GPIO "sifive_soc.gpio" -#define SIFIVE_GPIO(obj) OBJECT_CHECK(SIFIVEGPIOState, (obj), TYPE_SIFIVE_GPIO) +typedef struct SIFIVEGPIOState SIFIVEGPIOState; +DECLARE_INSTANCE_CHECKER(SIFIVEGPIOState, SIFIVE_GPIO, + TYPE_SIFIVE_GPIO) #define SIFIVE_GPIO_PINS 32 @@ -41,7 +44,7 @@ #define SIFIVE_GPIO_REG_IOF_SEL 0x03C #define SIFIVE_GPIO_REG_OUT_XOR 0x040 -typedef struct SIFIVEGPIOState { +struct SIFIVEGPIOState { SysBusDevice parent_obj; MemoryRegion mmio; @@ -71,6 +74,6 @@ typedef struct SIFIVEGPIOState { /* config */ uint32_t ngpio; -} SIFIVEGPIOState; +}; #endif /* SIFIVE_GPIO_H */ diff --git a/include/hw/hyperv/vmbus-bridge.h b/include/hw/hyperv/vmbus-bridge.h index 1324873775..1e5419574e 100644 --- a/include/hw/hyperv/vmbus-bridge.h +++ b/include/hw/hyperv/vmbus-bridge.h @@ -23,10 +23,8 @@ struct VMBusBridge { VMBus *bus; }; -typedef struct VMBusBridge VMBusBridge; -DECLARE_INSTANCE_CHECKER(VMBusBridge, VMBUS_BRIDGE, - TYPE_VMBUS_BRIDGE) +OBJECT_DECLARE_SIMPLE_TYPE(VMBusBridge, VMBUS_BRIDGE) static inline VMBusBridge *vmbus_bridge_find(void) { diff --git a/include/hw/hyperv/vmbus.h b/include/hw/hyperv/vmbus.h index 00ad8798c1..f98bea3888 100644 --- a/include/hw/hyperv/vmbus.h +++ b/include/hw/hyperv/vmbus.h @@ -21,12 +21,10 @@ #define TYPE_VMBUS_DEVICE "vmbus-dev" OBJECT_DECLARE_TYPE(VMBusDevice, VMBusDeviceClass, - vmbus_device, VMBUS_DEVICE) + VMBUS_DEVICE) #define TYPE_VMBUS "vmbus" -typedef struct VMBus VMBus; -DECLARE_INSTANCE_CHECKER(VMBus, VMBUS, - TYPE_VMBUS) +OBJECT_DECLARE_SIMPLE_TYPE(VMBus, VMBUS) /* * Object wrapping a GPADL -- GPA Descriptor List -- an array of guest physical diff --git a/include/hw/i2c/aspeed_i2c.h b/include/hw/i2c/aspeed_i2c.h index 695e1c0928..565f833066 100644 --- a/include/hw/i2c/aspeed_i2c.h +++ b/include/hw/i2c/aspeed_i2c.h @@ -29,10 +29,7 @@ #define TYPE_ASPEED_2400_I2C TYPE_ASPEED_I2C "-ast2400" #define TYPE_ASPEED_2500_I2C TYPE_ASPEED_I2C "-ast2500" #define TYPE_ASPEED_2600_I2C TYPE_ASPEED_I2C "-ast2600" -typedef struct AspeedI2CClass AspeedI2CClass; -typedef struct AspeedI2CState AspeedI2CState; -DECLARE_OBJ_CHECKERS(AspeedI2CState, AspeedI2CClass, - ASPEED_I2C, TYPE_ASPEED_I2C) +OBJECT_DECLARE_TYPE(AspeedI2CState, AspeedI2CClass, ASPEED_I2C) #define ASPEED_I2C_NR_BUSSES 16 #define ASPEED_I2C_MAX_POOL_SIZE 0x800 diff --git a/include/hw/i2c/i2c.h b/include/hw/i2c/i2c.h index 5b8eef62c6..277dd9f2d6 100644 --- a/include/hw/i2c/i2c.h +++ b/include/hw/i2c/i2c.h @@ -19,7 +19,7 @@ enum i2c_event { #define TYPE_I2C_SLAVE "i2c-slave" OBJECT_DECLARE_TYPE(I2CSlave, I2CSlaveClass, - i2c_slave, I2C_SLAVE) + I2C_SLAVE) struct I2CSlaveClass { DeviceClass parent_class; @@ -49,8 +49,7 @@ struct I2CSlave { }; #define TYPE_I2C_BUS "i2c-bus" -DECLARE_INSTANCE_CHECKER(I2CBus, I2C_BUS, - TYPE_I2C_BUS) +OBJECT_DECLARE_SIMPLE_TYPE(I2CBus, I2C_BUS) typedef struct I2CNode I2CNode; diff --git a/include/hw/i2c/imx_i2c.h b/include/hw/i2c/imx_i2c.h index e7f09104cf..e4f91339f5 100644 --- a/include/hw/i2c/imx_i2c.h +++ b/include/hw/i2c/imx_i2c.h @@ -25,9 +25,7 @@ #include "qom/object.h" #define TYPE_IMX_I2C "imx.i2c" -typedef struct IMXI2CState IMXI2CState; -DECLARE_INSTANCE_CHECKER(IMXI2CState, IMX_I2C, - TYPE_IMX_I2C) +OBJECT_DECLARE_SIMPLE_TYPE(IMXI2CState, IMX_I2C) #define IMX_I2C_MEM_SIZE 0x14 diff --git a/include/hw/i2c/microbit_i2c.h b/include/hw/i2c/microbit_i2c.h index 69d70287d7..3c29e09bf3 100644 --- a/include/hw/i2c/microbit_i2c.h +++ b/include/hw/i2c/microbit_i2c.h @@ -27,9 +27,7 @@ #define NRF51_TWI_REG_ADDRESS 0x588 #define TYPE_MICROBIT_I2C "microbit.i2c" -typedef struct MicrobitI2CState MicrobitI2CState; -DECLARE_INSTANCE_CHECKER(MicrobitI2CState, MICROBIT_I2C, - TYPE_MICROBIT_I2C) +OBJECT_DECLARE_SIMPLE_TYPE(MicrobitI2CState, MICROBIT_I2C) #define MICROBIT_I2C_NREGS (NRF51_PERIPHERAL_SIZE / sizeof(uint32_t)) diff --git a/include/hw/i2c/ppc4xx_i2c.h b/include/hw/i2c/ppc4xx_i2c.h index 7cbcdaf12f..4e882fa3c8 100644 --- a/include/hw/i2c/ppc4xx_i2c.h +++ b/include/hw/i2c/ppc4xx_i2c.h @@ -32,9 +32,7 @@ #include "qom/object.h" #define TYPE_PPC4xx_I2C "ppc4xx-i2c" -typedef struct PPC4xxI2CState PPC4xxI2CState; -DECLARE_INSTANCE_CHECKER(PPC4xxI2CState, PPC4xx_I2C, - TYPE_PPC4xx_I2C) +OBJECT_DECLARE_SIMPLE_TYPE(PPC4xxI2CState, PPC4xx_I2C) struct PPC4xxI2CState { /*< private >*/ diff --git a/include/hw/i2c/smbus_slave.h b/include/hw/i2c/smbus_slave.h index cb9cb372f9..86bfe0a79e 100644 --- a/include/hw/i2c/smbus_slave.h +++ b/include/hw/i2c/smbus_slave.h @@ -30,7 +30,7 @@ #define TYPE_SMBUS_DEVICE "smbus-device" OBJECT_DECLARE_TYPE(SMBusDevice, SMBusDeviceClass, - smbus_device, SMBUS_DEVICE) + SMBUS_DEVICE) struct SMBusDeviceClass { diff --git a/include/hw/i386/ich9.h b/include/hw/i386/ich9.h index e750d67975..48b442bc0b 100644 --- a/include/hw/i386/ich9.h +++ b/include/hw/i386/ich9.h @@ -24,9 +24,7 @@ void ich9_generate_smi(void); #define ICH9_CC_SIZE (16 * 1024) /* 16KB. Chipset configuration registers */ #define TYPE_ICH9_LPC_DEVICE "ICH9-LPC" -typedef struct ICH9LPCState ICH9LPCState; -DECLARE_INSTANCE_CHECKER(ICH9LPCState, ICH9_LPC_DEVICE, - TYPE_ICH9_LPC_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(ICH9LPCState, ICH9_LPC_DEVICE) struct ICH9LPCState { /* ICH9 LPC PCI to ISA bridge */ diff --git a/include/hw/i386/intel_iommu.h b/include/hw/i386/intel_iommu.h index 98cfc77723..41783ee46d 100644 --- a/include/hw/i386/intel_iommu.h +++ b/include/hw/i386/intel_iommu.h @@ -27,9 +27,7 @@ #include "qom/object.h" #define TYPE_INTEL_IOMMU_DEVICE "intel-iommu" -typedef struct IntelIOMMUState IntelIOMMUState; -DECLARE_INSTANCE_CHECKER(IntelIOMMUState, INTEL_IOMMU_DEVICE, - TYPE_INTEL_IOMMU_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(IntelIOMMUState, INTEL_IOMMU_DEVICE) #define TYPE_INTEL_IOMMU_MEMORY_REGION "intel-iommu-iommu-memory-region" diff --git a/include/hw/i386/ioapic_internal.h b/include/hw/i386/ioapic_internal.h index e9cc2eaf54..0ac9e2400d 100644 --- a/include/hw/i386/ioapic_internal.h +++ b/include/hw/i386/ioapic_internal.h @@ -82,12 +82,9 @@ #define IOAPIC_VER_ENTRIES_SHIFT 16 -typedef struct IOAPICCommonState IOAPICCommonState; #define TYPE_IOAPIC_COMMON "ioapic-common" -typedef struct IOAPICCommonClass IOAPICCommonClass; -DECLARE_OBJ_CHECKERS(IOAPICCommonState, IOAPICCommonClass, - IOAPIC_COMMON, TYPE_IOAPIC_COMMON) +OBJECT_DECLARE_TYPE(IOAPICCommonState, IOAPICCommonClass, IOAPIC_COMMON) struct IOAPICCommonClass { SysBusDeviceClass parent_class; diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h index 36dbcdd123..3b9fd4ff17 100644 --- a/include/hw/i386/microvm.h +++ b/include/hw/i386/microvm.h @@ -24,14 +24,19 @@ #include "hw/boards.h" #include "hw/i386/x86.h" +#include "hw/acpi/acpi_dev_interface.h" #include "qom/object.h" /* Platform virtio definitions */ #define VIRTIO_MMIO_BASE 0xfeb00000 -#define VIRTIO_IRQ_BASE 5 #define VIRTIO_NUM_TRANSPORTS 8 #define VIRTIO_CMDLINE_MAXLEN 64 +#define GED_MMIO_BASE 0xfea00000 +#define GED_MMIO_BASE_MEMHP (GED_MMIO_BASE + 0x100) +#define GED_MMIO_BASE_REGS (GED_MMIO_BASE + 0x200) +#define GED_MMIO_IRQ 9 + /* Machine type options */ #define MICROVM_MACHINE_PIT "pit" #define MICROVM_MACHINE_PIC "pic" @@ -45,7 +50,6 @@ struct MicrovmMachineClass { HotplugHandler *(*orig_hotplug_handler)(MachineState *machine, DeviceState *dev); }; -typedef struct MicrovmMachineClass MicrovmMachineClass; struct MicrovmMachineState { X86MachineState parent; @@ -59,12 +63,13 @@ struct MicrovmMachineState { bool auto_kernel_cmdline; /* Machine state */ + uint32_t virtio_irq_base; bool kernel_cmdline_fixed; + Notifier machine_done; + Notifier powerdown_req; }; -typedef struct MicrovmMachineState MicrovmMachineState; #define TYPE_MICROVM_MACHINE MACHINE_TYPE_NAME("microvm") -DECLARE_OBJ_CHECKERS(MicrovmMachineState, MicrovmMachineClass, - MICROVM_MACHINE, TYPE_MICROVM_MACHINE) +OBJECT_DECLARE_TYPE(MicrovmMachineState, MicrovmMachineClass, MICROVM_MACHINE) #endif diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index 421a77acc2..b2da2c8d2b 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -30,7 +30,6 @@ struct PCMachineState { Notifier machine_done; /* Pointers to devices and objects: */ - HotplugHandler *acpi_dev; PCIBus *bus; I2CBus *smbus; PFlashCFI01 *flash[2]; @@ -120,11 +119,9 @@ struct PCMachineClass { /* use PVH to load kernels that support this feature */ bool pvh_enabled; }; -typedef struct PCMachineClass PCMachineClass; #define TYPE_PC_MACHINE "generic-pc-machine" -DECLARE_OBJ_CHECKERS(PCMachineState, PCMachineClass, - PC_MACHINE, TYPE_PC_MACHINE) +OBJECT_DECLARE_TYPE(PCMachineState, PCMachineClass, PC_MACHINE) /* ioapic.c */ diff --git a/include/hw/i386/vmport.h b/include/hw/i386/vmport.h index c380b9c1f0..8f5e27c6f5 100644 --- a/include/hw/i386/vmport.h +++ b/include/hw/i386/vmport.h @@ -4,7 +4,7 @@ #include "hw/isa/isa.h" #define TYPE_VMPORT "vmport" -typedef uint32_t (VMPortReadFunc)(void *opaque, uint32_t address); +typedef uint32_t VMPortReadFunc(void *opaque, uint32_t address); typedef enum { VMPORT_CMD_GETVERSION = 10, diff --git a/include/hw/i386/x86-iommu.h b/include/hw/i386/x86-iommu.h index bbfaf44e79..9de92d33a1 100644 --- a/include/hw/i386/x86-iommu.h +++ b/include/hw/i386/x86-iommu.h @@ -26,10 +26,7 @@ #include "qom/object.h" #define TYPE_X86_IOMMU_DEVICE ("x86-iommu") -typedef struct X86IOMMUClass X86IOMMUClass; -typedef struct X86IOMMUState X86IOMMUState; -DECLARE_OBJ_CHECKERS(X86IOMMUState, X86IOMMUClass, - X86_IOMMU_DEVICE, TYPE_X86_IOMMU_DEVICE) +OBJECT_DECLARE_TYPE(X86IOMMUState, X86IOMMUClass, X86_IOMMU_DEVICE) #define X86_IOMMU_SID_INVALID (0xffff) diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h index 1a188a7dea..d5dcf7a07f 100644 --- a/include/hw/i386/x86.h +++ b/include/hw/i386/x86.h @@ -39,7 +39,6 @@ struct X86MachineClass { /* Enables contiguous-apic-ID mode */ bool compat_apic_id_mode; }; -typedef struct X86MachineClass X86MachineClass; struct X86MachineState { /*< private >*/ @@ -52,6 +51,7 @@ struct X86MachineState { FWCfgState *fw_cfg; qemu_irq *gsi; GMappedFile *initrd_mapped_file; + HotplugHandler *acpi_dev; /* RAM information (sizes, addresses, configuration): */ ram_addr_t below_4g_mem_size, above_4g_mem_size; @@ -71,14 +71,12 @@ struct X86MachineState { */ AddressSpace *ioapic_as; }; -typedef struct X86MachineState X86MachineState; #define X86_MACHINE_SMM "smm" #define X86_MACHINE_ACPI "acpi" #define TYPE_X86_MACHINE MACHINE_TYPE_NAME("x86") -DECLARE_OBJ_CHECKERS(X86MachineState, X86MachineClass, - X86_MACHINE, TYPE_X86_MACHINE) +OBJECT_DECLARE_TYPE(X86MachineState, X86MachineClass, X86_MACHINE) void init_topo_info(X86CPUTopoInfo *topo_info, const X86MachineState *x86ms); @@ -91,6 +89,16 @@ CpuInstanceProperties x86_cpu_index_to_props(MachineState *ms, unsigned cpu_index); int64_t x86_get_default_cpu_node_id(const MachineState *ms, int idx); const CPUArchIdList *x86_possible_cpu_arch_ids(MachineState *ms); +CPUArchId *x86_find_cpu_slot(MachineState *ms, uint32_t id, int *idx); +void x86_rtc_set_cpus_count(ISADevice *rtc, uint16_t cpus_count); +void x86_cpu_pre_plug(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp); +void x86_cpu_plug(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp); +void x86_cpu_unplug_request_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp); +void x86_cpu_unplug_cb(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp); void x86_bios_rom_init(MemoryRegion *rom_memory, bool isapc_ram_fw); @@ -100,8 +108,8 @@ void x86_load_linux(X86MachineState *x86ms, bool pvh_enabled, bool linuxboot_dma_enabled); -bool x86_machine_is_smm_enabled(X86MachineState *x86ms); -bool x86_machine_is_acpi_enabled(X86MachineState *x86ms); +bool x86_machine_is_smm_enabled(const X86MachineState *x86ms); +bool x86_machine_is_acpi_enabled(const X86MachineState *x86ms); /* Global System Interrupts */ diff --git a/include/hw/ide/ahci.h b/include/hw/ide/ahci.h index da3cddcc65..b1bdf648f8 100644 --- a/include/hw/ide/ahci.h +++ b/include/hw/ide/ahci.h @@ -51,19 +51,15 @@ typedef struct AHCIState { AddressSpace *as; } AHCIState; -typedef struct AHCIPCIState AHCIPCIState; #define TYPE_ICH9_AHCI "ich9-ahci" -DECLARE_INSTANCE_CHECKER(AHCIPCIState, ICH9_AHCI, - TYPE_ICH9_AHCI) +OBJECT_DECLARE_SIMPLE_TYPE(AHCIPCIState, ICH9_AHCI) int32_t ahci_get_num_ports(PCIDevice *dev); void ahci_ide_create_devs(PCIDevice *dev, DriveInfo **hd); #define TYPE_SYSBUS_AHCI "sysbus-ahci" -typedef struct SysbusAHCIState SysbusAHCIState; -DECLARE_INSTANCE_CHECKER(SysbusAHCIState, SYSBUS_AHCI, - TYPE_SYSBUS_AHCI) +OBJECT_DECLARE_SIMPLE_TYPE(SysbusAHCIState, SYSBUS_AHCI) struct SysbusAHCIState { /*< private >*/ @@ -75,9 +71,7 @@ struct SysbusAHCIState { }; #define TYPE_ALLWINNER_AHCI "allwinner-ahci" -typedef struct AllwinnerAHCIState AllwinnerAHCIState; -DECLARE_INSTANCE_CHECKER(AllwinnerAHCIState, ALLWINNER_AHCI, - TYPE_ALLWINNER_AHCI) +OBJECT_DECLARE_SIMPLE_TYPE(AllwinnerAHCIState, ALLWINNER_AHCI) #define ALLWINNER_AHCI_MMIO_OFF 0x80 #define ALLWINNER_AHCI_MMIO_SIZE 0x80 diff --git a/include/hw/ide/internal.h b/include/hw/ide/internal.h index eb9eb4e0ae..8a95ad8c4d 100644 --- a/include/hw/ide/internal.h +++ b/include/hw/ide/internal.h @@ -19,15 +19,13 @@ #define USE_DMA_CDROM #include "qom/object.h" -typedef struct IDEBus IDEBus; typedef struct IDEDevice IDEDevice; typedef struct IDEState IDEState; typedef struct IDEDMA IDEDMA; typedef struct IDEDMAOps IDEDMAOps; #define TYPE_IDE_BUS "IDE" -DECLARE_INSTANCE_CHECKER(IDEBus, IDE_BUS, - TYPE_IDE_BUS) +OBJECT_DECLARE_SIMPLE_TYPE(IDEBus, IDE_BUS) #define MAX_IDE_DEVS 2 @@ -488,9 +486,7 @@ struct IDEBus { }; #define TYPE_IDE_DEVICE "ide-device" -typedef struct IDEDeviceClass IDEDeviceClass; -DECLARE_OBJ_CHECKERS(IDEDevice, IDEDeviceClass, - IDE_DEVICE, TYPE_IDE_DEVICE) +OBJECT_DECLARE_TYPE(IDEDevice, IDEDeviceClass, IDE_DEVICE) struct IDEDeviceClass { DeviceClass parent_class; diff --git a/include/hw/ide/pci.h b/include/hw/ide/pci.h index b8d7270ec8..d8384e1c42 100644 --- a/include/hw/ide/pci.h +++ b/include/hw/ide/pci.h @@ -40,9 +40,7 @@ typedef struct BMDMAState { } BMDMAState; #define TYPE_PCI_IDE "pci-ide" -typedef struct PCIIDEState PCIIDEState; -DECLARE_INSTANCE_CHECKER(PCIIDEState, PCI_IDE, - TYPE_PCI_IDE) +OBJECT_DECLARE_SIMPLE_TYPE(PCIIDEState, PCI_IDE) struct PCIIDEState { /*< private >*/ diff --git a/include/hw/input/adb.h b/include/hw/input/adb.h index 285f70db55..20fced15f7 100644 --- a/include/hw/input/adb.h +++ b/include/hw/input/adb.h @@ -33,7 +33,6 @@ #define ADB_MAX_OUT_LEN 16 -typedef struct ADBBusState ADBBusState; typedef struct ADBDevice ADBDevice; /* buf = NULL means polling */ @@ -43,9 +42,7 @@ typedef int ADBDeviceRequest(ADBDevice *d, uint8_t *buf_out, typedef bool ADBDeviceHasData(ADBDevice *d); #define TYPE_ADB_DEVICE "adb-device" -typedef struct ADBDeviceClass ADBDeviceClass; -DECLARE_OBJ_CHECKERS(ADBDevice, ADBDeviceClass, - ADB_DEVICE, TYPE_ADB_DEVICE) +OBJECT_DECLARE_TYPE(ADBDevice, ADBDeviceClass, ADB_DEVICE) struct ADBDevice { /*< private >*/ @@ -67,8 +64,7 @@ struct ADBDeviceClass { }; #define TYPE_ADB_BUS "apple-desktop-bus" -DECLARE_INSTANCE_CHECKER(ADBBusState, ADB_BUS, - TYPE_ADB_BUS) +OBJECT_DECLARE_SIMPLE_TYPE(ADBBusState, ADB_BUS) #define ADB_STATUS_BUSTIMEOUT 0x1 #define ADB_STATUS_POLLREPLY 0x2 diff --git a/include/hw/input/i8042.h b/include/hw/input/i8042.h index f8a3bf88ac..1d90432dae 100644 --- a/include/hw/input/i8042.h +++ b/include/hw/input/i8042.h @@ -12,9 +12,7 @@ #include "qom/object.h" #define TYPE_I8042 "i8042" -typedef struct ISAKBDState ISAKBDState; -DECLARE_INSTANCE_CHECKER(ISAKBDState, I8042, - TYPE_I8042) +OBJECT_DECLARE_SIMPLE_TYPE(ISAKBDState, I8042) #define I8042_A20_LINE "a20" diff --git a/include/hw/intc/allwinner-a10-pic.h b/include/hw/intc/allwinner-a10-pic.h index 4d7199480a..b8364d3ed4 100644 --- a/include/hw/intc/allwinner-a10-pic.h +++ b/include/hw/intc/allwinner-a10-pic.h @@ -5,9 +5,7 @@ #include "qom/object.h" #define TYPE_AW_A10_PIC "allwinner-a10-pic" -typedef struct AwA10PICState AwA10PICState; -DECLARE_INSTANCE_CHECKER(AwA10PICState, AW_A10_PIC, - TYPE_AW_A10_PIC) +OBJECT_DECLARE_SIMPLE_TYPE(AwA10PICState, AW_A10_PIC) #define AW_A10_PIC_VECTOR 0 #define AW_A10_PIC_BASE_ADDR 4 diff --git a/include/hw/intc/aspeed_vic.h b/include/hw/intc/aspeed_vic.h index 8f2e67db5a..68d6ab997a 100644 --- a/include/hw/intc/aspeed_vic.h +++ b/include/hw/intc/aspeed_vic.h @@ -17,9 +17,7 @@ #include "qom/object.h" #define TYPE_ASPEED_VIC "aspeed.vic" -typedef struct AspeedVICState AspeedVICState; -DECLARE_INSTANCE_CHECKER(AspeedVICState, ASPEED_VIC, - TYPE_ASPEED_VIC) +OBJECT_DECLARE_SIMPLE_TYPE(AspeedVICState, ASPEED_VIC) #define ASPEED_VIC_NR_IRQS 51 diff --git a/include/hw/intc/bcm2835_ic.h b/include/hw/intc/bcm2835_ic.h index fd4a767845..588eb76c5c 100644 --- a/include/hw/intc/bcm2835_ic.h +++ b/include/hw/intc/bcm2835_ic.h @@ -12,9 +12,7 @@ #include "qom/object.h" #define TYPE_BCM2835_IC "bcm2835-ic" -typedef struct BCM2835ICState BCM2835ICState; -DECLARE_INSTANCE_CHECKER(BCM2835ICState, BCM2835_IC, - TYPE_BCM2835_IC) +OBJECT_DECLARE_SIMPLE_TYPE(BCM2835ICState, BCM2835_IC) #define BCM2835_IC_GPU_IRQ "gpu-irq" #define BCM2835_IC_ARM_IRQ "arm-irq" diff --git a/include/hw/intc/bcm2836_control.h b/include/hw/intc/bcm2836_control.h index f23292776e..a410c817e8 100644 --- a/include/hw/intc/bcm2836_control.h +++ b/include/hw/intc/bcm2836_control.h @@ -24,9 +24,7 @@ #define BCM2836_MBPERCORE 4 #define TYPE_BCM2836_CONTROL "bcm2836-control" -typedef struct BCM2836ControlState BCM2836ControlState; -DECLARE_INSTANCE_CHECKER(BCM2836ControlState, BCM2836_CONTROL, - TYPE_BCM2836_CONTROL) +OBJECT_DECLARE_SIMPLE_TYPE(BCM2836ControlState, BCM2836_CONTROL) struct BCM2836ControlState { /*< private >*/ diff --git a/include/hw/intc/heathrow_pic.h b/include/hw/intc/heathrow_pic.h index f8c9bc20ab..c0a7f6f546 100644 --- a/include/hw/intc/heathrow_pic.h +++ b/include/hw/intc/heathrow_pic.h @@ -30,9 +30,7 @@ #include "qom/object.h" #define TYPE_HEATHROW "heathrow" -typedef struct HeathrowState HeathrowState; -DECLARE_INSTANCE_CHECKER(HeathrowState, HEATHROW, - TYPE_HEATHROW) +OBJECT_DECLARE_SIMPLE_TYPE(HeathrowState, HEATHROW) typedef struct HeathrowPICState { uint32_t events; diff --git a/include/hw/intc/ibex_plic.h b/include/hw/intc/ibex_plic.h index 8da6b03805..37f03356b3 100644 --- a/include/hw/intc/ibex_plic.h +++ b/include/hw/intc/ibex_plic.h @@ -23,9 +23,7 @@ #include "qom/object.h" #define TYPE_IBEX_PLIC "ibex-plic" -typedef struct IbexPlicState IbexPlicState; -DECLARE_INSTANCE_CHECKER(IbexPlicState, IBEX_PLIC, - TYPE_IBEX_PLIC) +OBJECT_DECLARE_SIMPLE_TYPE(IbexPlicState, IBEX_PLIC) struct IbexPlicState { /*< private >*/ diff --git a/include/hw/intc/imx_avic.h b/include/hw/intc/imx_avic.h index 621742533c..75fbd1a89c 100644 --- a/include/hw/intc/imx_avic.h +++ b/include/hw/intc/imx_avic.h @@ -21,9 +21,7 @@ #include "qom/object.h" #define TYPE_IMX_AVIC "imx.avic" -typedef struct IMXAVICState IMXAVICState; -DECLARE_INSTANCE_CHECKER(IMXAVICState, IMX_AVIC, - TYPE_IMX_AVIC) +OBJECT_DECLARE_SIMPLE_TYPE(IMXAVICState, IMX_AVIC) #define IMX_AVIC_NUM_IRQS 64 diff --git a/include/hw/intc/imx_gpcv2.h b/include/hw/intc/imx_gpcv2.h index 2d8075e527..7bdee7e80a 100644 --- a/include/hw/intc/imx_gpcv2.h +++ b/include/hw/intc/imx_gpcv2.h @@ -16,10 +16,8 @@ struct IMXGPCv2State { MemoryRegion iomem; uint32_t regs[GPC_NUM]; }; -typedef struct IMXGPCv2State IMXGPCv2State; #define TYPE_IMX_GPCV2 "imx-gpcv2" -DECLARE_INSTANCE_CHECKER(IMXGPCv2State, IMX_GPCV2, - TYPE_IMX_GPCV2) +OBJECT_DECLARE_SIMPLE_TYPE(IMXGPCv2State, IMX_GPCV2) #endif /* IMX_GPCV2_H */ diff --git a/include/hw/intc/mips_gic.h b/include/hw/intc/mips_gic.h index 65aa3a9a5e..eeb136e261 100644 --- a/include/hw/intc/mips_gic.h +++ b/include/hw/intc/mips_gic.h @@ -171,9 +171,7 @@ #define GIC_LOCAL_INT_WD 0 /* GIC watchdog */ #define TYPE_MIPS_GIC "mips-gic" -typedef struct MIPSGICState MIPSGICState; -DECLARE_INSTANCE_CHECKER(MIPSGICState, MIPS_GIC, - TYPE_MIPS_GIC) +OBJECT_DECLARE_SIMPLE_TYPE(MIPSGICState, MIPS_GIC) /* Support up to 32 VPs and 256 IRQs */ #define GIC_MAX_VPS 32 diff --git a/include/hw/intc/realview_gic.h b/include/hw/intc/realview_gic.h index a93ace87c8..f37339dc0b 100644 --- a/include/hw/intc/realview_gic.h +++ b/include/hw/intc/realview_gic.h @@ -15,9 +15,7 @@ #include "qom/object.h" #define TYPE_REALVIEW_GIC "realview_gic" -typedef struct RealViewGICState RealViewGICState; -DECLARE_INSTANCE_CHECKER(RealViewGICState, REALVIEW_GIC, - TYPE_REALVIEW_GIC) +OBJECT_DECLARE_SIMPLE_TYPE(RealViewGICState, REALVIEW_GIC) struct RealViewGICState { SysBusDevice parent_obj; diff --git a/include/hw/intc/rx_icu.h b/include/hw/intc/rx_icu.h index ec02df35e3..7f5889b36f 100644 --- a/include/hw/intc/rx_icu.h +++ b/include/hw/intc/rx_icu.h @@ -69,10 +69,8 @@ struct RXICUState { qemu_irq _fir; qemu_irq _swi; }; -typedef struct RXICUState RXICUState; #define TYPE_RX_ICU "rx-icu" -DECLARE_INSTANCE_CHECKER(RXICUState, RX_ICU, - TYPE_RX_ICU) +OBJECT_DECLARE_SIMPLE_TYPE(RXICUState, RX_ICU) #endif /* RX_ICU_H */ diff --git a/include/hw/intc/xlnx-pmu-iomod-intc.h b/include/hw/intc/xlnx-pmu-iomod-intc.h index 7a560e97af..ccc8bd272a 100644 --- a/include/hw/intc/xlnx-pmu-iomod-intc.h +++ b/include/hw/intc/xlnx-pmu-iomod-intc.h @@ -31,9 +31,7 @@ #define TYPE_XLNX_PMU_IO_INTC "xlnx.pmu_io_intc" -typedef struct XlnxPMUIOIntc XlnxPMUIOIntc; -DECLARE_INSTANCE_CHECKER(XlnxPMUIOIntc, XLNX_PMU_IO_INTC, - TYPE_XLNX_PMU_IO_INTC) +OBJECT_DECLARE_SIMPLE_TYPE(XlnxPMUIOIntc, XLNX_PMU_IO_INTC) /* This is R_PIT3_CONTROL + 1 */ #define XLNXPMUIOINTC_R_MAX (0x78 + 1) diff --git a/include/hw/intc/xlnx-zynqmp-ipi.h b/include/hw/intc/xlnx-zynqmp-ipi.h index 29c48db307..33eff1d4f6 100644 --- a/include/hw/intc/xlnx-zynqmp-ipi.h +++ b/include/hw/intc/xlnx-zynqmp-ipi.h @@ -31,9 +31,7 @@ #define TYPE_XLNX_ZYNQMP_IPI "xlnx.zynqmp_ipi" -typedef struct XlnxZynqMPIPI XlnxZynqMPIPI; -DECLARE_INSTANCE_CHECKER(XlnxZynqMPIPI, XLNX_ZYNQMP_IPI, - TYPE_XLNX_ZYNQMP_IPI) +OBJECT_DECLARE_SIMPLE_TYPE(XlnxZynqMPIPI, XLNX_ZYNQMP_IPI) /* This is R_IPI_IDR + 1 */ #define R_XLNX_ZYNQMP_IPI_MAX ((0x1c / 4) + 1) diff --git a/include/hw/ipack/ipack.h b/include/hw/ipack/ipack.h index a59a487853..75014e74ae 100644 --- a/include/hw/ipack/ipack.h +++ b/include/hw/ipack/ipack.h @@ -14,11 +14,9 @@ #include "hw/qdev-core.h" #include "qom/object.h" -typedef struct IPackBus IPackBus; #define TYPE_IPACK_BUS "IndustryPack" -DECLARE_INSTANCE_CHECKER(IPackBus, IPACK_BUS, - TYPE_IPACK_BUS) +OBJECT_DECLARE_SIMPLE_TYPE(IPackBus, IPACK_BUS) struct IPackBus { /*< private >*/ @@ -33,7 +31,7 @@ struct IPackBus { #define TYPE_IPACK_DEVICE "ipack-device" OBJECT_DECLARE_TYPE(IPackDevice, IPackDeviceClass, - ipack_device, IPACK_DEVICE) + IPACK_DEVICE) struct IPackDeviceClass { /*< private >*/ diff --git a/include/hw/ipmi/ipmi.h b/include/hw/ipmi/ipmi.h index 3fa5a4abd0..77a7213ed9 100644 --- a/include/hw/ipmi/ipmi.h +++ b/include/hw/ipmi/ipmi.h @@ -177,7 +177,7 @@ struct IPMIInterfaceClass { */ #define TYPE_IPMI_BMC "ipmi-bmc" OBJECT_DECLARE_TYPE(IPMIBmc, IPMIBmcClass, - ipmi_bmc, IPMI_BMC) + IPMI_BMC) struct IPMIBmc { DeviceState parent; @@ -264,9 +264,7 @@ int ipmi_bmc_sdr_find(IPMIBmc *b, uint16_t recid, void ipmi_bmc_gen_event(IPMIBmc *b, uint8_t *evt, bool log); #define TYPE_IPMI_BMC_SIMULATOR "ipmi-bmc-sim" -typedef struct IPMIBmcSim IPMIBmcSim; -DECLARE_INSTANCE_CHECKER(IPMIBmcSim, IPMI_BMC_SIMULATOR, - TYPE_IPMI_BMC_SIMULATOR) +OBJECT_DECLARE_SIMPLE_TYPE(IPMIBmcSim, IPMI_BMC_SIMULATOR) typedef struct RspBuffer { diff --git a/include/hw/isa/i8259_internal.h b/include/hw/isa/i8259_internal.h index cd050bb9f2..a6ae8a583f 100644 --- a/include/hw/isa/i8259_internal.h +++ b/include/hw/isa/i8259_internal.h @@ -30,12 +30,9 @@ #include "hw/intc/i8259.h" #include "qom/object.h" -typedef struct PICCommonState PICCommonState; #define TYPE_PIC_COMMON "pic-common" -typedef struct PICCommonClass PICCommonClass; -DECLARE_OBJ_CHECKERS(PICCommonState, PICCommonClass, - PIC_COMMON, TYPE_PIC_COMMON) +OBJECT_DECLARE_TYPE(PICCommonState, PICCommonClass, PIC_COMMON) struct PICCommonClass { ISADeviceClass parent_class; diff --git a/include/hw/isa/isa.h b/include/hw/isa/isa.h index ddb6a2d168..ddaae89a85 100644 --- a/include/hw/isa/isa.h +++ b/include/hw/isa/isa.h @@ -11,13 +11,10 @@ #define ISA_NUM_IRQS 16 #define TYPE_ISA_DEVICE "isa-device" -typedef struct ISADeviceClass ISADeviceClass; -DECLARE_OBJ_CHECKERS(ISADevice, ISADeviceClass, - ISA_DEVICE, TYPE_ISA_DEVICE) +OBJECT_DECLARE_TYPE(ISADevice, ISADeviceClass, ISA_DEVICE) #define TYPE_ISA_BUS "ISA" -DECLARE_INSTANCE_CHECKER(ISABus, ISA_BUS, - TYPE_ISA_BUS) +OBJECT_DECLARE_SIMPLE_TYPE(ISABus, ISA_BUS) #define TYPE_APPLE_SMC "isa-applesmc" #define APPLESMC_MAX_DATA_LENGTH 32 diff --git a/include/hw/isa/pc87312.h b/include/hw/isa/pc87312.h index da8dc5ddf5..edaf723f4d 100644 --- a/include/hw/isa/pc87312.h +++ b/include/hw/isa/pc87312.h @@ -30,9 +30,7 @@ #define TYPE_PC87312 "pc87312" -typedef struct PC87312State PC87312State; -DECLARE_INSTANCE_CHECKER(PC87312State, PC87312, - TYPE_PC87312) +OBJECT_DECLARE_SIMPLE_TYPE(PC87312State, PC87312) struct PC87312State { /*< private >*/ diff --git a/include/hw/m68k/mcf_fec.h b/include/hw/m68k/mcf_fec.h index 840c5bbf53..80d4f651ba 100644 --- a/include/hw/m68k/mcf_fec.h +++ b/include/hw/m68k/mcf_fec.h @@ -12,9 +12,7 @@ #include "qom/object.h" #define TYPE_MCF_FEC_NET "mcf-fec" -typedef struct mcf_fec_state mcf_fec_state; -DECLARE_INSTANCE_CHECKER(mcf_fec_state, MCF_FEC_NET, - TYPE_MCF_FEC_NET) +OBJECT_DECLARE_SIMPLE_TYPE(mcf_fec_state, MCF_FEC_NET) #define FEC_NUM_IRQ 13 diff --git a/include/hw/mem/nvdimm.h b/include/hw/mem/nvdimm.h index 19e3d3092d..c699842dd0 100644 --- a/include/hw/mem/nvdimm.h +++ b/include/hw/mem/nvdimm.h @@ -46,10 +46,7 @@ #define MIN_NAMESPACE_LABEL_SIZE (128UL << 10) #define TYPE_NVDIMM "nvdimm" -typedef struct NVDIMMClass NVDIMMClass; -typedef struct NVDIMMDevice NVDIMMDevice; -DECLARE_OBJ_CHECKERS(NVDIMMDevice, NVDIMMClass, - NVDIMM, TYPE_NVDIMM) +OBJECT_DECLARE_TYPE(NVDIMMDevice, NVDIMMClass, NVDIMM) #define NVDIMM_LABEL_SIZE_PROP "label-size" #define NVDIMM_UUID_PROP "uuid" diff --git a/include/hw/mem/pc-dimm.h b/include/hw/mem/pc-dimm.h index 1d570defc9..aec9527fdd 100644 --- a/include/hw/mem/pc-dimm.h +++ b/include/hw/mem/pc-dimm.h @@ -22,7 +22,7 @@ #define TYPE_PC_DIMM "pc-dimm" OBJECT_DECLARE_TYPE(PCDIMMDevice, PCDIMMDeviceClass, - pc_dimm, PC_DIMM) + PC_DIMM) #define PC_DIMM_ADDR_PROP "addr" #define PC_DIMM_SLOT_PROP "slot" diff --git a/include/hw/mips/cps.h b/include/hw/mips/cps.h index 849e640570..9e35a88136 100644 --- a/include/hw/mips/cps.h +++ b/include/hw/mips/cps.h @@ -29,9 +29,7 @@ #include "qom/object.h" #define TYPE_MIPS_CPS "mips-cps" -typedef struct MIPSCPSState MIPSCPSState; -DECLARE_INSTANCE_CHECKER(MIPSCPSState, MIPS_CPS, - TYPE_MIPS_CPS) +OBJECT_DECLARE_SIMPLE_TYPE(MIPSCPSState, MIPS_CPS) struct MIPSCPSState { SysBusDevice parent_obj; diff --git a/include/hw/misc/a9scu.h b/include/hw/misc/a9scu.h index fd1b92e923..c3759fb8c8 100644 --- a/include/hw/misc/a9scu.h +++ b/include/hw/misc/a9scu.h @@ -25,10 +25,8 @@ struct A9SCUState { uint32_t status; uint32_t num_cpu; }; -typedef struct A9SCUState A9SCUState; #define TYPE_A9_SCU "a9-scu" -DECLARE_INSTANCE_CHECKER(A9SCUState, A9_SCU, - TYPE_A9_SCU) +OBJECT_DECLARE_SIMPLE_TYPE(A9SCUState, A9_SCU) #endif diff --git a/include/hw/misc/allwinner-cpucfg.h b/include/hw/misc/allwinner-cpucfg.h index 058514de15..a717b47299 100644 --- a/include/hw/misc/allwinner-cpucfg.h +++ b/include/hw/misc/allwinner-cpucfg.h @@ -29,9 +29,7 @@ */ #define TYPE_AW_CPUCFG "allwinner-cpucfg" -typedef struct AwCpuCfgState AwCpuCfgState; -DECLARE_INSTANCE_CHECKER(AwCpuCfgState, AW_CPUCFG, - TYPE_AW_CPUCFG) +OBJECT_DECLARE_SIMPLE_TYPE(AwCpuCfgState, AW_CPUCFG) /** @} */ diff --git a/include/hw/misc/allwinner-h3-ccu.h b/include/hw/misc/allwinner-h3-ccu.h index 05f5c7bd8e..a04875bfca 100644 --- a/include/hw/misc/allwinner-h3-ccu.h +++ b/include/hw/misc/allwinner-h3-ccu.h @@ -42,9 +42,7 @@ */ #define TYPE_AW_H3_CCU "allwinner-h3-ccu" -typedef struct AwH3ClockCtlState AwH3ClockCtlState; -DECLARE_INSTANCE_CHECKER(AwH3ClockCtlState, AW_H3_CCU, - TYPE_AW_H3_CCU) +OBJECT_DECLARE_SIMPLE_TYPE(AwH3ClockCtlState, AW_H3_CCU) /** @} */ diff --git a/include/hw/misc/allwinner-h3-dramc.h b/include/hw/misc/allwinner-h3-dramc.h index 60a13a6958..0b6c877ef7 100644 --- a/include/hw/misc/allwinner-h3-dramc.h +++ b/include/hw/misc/allwinner-h3-dramc.h @@ -58,9 +58,7 @@ */ #define TYPE_AW_H3_DRAMC "allwinner-h3-dramc" -typedef struct AwH3DramCtlState AwH3DramCtlState; -DECLARE_INSTANCE_CHECKER(AwH3DramCtlState, AW_H3_DRAMC, - TYPE_AW_H3_DRAMC) +OBJECT_DECLARE_SIMPLE_TYPE(AwH3DramCtlState, AW_H3_DRAMC) /** @} */ diff --git a/include/hw/misc/allwinner-h3-sysctrl.h b/include/hw/misc/allwinner-h3-sysctrl.h index 50baa8eb07..ec1c220535 100644 --- a/include/hw/misc/allwinner-h3-sysctrl.h +++ b/include/hw/misc/allwinner-h3-sysctrl.h @@ -43,9 +43,7 @@ */ #define TYPE_AW_H3_SYSCTRL "allwinner-h3-sysctrl" -typedef struct AwH3SysCtrlState AwH3SysCtrlState; -DECLARE_INSTANCE_CHECKER(AwH3SysCtrlState, AW_H3_SYSCTRL, - TYPE_AW_H3_SYSCTRL) +OBJECT_DECLARE_SIMPLE_TYPE(AwH3SysCtrlState, AW_H3_SYSCTRL) /** @} */ diff --git a/include/hw/misc/allwinner-sid.h b/include/hw/misc/allwinner-sid.h index b8e83bb7ce..3bfa887a96 100644 --- a/include/hw/misc/allwinner-sid.h +++ b/include/hw/misc/allwinner-sid.h @@ -30,9 +30,7 @@ */ #define TYPE_AW_SID "allwinner-sid" -typedef struct AwSidState AwSidState; -DECLARE_INSTANCE_CHECKER(AwSidState, AW_SID, - TYPE_AW_SID) +OBJECT_DECLARE_SIMPLE_TYPE(AwSidState, AW_SID) /** @} */ diff --git a/include/hw/misc/arm11scu.h b/include/hw/misc/arm11scu.h index 71b4bc9a22..e5c0282aec 100644 --- a/include/hw/misc/arm11scu.h +++ b/include/hw/misc/arm11scu.h @@ -15,9 +15,7 @@ #include "qom/object.h" #define TYPE_ARM11_SCU "arm11-scu" -typedef struct ARM11SCUState ARM11SCUState; -DECLARE_INSTANCE_CHECKER(ARM11SCUState, ARM11_SCU, - TYPE_ARM11_SCU) +OBJECT_DECLARE_SIMPLE_TYPE(ARM11SCUState, ARM11_SCU) struct ARM11SCUState { /*< private >*/ diff --git a/include/hw/misc/armsse-cpuid.h b/include/hw/misc/armsse-cpuid.h index 80691c7180..a61355e516 100644 --- a/include/hw/misc/armsse-cpuid.h +++ b/include/hw/misc/armsse-cpuid.h @@ -26,9 +26,7 @@ #include "qom/object.h" #define TYPE_ARMSSE_CPUID "armsse-cpuid" -typedef struct ARMSSECPUID ARMSSECPUID; -DECLARE_INSTANCE_CHECKER(ARMSSECPUID, ARMSSE_CPUID, - TYPE_ARMSSE_CPUID) +OBJECT_DECLARE_SIMPLE_TYPE(ARMSSECPUID, ARMSSE_CPUID) struct ARMSSECPUID { /*< private >*/ diff --git a/include/hw/misc/armsse-mhu.h b/include/hw/misc/armsse-mhu.h index 310643a022..2671b5b978 100644 --- a/include/hw/misc/armsse-mhu.h +++ b/include/hw/misc/armsse-mhu.h @@ -27,9 +27,7 @@ #include "qom/object.h" #define TYPE_ARMSSE_MHU "armsse-mhu" -typedef struct ARMSSEMHU ARMSSEMHU; -DECLARE_INSTANCE_CHECKER(ARMSSEMHU, ARMSSE_MHU, - TYPE_ARMSSE_MHU) +OBJECT_DECLARE_SIMPLE_TYPE(ARMSSEMHU, ARMSSE_MHU) struct ARMSSEMHU { /*< private >*/ diff --git a/include/hw/misc/aspeed_scu.h b/include/hw/misc/aspeed_scu.h index 8d3b14acd4..d49bfb02fb 100644 --- a/include/hw/misc/aspeed_scu.h +++ b/include/hw/misc/aspeed_scu.h @@ -15,10 +15,7 @@ #include "qom/object.h" #define TYPE_ASPEED_SCU "aspeed.scu" -typedef struct AspeedSCUClass AspeedSCUClass; -typedef struct AspeedSCUState AspeedSCUState; -DECLARE_OBJ_CHECKERS(AspeedSCUState, AspeedSCUClass, - ASPEED_SCU, TYPE_ASPEED_SCU) +OBJECT_DECLARE_TYPE(AspeedSCUState, AspeedSCUClass, ASPEED_SCU) #define TYPE_ASPEED_2400_SCU TYPE_ASPEED_SCU "-ast2400" #define TYPE_ASPEED_2500_SCU TYPE_ASPEED_SCU "-ast2500" #define TYPE_ASPEED_2600_SCU TYPE_ASPEED_SCU "-ast2600" diff --git a/include/hw/misc/aspeed_sdmc.h b/include/hw/misc/aspeed_sdmc.h index 3375afc89b..ec2d59a14f 100644 --- a/include/hw/misc/aspeed_sdmc.h +++ b/include/hw/misc/aspeed_sdmc.h @@ -13,10 +13,7 @@ #include "qom/object.h" #define TYPE_ASPEED_SDMC "aspeed.sdmc" -typedef struct AspeedSDMCClass AspeedSDMCClass; -typedef struct AspeedSDMCState AspeedSDMCState; -DECLARE_OBJ_CHECKERS(AspeedSDMCState, AspeedSDMCClass, - ASPEED_SDMC, TYPE_ASPEED_SDMC) +OBJECT_DECLARE_TYPE(AspeedSDMCState, AspeedSDMCClass, ASPEED_SDMC) #define TYPE_ASPEED_2400_SDMC TYPE_ASPEED_SDMC "-ast2400" #define TYPE_ASPEED_2500_SDMC TYPE_ASPEED_SDMC "-ast2500" #define TYPE_ASPEED_2600_SDMC TYPE_ASPEED_SDMC "-ast2600" diff --git a/include/hw/misc/aspeed_xdma.h b/include/hw/misc/aspeed_xdma.h index 0e62c04520..9869ef4728 100644 --- a/include/hw/misc/aspeed_xdma.h +++ b/include/hw/misc/aspeed_xdma.h @@ -13,9 +13,7 @@ #include "qom/object.h" #define TYPE_ASPEED_XDMA "aspeed.xdma" -typedef struct AspeedXDMAState AspeedXDMAState; -DECLARE_INSTANCE_CHECKER(AspeedXDMAState, ASPEED_XDMA, - TYPE_ASPEED_XDMA) +OBJECT_DECLARE_SIMPLE_TYPE(AspeedXDMAState, ASPEED_XDMA) #define ASPEED_XDMA_NUM_REGS (ASPEED_XDMA_REG_SIZE / sizeof(uint32_t)) #define ASPEED_XDMA_REG_SIZE 0x7C diff --git a/include/hw/misc/auxbus.h b/include/hw/misc/auxbus.h index f910d94118..b05799d2f7 100644 --- a/include/hw/misc/auxbus.h +++ b/include/hw/misc/auxbus.h @@ -29,15 +29,12 @@ #include "hw/qdev-core.h" #include "qom/object.h" -typedef struct AUXBus AUXBus; typedef struct AUXSlave AUXSlave; typedef enum AUXCommand AUXCommand; typedef enum AUXReply AUXReply; #define TYPE_AUXTOI2C "aux-to-i2c-bridge" -typedef struct AUXTOI2CState AUXTOI2CState; -DECLARE_INSTANCE_CHECKER(AUXTOI2CState, AUXTOI2C, - TYPE_AUXTOI2C) +OBJECT_DECLARE_SIMPLE_TYPE(AUXTOI2CState, AUXTOI2C) enum AUXCommand { WRITE_I2C = 0, @@ -58,8 +55,7 @@ enum AUXReply { }; #define TYPE_AUX_BUS "aux-bus" -DECLARE_INSTANCE_CHECKER(AUXBus, AUX_BUS, - TYPE_AUX_BUS) +OBJECT_DECLARE_SIMPLE_TYPE(AUXBus, AUX_BUS) struct AUXBus { /* < private > */ @@ -78,8 +74,7 @@ struct AUXBus { }; #define TYPE_AUX_SLAVE "aux-slave" -DECLARE_INSTANCE_CHECKER(AUXSlave, AUX_SLAVE, - TYPE_AUX_SLAVE) +OBJECT_DECLARE_SIMPLE_TYPE(AUXSlave, AUX_SLAVE) struct AUXSlave { /* < private > */ diff --git a/include/hw/misc/avr_power.h b/include/hw/misc/avr_power.h index 938ab3e21b..707df030b1 100644 --- a/include/hw/misc/avr_power.h +++ b/include/hw/misc/avr_power.h @@ -31,9 +31,7 @@ #define TYPE_AVR_MASK "avr-power" -typedef struct AVRMaskState AVRMaskState; -DECLARE_INSTANCE_CHECKER(AVRMaskState, AVR_MASK, - TYPE_AVR_MASK) +OBJECT_DECLARE_SIMPLE_TYPE(AVRMaskState, AVR_MASK) struct AVRMaskState { /* <private> */ diff --git a/include/hw/misc/bcm2835_mbox.h b/include/hw/misc/bcm2835_mbox.h index d8c8017f4e..ade27af25d 100644 --- a/include/hw/misc/bcm2835_mbox.h +++ b/include/hw/misc/bcm2835_mbox.h @@ -13,9 +13,7 @@ #include "qom/object.h" #define TYPE_BCM2835_MBOX "bcm2835-mbox" -typedef struct BCM2835MboxState BCM2835MboxState; -DECLARE_INSTANCE_CHECKER(BCM2835MboxState, BCM2835_MBOX, - TYPE_BCM2835_MBOX) +OBJECT_DECLARE_SIMPLE_TYPE(BCM2835MboxState, BCM2835_MBOX) typedef struct { uint32_t reg[MBOX_SIZE]; diff --git a/include/hw/misc/bcm2835_mphi.h b/include/hw/misc/bcm2835_mphi.h index 249511182e..751363f496 100644 --- a/include/hw/misc/bcm2835_mphi.h +++ b/include/hw/misc/bcm2835_mphi.h @@ -39,7 +39,6 @@ struct BCM2835MphiState { #define TYPE_BCM2835_MPHI "bcm2835-mphi" -DECLARE_INSTANCE_CHECKER(BCM2835MphiState, BCM2835_MPHI, - TYPE_BCM2835_MPHI) +OBJECT_DECLARE_SIMPLE_TYPE(BCM2835MphiState, BCM2835_MPHI) #endif diff --git a/include/hw/misc/bcm2835_property.h b/include/hw/misc/bcm2835_property.h index 5c827a1900..712b76b7a3 100644 --- a/include/hw/misc/bcm2835_property.h +++ b/include/hw/misc/bcm2835_property.h @@ -14,9 +14,7 @@ #include "qom/object.h" #define TYPE_BCM2835_PROPERTY "bcm2835-property" -typedef struct BCM2835PropertyState BCM2835PropertyState; -DECLARE_INSTANCE_CHECKER(BCM2835PropertyState, BCM2835_PROPERTY, - TYPE_BCM2835_PROPERTY) +OBJECT_DECLARE_SIMPLE_TYPE(BCM2835PropertyState, BCM2835_PROPERTY) struct BCM2835PropertyState { /*< private >*/ diff --git a/include/hw/misc/bcm2835_rng.h b/include/hw/misc/bcm2835_rng.h index fec76eef8e..7c1fb3ef40 100644 --- a/include/hw/misc/bcm2835_rng.h +++ b/include/hw/misc/bcm2835_rng.h @@ -14,9 +14,7 @@ #include "qom/object.h" #define TYPE_BCM2835_RNG "bcm2835-rng" -typedef struct BCM2835RngState BCM2835RngState; -DECLARE_INSTANCE_CHECKER(BCM2835RngState, BCM2835_RNG, - TYPE_BCM2835_RNG) +OBJECT_DECLARE_SIMPLE_TYPE(BCM2835RngState, BCM2835_RNG) struct BCM2835RngState { SysBusDevice busdev; diff --git a/include/hw/misc/bcm2835_thermal.h b/include/hw/misc/bcm2835_thermal.h index 5b827c970e..f90f9e487c 100644 --- a/include/hw/misc/bcm2835_thermal.h +++ b/include/hw/misc/bcm2835_thermal.h @@ -14,9 +14,7 @@ #define TYPE_BCM2835_THERMAL "bcm2835-thermal" -typedef struct Bcm2835ThermalState Bcm2835ThermalState; -DECLARE_INSTANCE_CHECKER(Bcm2835ThermalState, BCM2835_THERMAL, - TYPE_BCM2835_THERMAL) +OBJECT_DECLARE_SIMPLE_TYPE(Bcm2835ThermalState, BCM2835_THERMAL) struct Bcm2835ThermalState { /*< private >*/ diff --git a/include/hw/misc/grlib_ahb_apb_pnp.h b/include/hw/misc/grlib_ahb_apb_pnp.h index 34b18e3193..341451bff6 100644 --- a/include/hw/misc/grlib_ahb_apb_pnp.h +++ b/include/hw/misc/grlib_ahb_apb_pnp.h @@ -26,14 +26,10 @@ #include "qom/object.h" #define TYPE_GRLIB_AHB_PNP "grlib,ahbpnp" -typedef struct AHBPnp AHBPnp; -DECLARE_INSTANCE_CHECKER(AHBPnp, GRLIB_AHB_PNP, - TYPE_GRLIB_AHB_PNP) +OBJECT_DECLARE_SIMPLE_TYPE(AHBPnp, GRLIB_AHB_PNP) #define TYPE_GRLIB_APB_PNP "grlib,apbpnp" -typedef struct APBPnp APBPnp; -DECLARE_INSTANCE_CHECKER(APBPnp, GRLIB_APB_PNP, - TYPE_GRLIB_APB_PNP) +OBJECT_DECLARE_SIMPLE_TYPE(APBPnp, GRLIB_APB_PNP) void grlib_ahb_pnp_add_entry(AHBPnp *dev, uint32_t address, uint32_t mask, uint8_t vendor, uint16_t device, int slave, diff --git a/include/hw/misc/imx25_ccm.h b/include/hw/misc/imx25_ccm.h index 55c5db8815..c3b89018c6 100644 --- a/include/hw/misc/imx25_ccm.h +++ b/include/hw/misc/imx25_ccm.h @@ -64,9 +64,7 @@ CCTL_##name##_SHIFT) #define TYPE_IMX25_CCM "imx25.ccm" -typedef struct IMX25CCMState IMX25CCMState; -DECLARE_INSTANCE_CHECKER(IMX25CCMState, IMX25_CCM, - TYPE_IMX25_CCM) +OBJECT_DECLARE_SIMPLE_TYPE(IMX25CCMState, IMX25_CCM) struct IMX25CCMState { /* <private> */ diff --git a/include/hw/misc/imx31_ccm.h b/include/hw/misc/imx31_ccm.h index 25e280e976..18e08ee84f 100644 --- a/include/hw/misc/imx31_ccm.h +++ b/include/hw/misc/imx31_ccm.h @@ -73,9 +73,7 @@ PDR0_##name##_PODF_SHIFT) #define TYPE_IMX31_CCM "imx31.ccm" -typedef struct IMX31CCMState IMX31CCMState; -DECLARE_INSTANCE_CHECKER(IMX31CCMState, IMX31_CCM, - TYPE_IMX31_CCM) +OBJECT_DECLARE_SIMPLE_TYPE(IMX31CCMState, IMX31_CCM) struct IMX31CCMState { /* <private> */ diff --git a/include/hw/misc/imx6_ccm.h b/include/hw/misc/imx6_ccm.h index 85f32417d6..ccf46d7353 100644 --- a/include/hw/misc/imx6_ccm.h +++ b/include/hw/misc/imx6_ccm.h @@ -179,9 +179,7 @@ #define EXTRACT(value, name) extract32(value, name##_SHIFT, name##_LENGTH) #define TYPE_IMX6_CCM "imx6.ccm" -typedef struct IMX6CCMState IMX6CCMState; -DECLARE_INSTANCE_CHECKER(IMX6CCMState, IMX6_CCM, - TYPE_IMX6_CCM) +OBJECT_DECLARE_SIMPLE_TYPE(IMX6CCMState, IMX6_CCM) struct IMX6CCMState { /* <private> */ diff --git a/include/hw/misc/imx6_src.h b/include/hw/misc/imx6_src.h index 15b51757ba..f380da3810 100644 --- a/include/hw/misc/imx6_src.h +++ b/include/hw/misc/imx6_src.h @@ -58,9 +58,7 @@ #define EXTRACT(value, name) extract32(value, name##_SHIFT, name##_LENGTH) #define TYPE_IMX6_SRC "imx6.src" -typedef struct IMX6SRCState IMX6SRCState; -DECLARE_INSTANCE_CHECKER(IMX6SRCState, IMX6_SRC, - TYPE_IMX6_SRC) +OBJECT_DECLARE_SIMPLE_TYPE(IMX6SRCState, IMX6_SRC) struct IMX6SRCState { /* <private> */ diff --git a/include/hw/misc/imx6ul_ccm.h b/include/hw/misc/imx6ul_ccm.h index d614de0edd..edb5f784d5 100644 --- a/include/hw/misc/imx6ul_ccm.h +++ b/include/hw/misc/imx6ul_ccm.h @@ -208,9 +208,7 @@ #define CCM_ANALOG_PLL_LOCK (1 << 31); #define TYPE_IMX6UL_CCM "imx6ul.ccm" -typedef struct IMX6ULCCMState IMX6ULCCMState; -DECLARE_INSTANCE_CHECKER(IMX6ULCCMState, IMX6UL_CCM, - TYPE_IMX6UL_CCM) +OBJECT_DECLARE_SIMPLE_TYPE(IMX6ULCCMState, IMX6UL_CCM) struct IMX6ULCCMState { /* <private> */ diff --git a/include/hw/misc/imx7_ccm.h b/include/hw/misc/imx7_ccm.h index e2757622d0..dcaebfb4ef 100644 --- a/include/hw/misc/imx7_ccm.h +++ b/include/hw/misc/imx7_ccm.h @@ -105,9 +105,7 @@ enum IMX7PMURegisters { }; #define TYPE_IMX7_CCM "imx7.ccm" -typedef struct IMX7CCMState IMX7CCMState; -DECLARE_INSTANCE_CHECKER(IMX7CCMState, IMX7_CCM, - TYPE_IMX7_CCM) +OBJECT_DECLARE_SIMPLE_TYPE(IMX7CCMState, IMX7_CCM) struct IMX7CCMState { /* <private> */ @@ -121,9 +119,7 @@ struct IMX7CCMState { #define TYPE_IMX7_ANALOG "imx7.analog" -typedef struct IMX7AnalogState IMX7AnalogState; -DECLARE_INSTANCE_CHECKER(IMX7AnalogState, IMX7_ANALOG, - TYPE_IMX7_ANALOG) +OBJECT_DECLARE_SIMPLE_TYPE(IMX7AnalogState, IMX7_ANALOG) struct IMX7AnalogState { /* <private> */ diff --git a/include/hw/misc/imx7_gpr.h b/include/hw/misc/imx7_gpr.h index f80b3ed28c..df364bd8f0 100644 --- a/include/hw/misc/imx7_gpr.h +++ b/include/hw/misc/imx7_gpr.h @@ -17,9 +17,7 @@ #include "qom/object.h" #define TYPE_IMX7_GPR "imx7.gpr" -typedef struct IMX7GPRState IMX7GPRState; -DECLARE_INSTANCE_CHECKER(IMX7GPRState, IMX7_GPR, - TYPE_IMX7_GPR) +OBJECT_DECLARE_SIMPLE_TYPE(IMX7GPRState, IMX7_GPR) struct IMX7GPRState { /* <private> */ diff --git a/include/hw/misc/imx7_snvs.h b/include/hw/misc/imx7_snvs.h index ea5395c107..14a1d6fe6b 100644 --- a/include/hw/misc/imx7_snvs.h +++ b/include/hw/misc/imx7_snvs.h @@ -24,9 +24,7 @@ enum IMX7SNVSRegisters { }; #define TYPE_IMX7_SNVS "imx7.snvs" -typedef struct IMX7SNVSState IMX7SNVSState; -DECLARE_INSTANCE_CHECKER(IMX7SNVSState, IMX7_SNVS, - TYPE_IMX7_SNVS) +OBJECT_DECLARE_SIMPLE_TYPE(IMX7SNVSState, IMX7_SNVS) struct IMX7SNVSState { /* <private> */ diff --git a/include/hw/misc/imx_ccm.h b/include/hw/misc/imx_ccm.h index e9d82a2a50..7e5678e972 100644 --- a/include/hw/misc/imx_ccm.h +++ b/include/hw/misc/imx_ccm.h @@ -28,10 +28,7 @@ #define PLL_MFN(x) (((x) & 0x3ff) << 0) #define TYPE_IMX_CCM "imx.ccm" -typedef struct IMXCCMClass IMXCCMClass; -typedef struct IMXCCMState IMXCCMState; -DECLARE_OBJ_CHECKERS(IMXCCMState, IMXCCMClass, - IMX_CCM, TYPE_IMX_CCM) +OBJECT_DECLARE_TYPE(IMXCCMState, IMXCCMClass, IMX_CCM) struct IMXCCMState { /* <private> */ diff --git a/include/hw/misc/imx_rngc.h b/include/hw/misc/imx_rngc.h index f7b569cac5..34ad699225 100644 --- a/include/hw/misc/imx_rngc.h +++ b/include/hw/misc/imx_rngc.h @@ -14,9 +14,7 @@ #include "qom/object.h" #define TYPE_IMX_RNGC "imx.rngc" -typedef struct IMXRNGCState IMXRNGCState; -DECLARE_INSTANCE_CHECKER(IMXRNGCState, IMX_RNGC, - TYPE_IMX_RNGC) +OBJECT_DECLARE_SIMPLE_TYPE(IMXRNGCState, IMX_RNGC) struct IMXRNGCState { /*< private >*/ diff --git a/include/hw/misc/iotkit-secctl.h b/include/hw/misc/iotkit-secctl.h index d062ed43e7..54c212b515 100644 --- a/include/hw/misc/iotkit-secctl.h +++ b/include/hw/misc/iotkit-secctl.h @@ -59,9 +59,7 @@ #include "qom/object.h" #define TYPE_IOTKIT_SECCTL "iotkit-secctl" -typedef struct IoTKitSecCtl IoTKitSecCtl; -DECLARE_INSTANCE_CHECKER(IoTKitSecCtl, IOTKIT_SECCTL, - TYPE_IOTKIT_SECCTL) +OBJECT_DECLARE_SIMPLE_TYPE(IoTKitSecCtl, IOTKIT_SECCTL) #define IOTS_APB_PPC0_NUM_PORTS 3 #define IOTS_APB_PPC1_NUM_PORTS 1 diff --git a/include/hw/misc/iotkit-sysctl.h b/include/hw/misc/iotkit-sysctl.h index 22ceb5d76d..2b5636b218 100644 --- a/include/hw/misc/iotkit-sysctl.h +++ b/include/hw/misc/iotkit-sysctl.h @@ -31,9 +31,7 @@ #include "qom/object.h" #define TYPE_IOTKIT_SYSCTL "iotkit-sysctl" -typedef struct IoTKitSysCtl IoTKitSysCtl; -DECLARE_INSTANCE_CHECKER(IoTKitSysCtl, IOTKIT_SYSCTL, - TYPE_IOTKIT_SYSCTL) +OBJECT_DECLARE_SIMPLE_TYPE(IoTKitSysCtl, IOTKIT_SYSCTL) struct IoTKitSysCtl { /*< private >*/ diff --git a/include/hw/misc/iotkit-sysinfo.h b/include/hw/misc/iotkit-sysinfo.h index 23ae43e549..7e620e2eaf 100644 --- a/include/hw/misc/iotkit-sysinfo.h +++ b/include/hw/misc/iotkit-sysinfo.h @@ -26,9 +26,7 @@ #include "qom/object.h" #define TYPE_IOTKIT_SYSINFO "iotkit-sysinfo" -typedef struct IoTKitSysInfo IoTKitSysInfo; -DECLARE_INSTANCE_CHECKER(IoTKitSysInfo, IOTKIT_SYSINFO, - TYPE_IOTKIT_SYSINFO) +OBJECT_DECLARE_SIMPLE_TYPE(IoTKitSysInfo, IOTKIT_SYSINFO) struct IoTKitSysInfo { /*< private >*/ diff --git a/include/hw/misc/mac_via.h b/include/hw/misc/mac_via.h index 862cbba3ab..a59f0bd422 100644 --- a/include/hw/misc/mac_via.h +++ b/include/hw/misc/mac_via.h @@ -32,9 +32,7 @@ #define TYPE_MOS6522_Q800_VIA1 "mos6522-q800-via1" -typedef struct MOS6522Q800VIA1State MOS6522Q800VIA1State; -DECLARE_INSTANCE_CHECKER(MOS6522Q800VIA1State, MOS6522_Q800_VIA1, - TYPE_MOS6522_Q800_VIA1) +OBJECT_DECLARE_SIMPLE_TYPE(MOS6522Q800VIA1State, MOS6522_Q800_VIA1) struct MOS6522Q800VIA1State { /*< private >*/ @@ -68,9 +66,7 @@ struct MOS6522Q800VIA1State { #define VIA2_IRQ_ASC (1 << VIA2_IRQ_ASC_BIT) #define TYPE_MOS6522_Q800_VIA2 "mos6522-q800-via2" -typedef struct MOS6522Q800VIA2State MOS6522Q800VIA2State; -DECLARE_INSTANCE_CHECKER(MOS6522Q800VIA2State, MOS6522_Q800_VIA2, - TYPE_MOS6522_Q800_VIA2) +OBJECT_DECLARE_SIMPLE_TYPE(MOS6522Q800VIA2State, MOS6522_Q800_VIA2) struct MOS6522Q800VIA2State { /*< private >*/ @@ -79,9 +75,7 @@ struct MOS6522Q800VIA2State { #define TYPE_MAC_VIA "mac_via" -typedef struct MacVIAState MacVIAState; -DECLARE_INSTANCE_CHECKER(MacVIAState, MAC_VIA, - TYPE_MAC_VIA) +OBJECT_DECLARE_SIMPLE_TYPE(MacVIAState, MAC_VIA) struct MacVIAState { SysBusDevice busdev; diff --git a/include/hw/misc/macio/cuda.h b/include/hw/misc/macio/cuda.h index e738b6376f..a71deec968 100644 --- a/include/hw/misc/macio/cuda.h +++ b/include/hw/misc/macio/cuda.h @@ -63,17 +63,13 @@ struct MOS6522CUDAState { /*< private >*/ MOS6522State parent_obj; }; -typedef struct MOS6522CUDAState MOS6522CUDAState; #define TYPE_MOS6522_CUDA "mos6522-cuda" -DECLARE_INSTANCE_CHECKER(MOS6522CUDAState, MOS6522_CUDA, - TYPE_MOS6522_CUDA) +OBJECT_DECLARE_SIMPLE_TYPE(MOS6522CUDAState, MOS6522_CUDA) /* Cuda */ #define TYPE_CUDA "cuda" -typedef struct CUDAState CUDAState; -DECLARE_INSTANCE_CHECKER(CUDAState, CUDA, - TYPE_CUDA) +OBJECT_DECLARE_SIMPLE_TYPE(CUDAState, CUDA) struct CUDAState { /*< private >*/ diff --git a/include/hw/misc/macio/gpio.h b/include/hw/misc/macio/gpio.h index 1d0c8434ae..4dee09a9dd 100644 --- a/include/hw/misc/macio/gpio.h +++ b/include/hw/misc/macio/gpio.h @@ -31,9 +31,7 @@ #include "qom/object.h" #define TYPE_MACIO_GPIO "macio-gpio" -typedef struct MacIOGPIOState MacIOGPIOState; -DECLARE_INSTANCE_CHECKER(MacIOGPIOState, MACIO_GPIO, - TYPE_MACIO_GPIO) +OBJECT_DECLARE_SIMPLE_TYPE(MacIOGPIOState, MACIO_GPIO) struct MacIOGPIOState { /*< private >*/ diff --git a/include/hw/misc/macio/macio.h b/include/hw/misc/macio/macio.h index 02dbf37630..22b4e64b2c 100644 --- a/include/hw/misc/macio/macio.h +++ b/include/hw/misc/macio/macio.h @@ -40,9 +40,7 @@ /* MacIO virtual bus */ #define TYPE_MACIO_BUS "macio-bus" -typedef struct MacIOBusState MacIOBusState; -DECLARE_INSTANCE_CHECKER(MacIOBusState, MACIO_BUS, - TYPE_MACIO_BUS) +OBJECT_DECLARE_SIMPLE_TYPE(MacIOBusState, MACIO_BUS) struct MacIOBusState { /*< private >*/ @@ -51,9 +49,7 @@ struct MacIOBusState { /* MacIO IDE */ #define TYPE_MACIO_IDE "macio-ide" -typedef struct MACIOIDEState MACIOIDEState; -DECLARE_INSTANCE_CHECKER(MACIOIDEState, MACIO_IDE, - TYPE_MACIO_IDE) +OBJECT_DECLARE_SIMPLE_TYPE(MACIOIDEState, MACIO_IDE) struct MACIOIDEState { /*< private >*/ @@ -79,9 +75,7 @@ void macio_ide_init_drives(MACIOIDEState *ide, DriveInfo **hd_table); void macio_ide_register_dma(MACIOIDEState *ide); #define TYPE_MACIO "macio" -typedef struct MacIOState MacIOState; -DECLARE_INSTANCE_CHECKER(MacIOState, MACIO, - TYPE_MACIO) +OBJECT_DECLARE_SIMPLE_TYPE(MacIOState, MACIO) struct MacIOState { /*< private >*/ @@ -98,9 +92,7 @@ struct MacIOState { }; #define TYPE_OLDWORLD_MACIO "macio-oldworld" -typedef struct OldWorldMacIOState OldWorldMacIOState; -DECLARE_INSTANCE_CHECKER(OldWorldMacIOState, OLDWORLD_MACIO, - TYPE_OLDWORLD_MACIO) +OBJECT_DECLARE_SIMPLE_TYPE(OldWorldMacIOState, OLDWORLD_MACIO) struct OldWorldMacIOState { /*< private >*/ @@ -114,9 +106,7 @@ struct OldWorldMacIOState { }; #define TYPE_NEWWORLD_MACIO "macio-newworld" -typedef struct NewWorldMacIOState NewWorldMacIOState; -DECLARE_INSTANCE_CHECKER(NewWorldMacIOState, NEWWORLD_MACIO, - TYPE_NEWWORLD_MACIO) +OBJECT_DECLARE_SIMPLE_TYPE(NewWorldMacIOState, NEWWORLD_MACIO) struct NewWorldMacIOState { /*< private >*/ diff --git a/include/hw/misc/macio/pmu.h b/include/hw/misc/macio/pmu.h index 0d1a5c1406..78237d99a2 100644 --- a/include/hw/misc/macio/pmu.h +++ b/include/hw/misc/macio/pmu.h @@ -178,11 +178,9 @@ struct MOS6522PMUState { /*< private >*/ MOS6522State parent_obj; }; -typedef struct MOS6522PMUState MOS6522PMUState; #define TYPE_MOS6522_PMU "mos6522-pmu" -DECLARE_INSTANCE_CHECKER(MOS6522PMUState, MOS6522_PMU, - TYPE_MOS6522_PMU) +OBJECT_DECLARE_SIMPLE_TYPE(MOS6522PMUState, MOS6522_PMU) /** * PMUState: * @last_b: last value of B register @@ -231,10 +229,8 @@ struct PMUState { /* GPIO */ MacIOGPIOState *gpio; }; -typedef struct PMUState PMUState; #define TYPE_VIA_PMU "via-pmu" -DECLARE_INSTANCE_CHECKER(PMUState, VIA_PMU, - TYPE_VIA_PMU) +OBJECT_DECLARE_SIMPLE_TYPE(PMUState, VIA_PMU) #endif /* PMU_H */ diff --git a/include/hw/misc/max111x.h b/include/hw/misc/max111x.h index 6350a3f7c0..606cf1e0a2 100644 --- a/include/hw/misc/max111x.h +++ b/include/hw/misc/max111x.h @@ -45,12 +45,10 @@ struct MAX111xState { uint8_t input[8]; int inputs, com; }; -typedef struct MAX111xState MAX111xState; #define TYPE_MAX_111X "max111x" -DECLARE_INSTANCE_CHECKER(MAX111xState, MAX_111X, - TYPE_MAX_111X) +OBJECT_DECLARE_SIMPLE_TYPE(MAX111xState, MAX_111X) #define TYPE_MAX_1110 "max1110" #define TYPE_MAX_1111 "max1111" diff --git a/include/hw/misc/mips_cmgcr.h b/include/hw/misc/mips_cmgcr.h index 923df4f112..9fa58942d7 100644 --- a/include/hw/misc/mips_cmgcr.h +++ b/include/hw/misc/mips_cmgcr.h @@ -14,9 +14,7 @@ #include "qom/object.h" #define TYPE_MIPS_GCR "mips-gcr" -typedef struct MIPSGCRState MIPSGCRState; -DECLARE_INSTANCE_CHECKER(MIPSGCRState, MIPS_GCR, - TYPE_MIPS_GCR) +OBJECT_DECLARE_SIMPLE_TYPE(MIPSGCRState, MIPS_GCR) #define GCR_BASE_ADDR 0x1fbf8000ULL #define GCR_ADDRSPACE_SZ 0x8000 diff --git a/include/hw/misc/mips_cpc.h b/include/hw/misc/mips_cpc.h index 7dc188e8a2..e5dccea151 100644 --- a/include/hw/misc/mips_cpc.h +++ b/include/hw/misc/mips_cpc.h @@ -35,9 +35,7 @@ #define CPC_VP_RUNNING_OFS 0x30 #define TYPE_MIPS_CPC "mips-cpc" -typedef struct MIPSCPCState MIPSCPCState; -DECLARE_INSTANCE_CHECKER(MIPSCPCState, MIPS_CPC, - TYPE_MIPS_CPC) +OBJECT_DECLARE_SIMPLE_TYPE(MIPSCPCState, MIPS_CPC) struct MIPSCPCState { SysBusDevice parent_obj; diff --git a/include/hw/misc/mips_itu.h b/include/hw/misc/mips_itu.h index 7c19f61fbb..96347dbf65 100644 --- a/include/hw/misc/mips_itu.h +++ b/include/hw/misc/mips_itu.h @@ -24,9 +24,7 @@ #include "qom/object.h" #define TYPE_MIPS_ITU "mips-itu" -typedef struct MIPSITUState MIPSITUState; -DECLARE_INSTANCE_CHECKER(MIPSITUState, MIPS_ITU, - TYPE_MIPS_ITU) +OBJECT_DECLARE_SIMPLE_TYPE(MIPSITUState, MIPS_ITU) #define ITC_CELL_DEPTH_SHIFT 2 #define ITC_CELL_DEPTH (1u << ITC_CELL_DEPTH_SHIFT) diff --git a/include/hw/misc/mos6522.h b/include/hw/misc/mos6522.h index f73271ba67..fc95d22b0f 100644 --- a/include/hw/misc/mos6522.h +++ b/include/hw/misc/mos6522.h @@ -122,12 +122,9 @@ struct MOS6522State { qemu_irq irq; }; -typedef struct MOS6522State MOS6522State; #define TYPE_MOS6522 "mos6522" -typedef struct MOS6522DeviceClass MOS6522DeviceClass; -DECLARE_OBJ_CHECKERS(MOS6522State, MOS6522DeviceClass, - MOS6522, TYPE_MOS6522) +OBJECT_DECLARE_TYPE(MOS6522State, MOS6522DeviceClass, MOS6522) struct MOS6522DeviceClass { DeviceClass parent_class; diff --git a/include/hw/misc/mps2-fpgaio.h b/include/hw/misc/mps2-fpgaio.h index 991f5b731e..80f9227aa6 100644 --- a/include/hw/misc/mps2-fpgaio.h +++ b/include/hw/misc/mps2-fpgaio.h @@ -25,9 +25,7 @@ #include "qom/object.h" #define TYPE_MPS2_FPGAIO "mps2-fpgaio" -typedef struct MPS2FPGAIO MPS2FPGAIO; -DECLARE_INSTANCE_CHECKER(MPS2FPGAIO, MPS2_FPGAIO, - TYPE_MPS2_FPGAIO) +OBJECT_DECLARE_SIMPLE_TYPE(MPS2FPGAIO, MPS2_FPGAIO) struct MPS2FPGAIO { /*< private >*/ diff --git a/include/hw/misc/mps2-scc.h b/include/hw/misc/mps2-scc.h index 445e268b1f..e922b3c8e0 100644 --- a/include/hw/misc/mps2-scc.h +++ b/include/hw/misc/mps2-scc.h @@ -16,9 +16,7 @@ #include "qom/object.h" #define TYPE_MPS2_SCC "mps2-scc" -typedef struct MPS2SCC MPS2SCC; -DECLARE_INSTANCE_CHECKER(MPS2SCC, MPS2_SCC, - TYPE_MPS2_SCC) +OBJECT_DECLARE_SIMPLE_TYPE(MPS2SCC, MPS2_SCC) #define NUM_OSCCLK 3 diff --git a/include/hw/misc/msf2-sysreg.h b/include/hw/misc/msf2-sysreg.h index 625932354a..fc1890e710 100644 --- a/include/hw/misc/msf2-sysreg.h +++ b/include/hw/misc/msf2-sysreg.h @@ -62,9 +62,7 @@ enum { #define MSF2_SYSREG_MMIO_SIZE 0x300 #define TYPE_MSF2_SYSREG "msf2-sysreg" -typedef struct MSF2SysregState MSF2SysregState; -DECLARE_INSTANCE_CHECKER(MSF2SysregState, MSF2_SYSREG, - TYPE_MSF2_SYSREG) +OBJECT_DECLARE_SIMPLE_TYPE(MSF2SysregState, MSF2_SYSREG) struct MSF2SysregState { SysBusDevice parent_obj; diff --git a/include/hw/misc/nrf51_rng.h b/include/hw/misc/nrf51_rng.h index 7f2263a906..9aff9a76f8 100644 --- a/include/hw/misc/nrf51_rng.h +++ b/include/hw/misc/nrf51_rng.h @@ -38,9 +38,7 @@ #include "qemu/timer.h" #include "qom/object.h" #define TYPE_NRF51_RNG "nrf51_soc.rng" -typedef struct NRF51RNGState NRF51RNGState; -DECLARE_INSTANCE_CHECKER(NRF51RNGState, NRF51_RNG, - TYPE_NRF51_RNG) +OBJECT_DECLARE_SIMPLE_TYPE(NRF51RNGState, NRF51_RNG) #define NRF51_RNG_SIZE 0x1000 diff --git a/include/hw/misc/sifive_e_prci.h b/include/hw/misc/sifive_e_prci.h index 698b0b451c..262ca16181 100644 --- a/include/hw/misc/sifive_e_prci.h +++ b/include/hw/misc/sifive_e_prci.h @@ -18,6 +18,7 @@ #ifndef HW_SIFIVE_E_PRCI_H #define HW_SIFIVE_E_PRCI_H +#include "qom/object.h" enum { SIFIVE_E_PRCI_HFROSCCFG = 0x0, @@ -51,10 +52,11 @@ enum { #define TYPE_SIFIVE_E_PRCI "riscv.sifive.e.prci" -#define SIFIVE_E_PRCI(obj) \ - OBJECT_CHECK(SiFiveEPRCIState, (obj), TYPE_SIFIVE_E_PRCI) +typedef struct SiFiveEPRCIState SiFiveEPRCIState; +DECLARE_INSTANCE_CHECKER(SiFiveEPRCIState, SIFIVE_E_PRCI, + TYPE_SIFIVE_E_PRCI) -typedef struct SiFiveEPRCIState { +struct SiFiveEPRCIState { /*< private >*/ SysBusDevice parent_obj; @@ -64,7 +66,7 @@ typedef struct SiFiveEPRCIState { uint32_t hfxosccfg; uint32_t pllcfg; uint32_t plloutdiv; -} SiFiveEPRCIState; +}; DeviceState *sifive_e_prci_create(hwaddr addr); diff --git a/include/hw/misc/sifive_test.h b/include/hw/misc/sifive_test.h index 1ec416ac1b..88a38d00c5 100644 --- a/include/hw/misc/sifive_test.h +++ b/include/hw/misc/sifive_test.h @@ -20,19 +20,21 @@ #define HW_SIFIVE_TEST_H #include "hw/sysbus.h" +#include "qom/object.h" #define TYPE_SIFIVE_TEST "riscv.sifive.test" -#define SIFIVE_TEST(obj) \ - OBJECT_CHECK(SiFiveTestState, (obj), TYPE_SIFIVE_TEST) +typedef struct SiFiveTestState SiFiveTestState; +DECLARE_INSTANCE_CHECKER(SiFiveTestState, SIFIVE_TEST, + TYPE_SIFIVE_TEST) -typedef struct SiFiveTestState { +struct SiFiveTestState { /*< private >*/ SysBusDevice parent_obj; /*< public >*/ MemoryRegion mmio; -} SiFiveTestState; +}; enum { FINISHER_FAIL = 0x3333, diff --git a/include/hw/misc/sifive_u_otp.h b/include/hw/misc/sifive_u_otp.h index 639297564a..82c9176c8f 100644 --- a/include/hw/misc/sifive_u_otp.h +++ b/include/hw/misc/sifive_u_otp.h @@ -18,6 +18,7 @@ #ifndef HW_SIFIVE_U_OTP_H #define HW_SIFIVE_U_OTP_H +#include "qom/object.h" #define SIFIVE_U_OTP_PA 0x00 #define SIFIVE_U_OTP_PAIO 0x04 @@ -49,10 +50,11 @@ #define TYPE_SIFIVE_U_OTP "riscv.sifive.u.otp" -#define SIFIVE_U_OTP(obj) \ - OBJECT_CHECK(SiFiveUOTPState, (obj), TYPE_SIFIVE_U_OTP) +typedef struct SiFiveUOTPState SiFiveUOTPState; +DECLARE_INSTANCE_CHECKER(SiFiveUOTPState, SIFIVE_U_OTP, + TYPE_SIFIVE_U_OTP) -typedef struct SiFiveUOTPState { +struct SiFiveUOTPState { /*< private >*/ SysBusDevice parent_obj; @@ -75,6 +77,6 @@ typedef struct SiFiveUOTPState { uint32_t fuse[SIFIVE_U_OTP_NUM_FUSES]; /* config */ uint32_t serial; -} SiFiveUOTPState; +}; #endif /* HW_SIFIVE_U_OTP_H */ diff --git a/include/hw/misc/sifive_u_prci.h b/include/hw/misc/sifive_u_prci.h index 0a531fdadc..d9ebf40b7f 100644 --- a/include/hw/misc/sifive_u_prci.h +++ b/include/hw/misc/sifive_u_prci.h @@ -18,6 +18,7 @@ #ifndef HW_SIFIVE_U_PRCI_H #define HW_SIFIVE_U_PRCI_H +#include "qom/object.h" #define SIFIVE_U_PRCI_HFXOSCCFG 0x00 #define SIFIVE_U_PRCI_COREPLLCFG0 0x04 @@ -58,10 +59,11 @@ #define TYPE_SIFIVE_U_PRCI "riscv.sifive.u.prci" -#define SIFIVE_U_PRCI(obj) \ - OBJECT_CHECK(SiFiveUPRCIState, (obj), TYPE_SIFIVE_U_PRCI) +typedef struct SiFiveUPRCIState SiFiveUPRCIState; +DECLARE_INSTANCE_CHECKER(SiFiveUPRCIState, SIFIVE_U_PRCI, + TYPE_SIFIVE_U_PRCI) -typedef struct SiFiveUPRCIState { +struct SiFiveUPRCIState { /*< private >*/ SysBusDevice parent_obj; @@ -76,7 +78,7 @@ typedef struct SiFiveUPRCIState { uint32_t coreclksel; uint32_t devicesreset; uint32_t clkmuxstatus; -} SiFiveUPRCIState; +}; /* * Clock indexes for use by Device Tree data and the PRCI driver. diff --git a/include/hw/misc/stm32f2xx_syscfg.h b/include/hw/misc/stm32f2xx_syscfg.h index 82ccd7cc24..57a98c533d 100644 --- a/include/hw/misc/stm32f2xx_syscfg.h +++ b/include/hw/misc/stm32f2xx_syscfg.h @@ -37,9 +37,7 @@ #define SYSCFG_CMPCR 0x20 #define TYPE_STM32F2XX_SYSCFG "stm32f2xx-syscfg" -typedef struct STM32F2XXSyscfgState STM32F2XXSyscfgState; -DECLARE_INSTANCE_CHECKER(STM32F2XXSyscfgState, STM32F2XX_SYSCFG, - TYPE_STM32F2XX_SYSCFG) +OBJECT_DECLARE_SIMPLE_TYPE(STM32F2XXSyscfgState, STM32F2XX_SYSCFG) struct STM32F2XXSyscfgState { /* <private> */ diff --git a/include/hw/misc/stm32f4xx_exti.h b/include/hw/misc/stm32f4xx_exti.h index 4987c286ed..24b6fa7724 100644 --- a/include/hw/misc/stm32f4xx_exti.h +++ b/include/hw/misc/stm32f4xx_exti.h @@ -37,9 +37,7 @@ #define EXTI_PR 0x14 #define TYPE_STM32F4XX_EXTI "stm32f4xx-exti" -typedef struct STM32F4xxExtiState STM32F4xxExtiState; -DECLARE_INSTANCE_CHECKER(STM32F4xxExtiState, STM32F4XX_EXTI, - TYPE_STM32F4XX_EXTI) +OBJECT_DECLARE_SIMPLE_TYPE(STM32F4xxExtiState, STM32F4XX_EXTI) #define NUM_GPIO_EVENT_IN_LINES 16 #define NUM_INTERRUPT_OUT_LINES 16 diff --git a/include/hw/misc/stm32f4xx_syscfg.h b/include/hw/misc/stm32f4xx_syscfg.h index c3d89d4536..8c31feccd3 100644 --- a/include/hw/misc/stm32f4xx_syscfg.h +++ b/include/hw/misc/stm32f4xx_syscfg.h @@ -38,9 +38,7 @@ #define SYSCFG_CMPCR 0x20 #define TYPE_STM32F4XX_SYSCFG "stm32f4xx-syscfg" -typedef struct STM32F4xxSyscfgState STM32F4xxSyscfgState; -DECLARE_INSTANCE_CHECKER(STM32F4xxSyscfgState, STM32F4XX_SYSCFG, - TYPE_STM32F4XX_SYSCFG) +OBJECT_DECLARE_SIMPLE_TYPE(STM32F4xxSyscfgState, STM32F4XX_SYSCFG) #define SYSCFG_NUM_EXTICR 4 diff --git a/include/hw/misc/tz-mpc.h b/include/hw/misc/tz-mpc.h index 34e45fdb97..74d5d822cf 100644 --- a/include/hw/misc/tz-mpc.h +++ b/include/hw/misc/tz-mpc.h @@ -35,9 +35,7 @@ #include "qom/object.h" #define TYPE_TZ_MPC "tz-mpc" -typedef struct TZMPC TZMPC; -DECLARE_INSTANCE_CHECKER(TZMPC, TZ_MPC, - TYPE_TZ_MPC) +OBJECT_DECLARE_SIMPLE_TYPE(TZMPC, TZ_MPC) #define TZ_NUM_PORTS 16 diff --git a/include/hw/misc/tz-msc.h b/include/hw/misc/tz-msc.h index 7169f330ff..77cc7f2404 100644 --- a/include/hw/misc/tz-msc.h +++ b/include/hw/misc/tz-msc.h @@ -55,9 +55,7 @@ #include "qom/object.h" #define TYPE_TZ_MSC "tz-msc" -typedef struct TZMSC TZMSC; -DECLARE_INSTANCE_CHECKER(TZMSC, TZ_MSC, - TYPE_TZ_MSC) +OBJECT_DECLARE_SIMPLE_TYPE(TZMSC, TZ_MSC) struct TZMSC { /*< private >*/ diff --git a/include/hw/misc/tz-ppc.h b/include/hw/misc/tz-ppc.h index b5251b715e..021d671b29 100644 --- a/include/hw/misc/tz-ppc.h +++ b/include/hw/misc/tz-ppc.h @@ -69,9 +69,7 @@ #include "qom/object.h" #define TYPE_TZ_PPC "tz-ppc" -typedef struct TZPPC TZPPC; -DECLARE_INSTANCE_CHECKER(TZPPC, TZ_PPC, - TYPE_TZ_PPC) +OBJECT_DECLARE_SIMPLE_TYPE(TZPPC, TZ_PPC) #define TZ_NUM_PORTS 16 diff --git a/include/hw/misc/unimp.h b/include/hw/misc/unimp.h index 7c724bab94..518d627dc5 100644 --- a/include/hw/misc/unimp.h +++ b/include/hw/misc/unimp.h @@ -15,9 +15,7 @@ #define TYPE_UNIMPLEMENTED_DEVICE "unimplemented-device" -typedef struct UnimplementedDeviceState UnimplementedDeviceState; -DECLARE_INSTANCE_CHECKER(UnimplementedDeviceState, UNIMPLEMENTED_DEVICE, - TYPE_UNIMPLEMENTED_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(UnimplementedDeviceState, UNIMPLEMENTED_DEVICE) struct UnimplementedDeviceState { SysBusDevice parent_obj; diff --git a/include/hw/misc/zynq-xadc.h b/include/hw/misc/zynq-xadc.h index 052f47954f..602bfb4ab1 100644 --- a/include/hw/misc/zynq-xadc.h +++ b/include/hw/misc/zynq-xadc.h @@ -24,9 +24,7 @@ #define ZYNQ_XADC_FIFO_DEPTH 15 #define TYPE_ZYNQ_XADC "xlnx,zynq-xadc" -typedef struct ZynqXADCState ZynqXADCState; -DECLARE_INSTANCE_CHECKER(ZynqXADCState, ZYNQ_XADC, - TYPE_ZYNQ_XADC) +OBJECT_DECLARE_SIMPLE_TYPE(ZynqXADCState, ZYNQ_XADC) struct ZynqXADCState { /*< private >*/ diff --git a/include/hw/net/allwinner-sun8i-emac.h b/include/hw/net/allwinner-sun8i-emac.h index 89e56b815b..460a58f1ca 100644 --- a/include/hw/net/allwinner-sun8i-emac.h +++ b/include/hw/net/allwinner-sun8i-emac.h @@ -30,9 +30,7 @@ */ #define TYPE_AW_SUN8I_EMAC "allwinner-sun8i-emac" -typedef struct AwSun8iEmacState AwSun8iEmacState; -DECLARE_INSTANCE_CHECKER(AwSun8iEmacState, AW_SUN8I_EMAC, - TYPE_AW_SUN8I_EMAC) +OBJECT_DECLARE_SIMPLE_TYPE(AwSun8iEmacState, AW_SUN8I_EMAC) /** @} */ diff --git a/include/hw/net/allwinner_emac.h b/include/hw/net/allwinner_emac.h index f5f5b67939..534e748982 100644 --- a/include/hw/net/allwinner_emac.h +++ b/include/hw/net/allwinner_emac.h @@ -31,9 +31,7 @@ #include "qom/object.h" #define TYPE_AW_EMAC "allwinner-emac" -typedef struct AwEmacState AwEmacState; -DECLARE_INSTANCE_CHECKER(AwEmacState, AW_EMAC, - TYPE_AW_EMAC) +OBJECT_DECLARE_SIMPLE_TYPE(AwEmacState, AW_EMAC) /* * Allwinner EMAC register list diff --git a/include/hw/net/cadence_gem.h b/include/hw/net/cadence_gem.h index 89d2dab513..91ebb5c8ae 100644 --- a/include/hw/net/cadence_gem.h +++ b/include/hw/net/cadence_gem.h @@ -27,9 +27,7 @@ #include "qom/object.h" #define TYPE_CADENCE_GEM "cadence_gem" -typedef struct CadenceGEMState CadenceGEMState; -DECLARE_INSTANCE_CHECKER(CadenceGEMState, CADENCE_GEM, - TYPE_CADENCE_GEM) +OBJECT_DECLARE_SIMPLE_TYPE(CadenceGEMState, CADENCE_GEM) #include "net/net.h" #include "hw/sysbus.h" diff --git a/include/hw/net/ftgmac100.h b/include/hw/net/ftgmac100.h index c6b1c11fca..765d1538a4 100644 --- a/include/hw/net/ftgmac100.h +++ b/include/hw/net/ftgmac100.h @@ -12,9 +12,7 @@ #include "qom/object.h" #define TYPE_FTGMAC100 "ftgmac100" -typedef struct FTGMAC100State FTGMAC100State; -DECLARE_INSTANCE_CHECKER(FTGMAC100State, FTGMAC100, - TYPE_FTGMAC100) +OBJECT_DECLARE_SIMPLE_TYPE(FTGMAC100State, FTGMAC100) #include "hw/sysbus.h" #include "net/net.h" @@ -70,9 +68,7 @@ struct FTGMAC100State { }; #define TYPE_ASPEED_MII "aspeed-mmi" -typedef struct AspeedMiiState AspeedMiiState; -DECLARE_INSTANCE_CHECKER(AspeedMiiState, ASPEED_MII, - TYPE_ASPEED_MII) +OBJECT_DECLARE_SIMPLE_TYPE(AspeedMiiState, ASPEED_MII) /* * AST2600 MII controller diff --git a/include/hw/net/imx_fec.h b/include/hw/net/imx_fec.h index ffdbc304b6..e3a8755db9 100644 --- a/include/hw/net/imx_fec.h +++ b/include/hw/net/imx_fec.h @@ -26,9 +26,7 @@ #include "qom/object.h" #define TYPE_IMX_FEC "imx.fec" -typedef struct IMXFECState IMXFECState; -DECLARE_INSTANCE_CHECKER(IMXFECState, IMX_FEC, - TYPE_IMX_FEC) +OBJECT_DECLARE_SIMPLE_TYPE(IMXFECState, IMX_FEC) #define TYPE_IMX_ENET "imx.enet" diff --git a/include/hw/net/msf2-emac.h b/include/hw/net/msf2-emac.h index 68194d798c..846ba6e6dc 100644 --- a/include/hw/net/msf2-emac.h +++ b/include/hw/net/msf2-emac.h @@ -29,9 +29,7 @@ #include "qom/object.h" #define TYPE_MSS_EMAC "msf2-emac" -typedef struct MSF2EmacState MSF2EmacState; -DECLARE_INSTANCE_CHECKER(MSF2EmacState, MSS_EMAC, - TYPE_MSS_EMAC) +OBJECT_DECLARE_SIMPLE_TYPE(MSF2EmacState, MSS_EMAC) #define R_MAX (0x1a0 / 4) #define PHY_MAX_REGS 32 diff --git a/include/hw/nubus/mac-nubus-bridge.h b/include/hw/nubus/mac-nubus-bridge.h index 6856d7e095..36aa098dd4 100644 --- a/include/hw/nubus/mac-nubus-bridge.h +++ b/include/hw/nubus/mac-nubus-bridge.h @@ -13,9 +13,7 @@ #include "qom/object.h" #define TYPE_MAC_NUBUS_BRIDGE "mac-nubus-bridge" -typedef struct MacNubusState MacNubusState; -DECLARE_INSTANCE_CHECKER(MacNubusState, MAC_NUBUS_BRIDGE, - TYPE_MAC_NUBUS_BRIDGE) +OBJECT_DECLARE_SIMPLE_TYPE(MacNubusState, MAC_NUBUS_BRIDGE) struct MacNubusState { SysBusDevice sysbus_dev; diff --git a/include/hw/nubus/nubus.h b/include/hw/nubus/nubus.h index 9370f0d8f0..e2b5cf260b 100644 --- a/include/hw/nubus/nubus.h +++ b/include/hw/nubus/nubus.h @@ -23,14 +23,10 @@ #define NUBUS_LAST_SLOT 0xF #define TYPE_NUBUS_DEVICE "nubus-device" -typedef struct NubusDevice NubusDevice; -DECLARE_INSTANCE_CHECKER(NubusDevice, NUBUS_DEVICE, - TYPE_NUBUS_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(NubusDevice, NUBUS_DEVICE) #define TYPE_NUBUS_BUS "nubus-bus" -typedef struct NubusBus NubusBus; -DECLARE_INSTANCE_CHECKER(NubusBus, NUBUS_BUS, - TYPE_NUBUS_BUS) +OBJECT_DECLARE_SIMPLE_TYPE(NubusBus, NUBUS_BUS) #define TYPE_NUBUS_BRIDGE "nubus-bridge" diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h index f85393400c..8a9f5738bf 100644 --- a/include/hw/nvram/fw_cfg.h +++ b/include/hw/nvram/fw_cfg.h @@ -12,12 +12,9 @@ #define TYPE_FW_CFG_MEM "fw_cfg_mem" #define TYPE_FW_CFG_DATA_GENERATOR_INTERFACE "fw_cfg-data-generator" -DECLARE_INSTANCE_CHECKER(FWCfgState, FW_CFG, - TYPE_FW_CFG) -DECLARE_INSTANCE_CHECKER(FWCfgIoState, FW_CFG_IO, - TYPE_FW_CFG_IO) -DECLARE_INSTANCE_CHECKER(FWCfgMemState, FW_CFG_MEM, - TYPE_FW_CFG_MEM) +OBJECT_DECLARE_SIMPLE_TYPE(FWCfgState, FW_CFG) +OBJECT_DECLARE_SIMPLE_TYPE(FWCfgIoState, FW_CFG_IO) +OBJECT_DECLARE_SIMPLE_TYPE(FWCfgMemState, FW_CFG_MEM) typedef struct FWCfgDataGeneratorClass FWCfgDataGeneratorClass; DECLARE_CLASS_CHECKERS(FWCfgDataGeneratorClass, FW_CFG_DATA_GENERATOR, diff --git a/include/hw/nvram/nrf51_nvm.h b/include/hw/nvram/nrf51_nvm.h index ab99b09206..d85e788df5 100644 --- a/include/hw/nvram/nrf51_nvm.h +++ b/include/hw/nvram/nrf51_nvm.h @@ -25,9 +25,7 @@ #include "hw/sysbus.h" #include "qom/object.h" #define TYPE_NRF51_NVM "nrf51_soc.nvm" -typedef struct NRF51NVMState NRF51NVMState; -DECLARE_INSTANCE_CHECKER(NRF51NVMState, NRF51_NVM, - TYPE_NRF51_NVM) +OBJECT_DECLARE_SIMPLE_TYPE(NRF51NVMState, NRF51_NVM) #define NRF51_UICR_FIXTURE_SIZE 64 diff --git a/include/hw/pci-bridge/simba.h b/include/hw/pci-bridge/simba.h index 675aa5a990..979cb17435 100644 --- a/include/hw/pci-bridge/simba.h +++ b/include/hw/pci-bridge/simba.h @@ -35,10 +35,8 @@ struct SimbaPCIBridge { /*< private >*/ PCIBridge parent_obj; }; -typedef struct SimbaPCIBridge SimbaPCIBridge; #define TYPE_SIMBA_PCI_BRIDGE "pbm-bridge" -DECLARE_INSTANCE_CHECKER(SimbaPCIBridge, SIMBA_PCI_BRIDGE, - TYPE_SIMBA_PCI_BRIDGE) +OBJECT_DECLARE_SIMPLE_TYPE(SimbaPCIBridge, SIMBA_PCI_BRIDGE) #endif diff --git a/include/hw/pci-host/designware.h b/include/hw/pci-host/designware.h index 551eec3107..79869c7066 100644 --- a/include/hw/pci-host/designware.h +++ b/include/hw/pci-host/designware.h @@ -29,14 +29,10 @@ #include "qom/object.h" #define TYPE_DESIGNWARE_PCIE_HOST "designware-pcie-host" -typedef struct DesignwarePCIEHost DesignwarePCIEHost; -DECLARE_INSTANCE_CHECKER(DesignwarePCIEHost, DESIGNWARE_PCIE_HOST, - TYPE_DESIGNWARE_PCIE_HOST) +OBJECT_DECLARE_SIMPLE_TYPE(DesignwarePCIEHost, DESIGNWARE_PCIE_HOST) #define TYPE_DESIGNWARE_PCIE_ROOT "designware-pcie-root" -typedef struct DesignwarePCIERoot DesignwarePCIERoot; -DECLARE_INSTANCE_CHECKER(DesignwarePCIERoot, DESIGNWARE_PCIE_ROOT, - TYPE_DESIGNWARE_PCIE_ROOT) +OBJECT_DECLARE_SIMPLE_TYPE(DesignwarePCIERoot, DESIGNWARE_PCIE_ROOT) struct DesignwarePCIERoot; diff --git a/include/hw/pci-host/gpex.h b/include/hw/pci-host/gpex.h index 2f4e852eee..7abdb8b406 100644 --- a/include/hw/pci-host/gpex.h +++ b/include/hw/pci-host/gpex.h @@ -26,14 +26,10 @@ #include "qom/object.h" #define TYPE_GPEX_HOST "gpex-pcihost" -typedef struct GPEXHost GPEXHost; -DECLARE_INSTANCE_CHECKER(GPEXHost, GPEX_HOST, - TYPE_GPEX_HOST) +OBJECT_DECLARE_SIMPLE_TYPE(GPEXHost, GPEX_HOST) #define TYPE_GPEX_ROOT_DEVICE "gpex-root" -typedef struct GPEXRootState GPEXRootState; -DECLARE_INSTANCE_CHECKER(GPEXRootState, GPEX_ROOT_DEVICE, - TYPE_GPEX_ROOT_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(GPEXRootState, GPEX_ROOT_DEVICE) #define GPEX_NUM_IRQS 4 diff --git a/include/hw/pci-host/i440fx.h b/include/hw/pci-host/i440fx.h index 046c64576d..6c16eaf876 100644 --- a/include/hw/pci-host/i440fx.h +++ b/include/hw/pci-host/i440fx.h @@ -19,9 +19,7 @@ #define TYPE_I440FX_PCI_HOST_BRIDGE "i440FX-pcihost" #define TYPE_I440FX_PCI_DEVICE "i440FX" -typedef struct PCII440FXState PCII440FXState; -DECLARE_INSTANCE_CHECKER(PCII440FXState, I440FX_PCI_DEVICE, - TYPE_I440FX_PCI_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(PCII440FXState, I440FX_PCI_DEVICE) struct PCII440FXState { /*< private >*/ diff --git a/include/hw/pci-host/pnv_phb3.h b/include/hw/pci-host/pnv_phb3.h index 182f29d681..e2a2e36245 100644 --- a/include/hw/pci-host/pnv_phb3.h +++ b/include/hw/pci-host/pnv_phb3.h @@ -72,9 +72,7 @@ typedef struct PnvPhb3DMASpace { * PHB3 Power Bus Common Queue */ #define TYPE_PNV_PBCQ "pnv-pbcq" -typedef struct PnvPBCQState PnvPBCQState; -DECLARE_INSTANCE_CHECKER(PnvPBCQState, PNV_PBCQ, - TYPE_PNV_PBCQ) +OBJECT_DECLARE_SIMPLE_TYPE(PnvPBCQState, PNV_PBCQ) struct PnvPBCQState { DeviceState parent; @@ -118,8 +116,7 @@ typedef struct PnvPHB3RootPort { * PHB3 PCIe Host Bridge for PowerNV machines (POWER8) */ #define TYPE_PNV_PHB3 "pnv-phb3" -DECLARE_INSTANCE_CHECKER(PnvPHB3, PNV_PHB3, - TYPE_PNV_PHB3) +OBJECT_DECLARE_SIMPLE_TYPE(PnvPHB3, PNV_PHB3) #define PNV_PHB3_NUM_M64 16 #define PNV_PHB3_NUM_REGS (0x1000 >> 3) diff --git a/include/hw/pci-host/pnv_phb4.h b/include/hw/pci-host/pnv_phb4.h index 15a4633178..27556ae534 100644 --- a/include/hw/pci-host/pnv_phb4.h +++ b/include/hw/pci-host/pnv_phb4.h @@ -15,7 +15,6 @@ #include "hw/ppc/xive.h" #include "qom/object.h" -typedef struct PnvPhb4PecState PnvPhb4PecState; typedef struct PnvPhb4PecStack PnvPhb4PecStack; typedef struct PnvPHB4 PnvPHB4; typedef struct PnvChip PnvChip; @@ -58,8 +57,7 @@ typedef struct PnvPHB4RootPort { * PHB4 PCIe Host Bridge for PowerNV machines (POWER9) */ #define TYPE_PNV_PHB4 "pnv-phb4" -DECLARE_INSTANCE_CHECKER(PnvPHB4, PNV_PHB4, - TYPE_PNV_PHB4) +OBJECT_DECLARE_SIMPLE_TYPE(PnvPHB4, PNV_PHB4) #define PNV_PHB4_MAX_LSIs 8 #define PNV_PHB4_MAX_INTs 4096 @@ -142,13 +140,10 @@ extern const MemoryRegionOps pnv_phb4_xscom_ops; * PHB4 PEC (PCI Express Controller) */ #define TYPE_PNV_PHB4_PEC "pnv-phb4-pec" -typedef struct PnvPhb4PecClass PnvPhb4PecClass; -DECLARE_OBJ_CHECKERS(PnvPhb4PecState, PnvPhb4PecClass, - PNV_PHB4_PEC, TYPE_PNV_PHB4_PEC) +OBJECT_DECLARE_TYPE(PnvPhb4PecState, PnvPhb4PecClass, PNV_PHB4_PEC) #define TYPE_PNV_PHB4_PEC_STACK "pnv-phb4-pec-stack" -DECLARE_INSTANCE_CHECKER(PnvPhb4PecStack, PNV_PHB4_PEC_STACK, - TYPE_PNV_PHB4_PEC_STACK) +OBJECT_DECLARE_SIMPLE_TYPE(PnvPhb4PecStack, PNV_PHB4_PEC_STACK) /* Per-stack data */ struct PnvPhb4PecStack { diff --git a/include/hw/pci-host/q35.h b/include/hw/pci-host/q35.h index 0f5a534f77..bbb9581765 100644 --- a/include/hw/pci-host/q35.h +++ b/include/hw/pci-host/q35.h @@ -30,14 +30,10 @@ #include "qom/object.h" #define TYPE_Q35_HOST_DEVICE "q35-pcihost" -typedef struct Q35PCIHost Q35PCIHost; -DECLARE_INSTANCE_CHECKER(Q35PCIHost, Q35_HOST_DEVICE, - TYPE_Q35_HOST_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(Q35PCIHost, Q35_HOST_DEVICE) #define TYPE_MCH_PCI_DEVICE "mch" -typedef struct MCHPCIState MCHPCIState; -DECLARE_INSTANCE_CHECKER(MCHPCIState, MCH_PCI_DEVICE, - TYPE_MCH_PCI_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(MCHPCIState, MCH_PCI_DEVICE) struct MCHPCIState { /*< private >*/ diff --git a/include/hw/pci-host/sabre.h b/include/hw/pci-host/sabre.h index 7a76de4b9e..01190241bb 100644 --- a/include/hw/pci-host/sabre.h +++ b/include/hw/pci-host/sabre.h @@ -20,11 +20,9 @@ struct SabrePCIState { PCIDevice parent_obj; }; -typedef struct SabrePCIState SabrePCIState; #define TYPE_SABRE_PCI_DEVICE "sabre-pci" -DECLARE_INSTANCE_CHECKER(SabrePCIState, SABRE_PCI_DEVICE, - TYPE_SABRE_PCI_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(SabrePCIState, SABRE_PCI_DEVICE) struct SabreState { PCIHostState parent_obj; @@ -48,10 +46,8 @@ struct SabreState { uint32_t reset_control; unsigned int nr_resets; }; -typedef struct SabreState SabreState; #define TYPE_SABRE "sabre" -DECLARE_INSTANCE_CHECKER(SabreState, SABRE, - TYPE_SABRE) +OBJECT_DECLARE_SIMPLE_TYPE(SabreState, SABRE) #endif diff --git a/include/hw/pci-host/spapr.h b/include/hw/pci-host/spapr.h index 0431ce1048..04917f31ef 100644 --- a/include/hw/pci-host/spapr.h +++ b/include/hw/pci-host/spapr.h @@ -28,9 +28,7 @@ #define TYPE_SPAPR_PCI_HOST_BRIDGE "spapr-pci-host-bridge" -typedef struct SpaprPhbState SpaprPhbState; -DECLARE_INSTANCE_CHECKER(SpaprPhbState, SPAPR_PCI_HOST_BRIDGE, - TYPE_SPAPR_PCI_HOST_BRIDGE) +OBJECT_DECLARE_SIMPLE_TYPE(SpaprPhbState, SPAPR_PCI_HOST_BRIDGE) #define SPAPR_PCI_DMA_MAX_WINDOWS 2 diff --git a/include/hw/pci-host/uninorth.h b/include/hw/pci-host/uninorth.h index d10c598298..a6ba5f21a8 100644 --- a/include/hw/pci-host/uninorth.h +++ b/include/hw/pci-host/uninorth.h @@ -63,10 +63,8 @@ struct UNINState { MemoryRegion mem; }; -typedef struct UNINState UNINState; #define TYPE_UNI_NORTH "uni-north" -DECLARE_INSTANCE_CHECKER(UNINState, UNI_NORTH, - TYPE_UNI_NORTH) +OBJECT_DECLARE_SIMPLE_TYPE(UNINState, UNI_NORTH) #endif /* UNINORTH_H */ diff --git a/include/hw/pci-host/xilinx-pcie.h b/include/hw/pci-host/xilinx-pcie.h index 6058c8c9e2..f079e50db4 100644 --- a/include/hw/pci-host/xilinx-pcie.h +++ b/include/hw/pci-host/xilinx-pcie.h @@ -27,14 +27,10 @@ #include "qom/object.h" #define TYPE_XILINX_PCIE_HOST "xilinx-pcie-host" -typedef struct XilinxPCIEHost XilinxPCIEHost; -DECLARE_INSTANCE_CHECKER(XilinxPCIEHost, XILINX_PCIE_HOST, - TYPE_XILINX_PCIE_HOST) +OBJECT_DECLARE_SIMPLE_TYPE(XilinxPCIEHost, XILINX_PCIE_HOST) #define TYPE_XILINX_PCIE_ROOT "xilinx-pcie-root" -typedef struct XilinxPCIERoot XilinxPCIERoot; -DECLARE_INSTANCE_CHECKER(XilinxPCIERoot, XILINX_PCIE_ROOT, - TYPE_XILINX_PCIE_ROOT) +OBJECT_DECLARE_SIMPLE_TYPE(XilinxPCIERoot, XILINX_PCIE_ROOT) struct XilinxPCIERoot { PCIBridge parent_obj; diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index c13ae1f858..0a59a06b14 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -394,9 +394,7 @@ typedef int (*pci_map_irq_fn)(PCIDevice *pci_dev, int irq_num); typedef PCIINTxRoute (*pci_route_irq_fn)(void *opaque, int pin); #define TYPE_PCI_BUS "PCI" -typedef struct PCIBusClass PCIBusClass; -DECLARE_OBJ_CHECKERS(PCIBus, PCIBusClass, - PCI_BUS, TYPE_PCI_BUS) +OBJECT_DECLARE_TYPE(PCIBus, PCIBusClass, PCI_BUS) #define TYPE_PCIE_BUS "PCIE" bool pci_bus_is_express(PCIBus *bus); diff --git a/include/hw/pci/pci_bridge.h b/include/hw/pci/pci_bridge.h index 7ab145955a..a94d350034 100644 --- a/include/hw/pci/pci_bridge.h +++ b/include/hw/pci/pci_bridge.h @@ -51,8 +51,7 @@ struct PCIBridgeWindows { }; #define TYPE_PCI_BRIDGE "base-pci-bridge" -DECLARE_INSTANCE_CHECKER(PCIBridge, PCI_BRIDGE, - TYPE_PCI_BRIDGE) +OBJECT_DECLARE_SIMPLE_TYPE(PCIBridge, PCI_BRIDGE) struct PCIBridge { /*< private >*/ diff --git a/include/hw/pci/pci_host.h b/include/hw/pci/pci_host.h index d1fc1c3604..52e038c019 100644 --- a/include/hw/pci/pci_host.h +++ b/include/hw/pci/pci_host.h @@ -32,9 +32,7 @@ #include "qom/object.h" #define TYPE_PCI_HOST_BRIDGE "pci-host-bridge" -typedef struct PCIHostBridgeClass PCIHostBridgeClass; -DECLARE_OBJ_CHECKERS(PCIHostState, PCIHostBridgeClass, - PCI_HOST_BRIDGE, TYPE_PCI_HOST_BRIDGE) +OBJECT_DECLARE_TYPE(PCIHostState, PCIHostBridgeClass, PCI_HOST_BRIDGE) struct PCIHostState { SysBusDevice busdev; diff --git a/include/hw/pci/pcie_host.h b/include/hw/pci/pcie_host.h index f512646c0c..076457b270 100644 --- a/include/hw/pci/pcie_host.h +++ b/include/hw/pci/pcie_host.h @@ -26,8 +26,7 @@ #include "qom/object.h" #define TYPE_PCIE_HOST_BRIDGE "pcie-host-bridge" -DECLARE_INSTANCE_CHECKER(PCIExpressHost, PCIE_HOST_BRIDGE, - TYPE_PCIE_HOST_BRIDGE) +OBJECT_DECLARE_SIMPLE_TYPE(PCIExpressHost, PCIE_HOST_BRIDGE) #define PCIE_HOST_MCFG_BASE "MCFG" #define PCIE_HOST_MCFG_SIZE "mcfg_size" diff --git a/include/hw/pci/pcie_port.h b/include/hw/pci/pcie_port.h index 2463c07fa7..bea8ecad0f 100644 --- a/include/hw/pci/pcie_port.h +++ b/include/hw/pci/pcie_port.h @@ -26,8 +26,7 @@ #include "qom/object.h" #define TYPE_PCIE_PORT "pcie-port" -DECLARE_INSTANCE_CHECKER(PCIEPort, PCIE_PORT, - TYPE_PCIE_PORT) +OBJECT_DECLARE_SIMPLE_TYPE(PCIEPort, PCIE_PORT) struct PCIEPort { /*< private >*/ @@ -41,8 +40,7 @@ struct PCIEPort { void pcie_port_init_reg(PCIDevice *d); #define TYPE_PCIE_SLOT "pcie-slot" -DECLARE_INSTANCE_CHECKER(PCIESlot, PCIE_SLOT, - TYPE_PCIE_SLOT) +OBJECT_DECLARE_SIMPLE_TYPE(PCIESlot, PCIE_SLOT) struct PCIESlot { /*< private >*/ diff --git a/include/hw/pcmcia.h b/include/hw/pcmcia.h index fb40ae7e09..e3ba44e0bf 100644 --- a/include/hw/pcmcia.h +++ b/include/hw/pcmcia.h @@ -12,10 +12,7 @@ typedef struct PCMCIASocket { } PCMCIASocket; #define TYPE_PCMCIA_CARD "pcmcia-card" -typedef struct PCMCIACardClass PCMCIACardClass; -typedef struct PCMCIACardState PCMCIACardState; -DECLARE_OBJ_CHECKERS(PCMCIACardState, PCMCIACardClass, - PCMCIA_CARD, TYPE_PCMCIA_CARD) +OBJECT_DECLARE_TYPE(PCMCIACardState, PCMCIACardClass, PCMCIA_CARD) struct PCMCIACardState { /*< private >*/ diff --git a/include/hw/platform-bus.h b/include/hw/platform-bus.h index 0d035e1b71..1f3d1ce869 100644 --- a/include/hw/platform-bus.h +++ b/include/hw/platform-bus.h @@ -25,11 +25,9 @@ #include "hw/sysbus.h" #include "qom/object.h" -typedef struct PlatformBusDevice PlatformBusDevice; #define TYPE_PLATFORM_BUS_DEVICE "platform-bus-device" -DECLARE_INSTANCE_CHECKER(PlatformBusDevice, PLATFORM_BUS_DEVICE, - TYPE_PLATFORM_BUS_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(PlatformBusDevice, PLATFORM_BUS_DEVICE) struct PlatformBusDevice { /*< private >*/ diff --git a/include/hw/ppc/mac_dbdma.h b/include/hw/ppc/mac_dbdma.h index 9166d5f758..4a3f644516 100644 --- a/include/hw/ppc/mac_dbdma.h +++ b/include/hw/ppc/mac_dbdma.h @@ -178,7 +178,6 @@ void DBDMA_register_channel(void *dbdma, int nchan, qemu_irq irq, void DBDMA_kick(DBDMAState *dbdma); #define TYPE_MAC_DBDMA "mac-dbdma" -DECLARE_INSTANCE_CHECKER(DBDMAState, MAC_DBDMA, - TYPE_MAC_DBDMA) +OBJECT_DECLARE_SIMPLE_TYPE(DBDMAState, MAC_DBDMA) #endif diff --git a/include/hw/ppc/openpic.h b/include/hw/ppc/openpic.h index 61908c7858..74ff44bff0 100644 --- a/include/hw/ppc/openpic.h +++ b/include/hw/ppc/openpic.h @@ -137,9 +137,7 @@ typedef struct IRQDest { } IRQDest; #define TYPE_OPENPIC "openpic" -typedef struct OpenPICState OpenPICState; -DECLARE_INSTANCE_CHECKER(OpenPICState, OPENPIC, - TYPE_OPENPIC) +OBJECT_DECLARE_SIMPLE_TYPE(OpenPICState, OPENPIC) struct OpenPICState { /*< private >*/ diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h index b4b2b24d80..dd2535ab96 100644 --- a/include/hw/ppc/pnv.h +++ b/include/hw/ppc/pnv.h @@ -36,7 +36,7 @@ #define TYPE_PNV_CHIP "pnv-chip" OBJECT_DECLARE_TYPE(PnvChip, PnvChipClass, - pnv_chip, PNV_CHIP) + PNV_CHIP) struct PnvChip { /*< private >*/ diff --git a/include/hw/ppc/pnv_core.h b/include/hw/ppc/pnv_core.h index 5cb22c2fa9..f15829dfae 100644 --- a/include/hw/ppc/pnv_core.h +++ b/include/hw/ppc/pnv_core.h @@ -26,7 +26,7 @@ #define TYPE_PNV_CORE "powernv-cpu-core" OBJECT_DECLARE_TYPE(PnvCore, PnvCoreClass, - pnv_core, PNV_CORE) + PNV_CORE) typedef struct PnvChip PnvChip; @@ -62,9 +62,7 @@ static inline PnvCPUState *pnv_cpu_state(PowerPCCPU *cpu) } #define TYPE_PNV_QUAD "powernv-cpu-quad" -typedef struct PnvQuad PnvQuad; -DECLARE_INSTANCE_CHECKER(PnvQuad, PNV_QUAD, - TYPE_PNV_QUAD) +OBJECT_DECLARE_SIMPLE_TYPE(PnvQuad, PNV_QUAD) struct PnvQuad { DeviceState parent_obj; diff --git a/include/hw/ppc/pnv_homer.h b/include/hw/ppc/pnv_homer.h index 0978812713..7d29db8b47 100644 --- a/include/hw/ppc/pnv_homer.h +++ b/include/hw/ppc/pnv_homer.h @@ -25,7 +25,7 @@ #define TYPE_PNV_HOMER "pnv-homer" OBJECT_DECLARE_TYPE(PnvHomer, PnvHomerClass, - pnv_homer, PNV_HOMER) + PNV_HOMER) #define TYPE_PNV8_HOMER TYPE_PNV_HOMER "-POWER8" DECLARE_INSTANCE_CHECKER(PnvHomer, PNV8_HOMER, TYPE_PNV8_HOMER) diff --git a/include/hw/ppc/pnv_occ.h b/include/hw/ppc/pnv_occ.h index b79e3440be..6219f588fd 100644 --- a/include/hw/ppc/pnv_occ.h +++ b/include/hw/ppc/pnv_occ.h @@ -25,7 +25,7 @@ #define TYPE_PNV_OCC "pnv-occ" OBJECT_DECLARE_TYPE(PnvOCC, PnvOCCClass, - pnv_occ, PNV_OCC) + PNV_OCC) #define TYPE_PNV8_OCC TYPE_PNV_OCC "-POWER8" DECLARE_INSTANCE_CHECKER(PnvOCC, PNV8_OCC, TYPE_PNV8_OCC) diff --git a/include/hw/ppc/pnv_pnor.h b/include/hw/ppc/pnv_pnor.h index 1ec4098bb9..99f9a3adfb 100644 --- a/include/hw/ppc/pnv_pnor.h +++ b/include/hw/ppc/pnv_pnor.h @@ -16,9 +16,7 @@ #define PNOR_SPI_OFFSET 0x0c000000UL #define TYPE_PNV_PNOR "pnv-pnor" -typedef struct PnvPnor PnvPnor; -DECLARE_INSTANCE_CHECKER(PnvPnor, PNV_PNOR, - TYPE_PNV_PNOR) +OBJECT_DECLARE_SIMPLE_TYPE(PnvPnor, PNV_PNOR) struct PnvPnor { SysBusDevice parent_obj; diff --git a/include/hw/ppc/pnv_psi.h b/include/hw/ppc/pnv_psi.h index 0034db44c3..682b09f874 100644 --- a/include/hw/ppc/pnv_psi.h +++ b/include/hw/ppc/pnv_psi.h @@ -27,7 +27,7 @@ #define TYPE_PNV_PSI "pnv-psi" OBJECT_DECLARE_TYPE(PnvPsi, PnvPsiClass, - pnv_psi, PNV_PSI) + PNV_PSI) #define PSIHB_XSCOM_MAX 0x20 @@ -51,9 +51,7 @@ struct PnvPsi { }; #define TYPE_PNV8_PSI TYPE_PNV_PSI "-POWER8" -typedef struct Pnv8Psi Pnv8Psi; -DECLARE_INSTANCE_CHECKER(Pnv8Psi, PNV8_PSI, - TYPE_PNV8_PSI) +OBJECT_DECLARE_SIMPLE_TYPE(Pnv8Psi, PNV8_PSI) struct Pnv8Psi { PnvPsi parent; @@ -62,9 +60,7 @@ struct Pnv8Psi { }; #define TYPE_PNV9_PSI TYPE_PNV_PSI "-POWER9" -typedef struct Pnv9Psi Pnv9Psi; -DECLARE_INSTANCE_CHECKER(Pnv9Psi, PNV9_PSI, - TYPE_PNV9_PSI) +OBJECT_DECLARE_SIMPLE_TYPE(Pnv9Psi, PNV9_PSI) struct Pnv9Psi { PnvPsi parent; diff --git a/include/hw/ppc/pnv_xive.h b/include/hw/ppc/pnv_xive.h index 29d5debd1c..7928e27963 100644 --- a/include/hw/ppc/pnv_xive.h +++ b/include/hw/ppc/pnv_xive.h @@ -17,7 +17,7 @@ struct PnvChip; #define TYPE_PNV_XIVE "pnv-xive" OBJECT_DECLARE_TYPE(PnvXive, PnvXiveClass, - pnv_xive, PNV_XIVE) + PNV_XIVE) #define XIVE_BLOCK_MAX 16 diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index c8cd63bc06..194f3b9d07 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -28,9 +28,7 @@ typedef struct SpaprPendingHpt SpaprPendingHpt; #define TYPE_SPAPR_RTC "spapr-rtc" -typedef struct SpaprRtcState SpaprRtcState; -DECLARE_INSTANCE_CHECKER(SpaprRtcState, SPAPR_RTC, - TYPE_SPAPR_RTC) +OBJECT_DECLARE_SIMPLE_TYPE(SpaprRtcState, SPAPR_RTC) struct SpaprRtcState { /*< private >*/ @@ -39,12 +37,9 @@ struct SpaprRtcState { }; typedef struct SpaprDimmState SpaprDimmState; -typedef struct SpaprMachineClass SpaprMachineClass; #define TYPE_SPAPR_MACHINE "spapr-machine" -typedef struct SpaprMachineState SpaprMachineState; -DECLARE_OBJ_CHECKERS(SpaprMachineState, SpaprMachineClass, - SPAPR_MACHINE, TYPE_SPAPR_MACHINE) +OBJECT_DECLARE_TYPE(SpaprMachineState, SpaprMachineClass, SPAPR_MACHINE) typedef enum { SPAPR_RESIZE_HPT_DEFAULT = 0, @@ -784,11 +779,9 @@ static inline void spapr_dt_irq(uint32_t *intspec, int irq, bool is_lsi) intspec[1] = is_lsi ? cpu_to_be32(1) : 0; } -typedef struct SpaprTceTable SpaprTceTable; #define TYPE_SPAPR_TCE_TABLE "spapr-tce-table" -DECLARE_INSTANCE_CHECKER(SpaprTceTable, SPAPR_TCE_TABLE, - TYPE_SPAPR_TCE_TABLE) +OBJECT_DECLARE_SIMPLE_TYPE(SpaprTceTable, SPAPR_TCE_TABLE) #define TYPE_SPAPR_IOMMU_MEMORY_REGION "spapr-iommu-memory-region" DECLARE_INSTANCE_CHECKER(IOMMUMemoryRegion, SPAPR_IOMMU_MEMORY_REGION, diff --git a/include/hw/ppc/spapr_cpu_core.h b/include/hw/ppc/spapr_cpu_core.h index 4022917168..dab3dfc76c 100644 --- a/include/hw/ppc/spapr_cpu_core.h +++ b/include/hw/ppc/spapr_cpu_core.h @@ -17,7 +17,7 @@ #define TYPE_SPAPR_CPU_CORE "spapr-cpu-core" OBJECT_DECLARE_TYPE(SpaprCpuCore, SpaprCpuCoreClass, - spapr_cpu_core, SPAPR_CPU_CORE) + SPAPR_CPU_CORE) #define SPAPR_CPU_CORE_TYPE_NAME(model) model "-" TYPE_SPAPR_CPU_CORE diff --git a/include/hw/ppc/spapr_tpm_proxy.h b/include/hw/ppc/spapr_tpm_proxy.h index 300c81b1f0..96d2a9697e 100644 --- a/include/hw/ppc/spapr_tpm_proxy.h +++ b/include/hw/ppc/spapr_tpm_proxy.h @@ -17,9 +17,7 @@ #include "hw/qdev-core.h" #define TYPE_SPAPR_TPM_PROXY "spapr-tpm-proxy" -typedef struct SpaprTpmProxy SpaprTpmProxy; -DECLARE_INSTANCE_CHECKER(SpaprTpmProxy, SPAPR_TPM_PROXY, - TYPE_SPAPR_TPM_PROXY) +OBJECT_DECLARE_SIMPLE_TYPE(SpaprTpmProxy, SPAPR_TPM_PROXY) struct SpaprTpmProxy { /*< private >*/ diff --git a/include/hw/ppc/spapr_vio.h b/include/hw/ppc/spapr_vio.h index 6c40da72ff..356751e2d7 100644 --- a/include/hw/ppc/spapr_vio.h +++ b/include/hw/ppc/spapr_vio.h @@ -29,12 +29,10 @@ #define TYPE_VIO_SPAPR_DEVICE "vio-spapr-device" OBJECT_DECLARE_TYPE(SpaprVioDevice, SpaprVioDeviceClass, - vio_spapr_device, VIO_SPAPR_DEVICE) + VIO_SPAPR_DEVICE) #define TYPE_SPAPR_VIO_BUS "spapr-vio-bus" -typedef struct SpaprVioBus SpaprVioBus; -DECLARE_INSTANCE_CHECKER(SpaprVioBus, SPAPR_VIO_BUS, - TYPE_SPAPR_VIO_BUS) +OBJECT_DECLARE_SIMPLE_TYPE(SpaprVioBus, SPAPR_VIO_BUS) #define TYPE_SPAPR_VIO_BRIDGE "spapr-vio-bridge" diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h index c5a3cdcadc..00b80b08c2 100644 --- a/include/hw/ppc/xics.h +++ b/include/hw/ppc/xics.h @@ -49,7 +49,7 @@ typedef struct XICSFabric XICSFabric; #define TYPE_ICP "icp" OBJECT_DECLARE_TYPE(ICPState, ICPStateClass, - icp, ICP) + ICP) #define TYPE_PNV_ICP "pnv-icp" DECLARE_INSTANCE_CHECKER(PnvICPState, PNV_ICP, diff --git a/include/hw/ppc/xive.h b/include/hw/ppc/xive.h index 482fafccfd..445eccfe6b 100644 --- a/include/hw/ppc/xive.h +++ b/include/hw/ppc/xive.h @@ -168,9 +168,7 @@ struct XiveNotifierClass { */ #define TYPE_XIVE_SOURCE "xive-source" -typedef struct XiveSource XiveSource; -DECLARE_INSTANCE_CHECKER(XiveSource, XIVE_SOURCE, - TYPE_XIVE_SOURCE) +OBJECT_DECLARE_SIMPLE_TYPE(XiveSource, XIVE_SOURCE) /* * XIVE Interrupt Source characteristics, which define how the ESB are @@ -306,9 +304,7 @@ void xive_source_set_irq(void *opaque, int srcno, int val); */ #define TYPE_XIVE_TCTX "xive-tctx" -typedef struct XiveTCTX XiveTCTX; -DECLARE_INSTANCE_CHECKER(XiveTCTX, XIVE_TCTX, - TYPE_XIVE_TCTX) +OBJECT_DECLARE_SIMPLE_TYPE(XiveTCTX, XIVE_TCTX) /* * XIVE Thread interrupt Management register rings : @@ -348,7 +344,7 @@ struct XiveRouter { #define TYPE_XIVE_ROUTER "xive-router" OBJECT_DECLARE_TYPE(XiveRouter, XiveRouterClass, - xive_router, XIVE_ROUTER) + XIVE_ROUTER) struct XiveRouterClass { SysBusDeviceClass parent; @@ -433,9 +429,7 @@ struct XiveFabricClass { */ #define TYPE_XIVE_END_SOURCE "xive-end-source" -typedef struct XiveENDSource XiveENDSource; -DECLARE_INSTANCE_CHECKER(XiveENDSource, XIVE_END_SOURCE, - TYPE_XIVE_END_SOURCE) +OBJECT_DECLARE_SIMPLE_TYPE(XiveENDSource, XIVE_END_SOURCE) struct XiveENDSource { DeviceState parent; diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h index e025ba9653..72064f4dd4 100644 --- a/include/hw/qdev-core.h +++ b/include/hw/qdev-core.h @@ -12,9 +12,7 @@ enum { }; #define TYPE_DEVICE "device" -typedef struct DeviceClass DeviceClass; -DECLARE_OBJ_CHECKERS(DeviceState, DeviceClass, - DEVICE, TYPE_DEVICE) +OBJECT_DECLARE_TYPE(DeviceState, DeviceClass, DEVICE) typedef enum DeviceCategory { DEVICE_CATEGORY_BRIDGE, diff --git a/include/hw/riscv/opentitan.h b/include/hw/riscv/opentitan.h index 8c15b6325f..5ff0c0f85e 100644 --- a/include/hw/riscv/opentitan.h +++ b/include/hw/riscv/opentitan.h @@ -25,9 +25,7 @@ #include "qom/object.h" #define TYPE_RISCV_IBEX_SOC "riscv.lowrisc.ibex.soc" -typedef struct LowRISCIbexSoCState LowRISCIbexSoCState; -DECLARE_INSTANCE_CHECKER(LowRISCIbexSoCState, RISCV_IBEX_SOC, - TYPE_RISCV_IBEX_SOC) +OBJECT_DECLARE_SIMPLE_TYPE(LowRISCIbexSoCState, RISCV_IBEX_SOC) struct LowRISCIbexSoCState { /*< private >*/ diff --git a/include/hw/riscv/riscv_hart.h b/include/hw/riscv/riscv_hart.h index ac2cb62e1b..bbc21cdc9a 100644 --- a/include/hw/riscv/riscv_hart.h +++ b/include/hw/riscv/riscv_hart.h @@ -27,9 +27,7 @@ #define TYPE_RISCV_HART_ARRAY "riscv.hart_array" -typedef struct RISCVHartArrayState RISCVHartArrayState; -DECLARE_INSTANCE_CHECKER(RISCVHartArrayState, RISCV_HART_ARRAY, - TYPE_RISCV_HART_ARRAY) +OBJECT_DECLARE_SIMPLE_TYPE(RISCVHartArrayState, RISCV_HART_ARRAY) struct RISCVHartArrayState { /*< private >*/ diff --git a/include/hw/riscv/sifive_e.h b/include/hw/riscv/sifive_e.h index b1400843c2..83604da805 100644 --- a/include/hw/riscv/sifive_e.h +++ b/include/hw/riscv/sifive_e.h @@ -53,25 +53,25 @@ typedef struct SiFiveEState { OBJECT_CHECK(SiFiveEState, (obj), TYPE_RISCV_E_MACHINE) enum { - SIFIVE_E_DEBUG, - SIFIVE_E_MROM, - SIFIVE_E_OTP, - SIFIVE_E_CLINT, - SIFIVE_E_PLIC, - SIFIVE_E_AON, - SIFIVE_E_PRCI, - SIFIVE_E_OTP_CTRL, - SIFIVE_E_GPIO0, - SIFIVE_E_UART0, - SIFIVE_E_QSPI0, - SIFIVE_E_PWM0, - SIFIVE_E_UART1, - SIFIVE_E_QSPI1, - SIFIVE_E_PWM1, - SIFIVE_E_QSPI2, - SIFIVE_E_PWM2, - SIFIVE_E_XIP, - SIFIVE_E_DTIM + SIFIVE_E_DEV_DEBUG, + SIFIVE_E_DEV_MROM, + SIFIVE_E_DEV_OTP, + SIFIVE_E_DEV_CLINT, + SIFIVE_E_DEV_PLIC, + SIFIVE_E_DEV_AON, + SIFIVE_E_DEV_PRCI, + SIFIVE_E_DEV_OTP_CTRL, + SIFIVE_E_DEV_GPIO0, + SIFIVE_E_DEV_UART0, + SIFIVE_E_DEV_QSPI0, + SIFIVE_E_DEV_PWM0, + SIFIVE_E_DEV_UART1, + SIFIVE_E_DEV_QSPI1, + SIFIVE_E_DEV_PWM1, + SIFIVE_E_DEV_QSPI2, + SIFIVE_E_DEV_PWM2, + SIFIVE_E_DEV_XIP, + SIFIVE_E_DEV_DTIM }; enum { diff --git a/include/hw/riscv/sifive_u.h b/include/hw/riscv/sifive_u.h index fe5c580845..22e7e6efa1 100644 --- a/include/hw/riscv/sifive_u.h +++ b/include/hw/riscv/sifive_u.h @@ -70,23 +70,23 @@ typedef struct SiFiveUState { } SiFiveUState; enum { - SIFIVE_U_DEBUG, - SIFIVE_U_MROM, - SIFIVE_U_CLINT, - SIFIVE_U_L2CC, - SIFIVE_U_PDMA, - SIFIVE_U_L2LIM, - SIFIVE_U_PLIC, - SIFIVE_U_PRCI, - SIFIVE_U_UART0, - SIFIVE_U_UART1, - SIFIVE_U_GPIO, - SIFIVE_U_OTP, - SIFIVE_U_DMC, - SIFIVE_U_FLASH0, - SIFIVE_U_DRAM, - SIFIVE_U_GEM, - SIFIVE_U_GEM_MGMT + SIFIVE_U_DEV_DEBUG, + SIFIVE_U_DEV_MROM, + SIFIVE_U_DEV_CLINT, + SIFIVE_U_DEV_L2CC, + SIFIVE_U_DEV_PDMA, + SIFIVE_U_DEV_L2LIM, + SIFIVE_U_DEV_PLIC, + SIFIVE_U_DEV_PRCI, + SIFIVE_U_DEV_UART0, + SIFIVE_U_DEV_UART1, + SIFIVE_U_DEV_GPIO, + SIFIVE_U_DEV_OTP, + SIFIVE_U_DEV_DMC, + SIFIVE_U_DEV_FLASH0, + SIFIVE_U_DEV_DRAM, + SIFIVE_U_DEV_GEM, + SIFIVE_U_DEV_GEM_MGMT }; enum { diff --git a/include/hw/rtc/allwinner-rtc.h b/include/hw/rtc/allwinner-rtc.h index 5a6e9fff32..bf415431cd 100644 --- a/include/hw/rtc/allwinner-rtc.h +++ b/include/hw/rtc/allwinner-rtc.h @@ -60,10 +60,7 @@ * @{ */ -typedef struct AwRtcClass AwRtcClass; -typedef struct AwRtcState AwRtcState; -DECLARE_OBJ_CHECKERS(AwRtcState, AwRtcClass, - AW_RTC, TYPE_AW_RTC) +OBJECT_DECLARE_TYPE(AwRtcState, AwRtcClass, AW_RTC) /** @} */ diff --git a/include/hw/rtc/aspeed_rtc.h b/include/hw/rtc/aspeed_rtc.h index d7691ab88f..df61e46059 100644 --- a/include/hw/rtc/aspeed_rtc.h +++ b/include/hw/rtc/aspeed_rtc.h @@ -21,10 +21,8 @@ struct AspeedRtcState { int offset; }; -typedef struct AspeedRtcState AspeedRtcState; #define TYPE_ASPEED_RTC "aspeed.rtc" -DECLARE_INSTANCE_CHECKER(AspeedRtcState, ASPEED_RTC, - TYPE_ASPEED_RTC) +OBJECT_DECLARE_SIMPLE_TYPE(AspeedRtcState, ASPEED_RTC) #endif /* HW_RTC_ASPEED_RTC_H */ diff --git a/include/hw/rtc/goldfish_rtc.h b/include/hw/rtc/goldfish_rtc.h index b710c21c94..79ca7daf5d 100644 --- a/include/hw/rtc/goldfish_rtc.h +++ b/include/hw/rtc/goldfish_rtc.h @@ -26,9 +26,7 @@ #include "qom/object.h" #define TYPE_GOLDFISH_RTC "goldfish_rtc" -typedef struct GoldfishRTCState GoldfishRTCState; -DECLARE_INSTANCE_CHECKER(GoldfishRTCState, GOLDFISH_RTC, - TYPE_GOLDFISH_RTC) +OBJECT_DECLARE_SIMPLE_TYPE(GoldfishRTCState, GOLDFISH_RTC) struct GoldfishRTCState { SysBusDevice parent_obj; diff --git a/include/hw/rtc/mc146818rtc.h b/include/hw/rtc/mc146818rtc.h index e58e006d0d..6224b5276a 100644 --- a/include/hw/rtc/mc146818rtc.h +++ b/include/hw/rtc/mc146818rtc.h @@ -16,9 +16,7 @@ #include "qom/object.h" #define TYPE_MC146818_RTC "mc146818rtc" -typedef struct RTCState RTCState; -DECLARE_INSTANCE_CHECKER(RTCState, MC146818_RTC, - TYPE_MC146818_RTC) +OBJECT_DECLARE_SIMPLE_TYPE(RTCState, MC146818_RTC) struct RTCState { ISADevice parent_obj; diff --git a/include/hw/rtc/pl031.h b/include/hw/rtc/pl031.h index 3897b424d4..9fd4be1abb 100644 --- a/include/hw/rtc/pl031.h +++ b/include/hw/rtc/pl031.h @@ -19,9 +19,7 @@ #include "qom/object.h" #define TYPE_PL031 "pl031" -typedef struct PL031State PL031State; -DECLARE_INSTANCE_CHECKER(PL031State, PL031, - TYPE_PL031) +OBJECT_DECLARE_SIMPLE_TYPE(PL031State, PL031) struct PL031State { SysBusDevice parent_obj; diff --git a/include/hw/rtc/xlnx-zynqmp-rtc.h b/include/hw/rtc/xlnx-zynqmp-rtc.h index 209de85ae6..5f1ad0a946 100644 --- a/include/hw/rtc/xlnx-zynqmp-rtc.h +++ b/include/hw/rtc/xlnx-zynqmp-rtc.h @@ -33,9 +33,7 @@ #define TYPE_XLNX_ZYNQMP_RTC "xlnx-zynmp.rtc" -typedef struct XlnxZynqMPRTC XlnxZynqMPRTC; -DECLARE_INSTANCE_CHECKER(XlnxZynqMPRTC, XLNX_ZYNQMP_RTC, - TYPE_XLNX_ZYNQMP_RTC) +OBJECT_DECLARE_SIMPLE_TYPE(XlnxZynqMPRTC, XLNX_ZYNQMP_RTC) REG32(SET_TIME_WRITE, 0x0) REG32(SET_TIME_READ, 0x4) diff --git a/include/hw/s390x/3270-ccw.h b/include/hw/s390x/3270-ccw.h index 9a11093192..1439882294 100644 --- a/include/hw/s390x/3270-ccw.h +++ b/include/hw/s390x/3270-ccw.h @@ -31,10 +31,7 @@ #define TC_EWRITEA 0x0d /* Erase write alternate */ #define TC_WRITESF 0x11 /* Write structured field */ -typedef struct EmulatedCcw3270Class EmulatedCcw3270Class; -typedef struct EmulatedCcw3270Device EmulatedCcw3270Device; -DECLARE_OBJ_CHECKERS(EmulatedCcw3270Device, EmulatedCcw3270Class, - EMULATED_CCW_3270, TYPE_EMULATED_CCW_3270) +OBJECT_DECLARE_TYPE(EmulatedCcw3270Device, EmulatedCcw3270Class, EMULATED_CCW_3270) struct EmulatedCcw3270Device { CcwDevice parent_obj; diff --git a/include/hw/s390x/css-bridge.h b/include/hw/s390x/css-bridge.h index 9fd4484204..deb606d71f 100644 --- a/include/hw/s390x/css-bridge.h +++ b/include/hw/s390x/css-bridge.h @@ -21,21 +21,17 @@ struct VirtualCssBridge { SysBusDevice sysbus_dev; bool css_dev_path; }; -typedef struct VirtualCssBridge VirtualCssBridge; #define TYPE_VIRTUAL_CSS_BRIDGE "virtual-css-bridge" -DECLARE_INSTANCE_CHECKER(VirtualCssBridge, VIRTUAL_CSS_BRIDGE, - TYPE_VIRTUAL_CSS_BRIDGE) +OBJECT_DECLARE_SIMPLE_TYPE(VirtualCssBridge, VIRTUAL_CSS_BRIDGE) /* virtual css bus type */ struct VirtualCssBus { BusState parent_obj; }; -typedef struct VirtualCssBus VirtualCssBus; #define TYPE_VIRTUAL_CSS_BUS "virtual-css-bus" -DECLARE_INSTANCE_CHECKER(VirtualCssBus, VIRTUAL_CSS_BUS, - TYPE_VIRTUAL_CSS_BUS) +OBJECT_DECLARE_SIMPLE_TYPE(VirtualCssBus, VIRTUAL_CSS_BUS) VirtualCssBus *virtual_css_bus_init(void); #endif diff --git a/include/hw/s390x/event-facility.h b/include/hw/s390x/event-facility.h index 051c1c6576..3ffd575d8f 100644 --- a/include/hw/s390x/event-facility.h +++ b/include/hw/s390x/event-facility.h @@ -43,7 +43,7 @@ #define TYPE_SCLP_EVENT "s390-sclp-event-type" OBJECT_DECLARE_TYPE(SCLPEvent, SCLPEventClass, - sclp_event, SCLP_EVENT) + SCLP_EVENT) #define TYPE_SCLP_CPU_HOTPLUG "sclp-cpu-hotplug" #define TYPE_SCLP_QUIESCE "sclpquiesce" diff --git a/include/hw/s390x/s390-virtio-ccw.h b/include/hw/s390x/s390-virtio-ccw.h index 54d14da0a6..3331990e02 100644 --- a/include/hw/s390x/s390-virtio-ccw.h +++ b/include/hw/s390x/s390-virtio-ccw.h @@ -16,10 +16,7 @@ #define TYPE_S390_CCW_MACHINE "s390-ccw-machine" -typedef struct S390CcwMachineClass S390CcwMachineClass; -typedef struct S390CcwMachineState S390CcwMachineState; -DECLARE_OBJ_CHECKERS(S390CcwMachineState, S390CcwMachineClass, - S390_CCW_MACHINE, TYPE_S390_CCW_MACHINE) +OBJECT_DECLARE_TYPE(S390CcwMachineState, S390CcwMachineClass, S390_CCW_MACHINE) struct S390CcwMachineState { diff --git a/include/hw/s390x/s390_flic.h b/include/hw/s390x/s390_flic.h index 4b718c8ebf..e91b15d2d6 100644 --- a/include/hw/s390x/s390_flic.h +++ b/include/hw/s390x/s390_flic.h @@ -40,7 +40,7 @@ extern const VMStateDescription vmstate_adapter_routes; #define TYPE_S390_FLIC_COMMON "s390-flic" OBJECT_DECLARE_TYPE(S390FLICState, S390FLICStateClass, - s390_flic_common, S390_FLIC_COMMON) + S390_FLIC_COMMON) struct S390FLICState { SysBusDevice parent_obj; @@ -77,9 +77,7 @@ DECLARE_INSTANCE_CHECKER(KVMS390FLICState, KVM_S390_FLIC, TYPE_KVM_S390_FLIC) #define TYPE_QEMU_S390_FLIC "s390-flic-qemu" -typedef struct QEMUS390FLICState QEMUS390FLICState; -DECLARE_INSTANCE_CHECKER(QEMUS390FLICState, QEMU_S390_FLIC, - TYPE_QEMU_S390_FLIC) +OBJECT_DECLARE_SIMPLE_TYPE(QEMUS390FLICState, QEMU_S390_FLIC) #define SIC_IRQ_MODE_ALL 0 #define SIC_IRQ_MODE_SINGLE 1 diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h index e9f0f7e67c..cd730772f9 100644 --- a/include/hw/s390x/sclp.h +++ b/include/hw/s390x/sclp.h @@ -183,7 +183,7 @@ typedef struct SCCB { #define TYPE_SCLP "sclp" OBJECT_DECLARE_TYPE(SCLPDevice, SCLPDeviceClass, - sclp, SCLP) + SCLP) struct SCLPEventFacility; diff --git a/include/hw/s390x/storage-attributes.h b/include/hw/s390x/storage-attributes.h index efb28c48be..5239eb538c 100644 --- a/include/hw/s390x/storage-attributes.h +++ b/include/hw/s390x/storage-attributes.h @@ -20,10 +20,7 @@ #define TYPE_QEMU_S390_STATTRIB "s390-storage_attributes-qemu" #define TYPE_KVM_S390_STATTRIB "s390-storage_attributes-kvm" -typedef struct S390StAttribClass S390StAttribClass; -typedef struct S390StAttribState S390StAttribState; -DECLARE_OBJ_CHECKERS(S390StAttribState, S390StAttribClass, - S390_STATTRIB, TYPE_S390_STATTRIB) +OBJECT_DECLARE_TYPE(S390StAttribState, S390StAttribClass, S390_STATTRIB) struct S390StAttribState { DeviceState parent_obj; diff --git a/include/hw/s390x/storage-keys.h b/include/hw/s390x/storage-keys.h index 40f042f54e..2888d42d0b 100644 --- a/include/hw/s390x/storage-keys.h +++ b/include/hw/s390x/storage-keys.h @@ -17,10 +17,7 @@ #include "qom/object.h" #define TYPE_S390_SKEYS "s390-skeys" -typedef struct S390SKeysClass S390SKeysClass; -typedef struct S390SKeysState S390SKeysState; -DECLARE_OBJ_CHECKERS(S390SKeysState, S390SKeysClass, - S390_SKEYS, TYPE_S390_SKEYS) +OBJECT_DECLARE_TYPE(S390SKeysState, S390SKeysClass, S390_SKEYS) struct S390SKeysState { DeviceState parent_obj; diff --git a/include/hw/s390x/tod.h b/include/hw/s390x/tod.h index c02498f65e..ff3195a4bf 100644 --- a/include/hw/s390x/tod.h +++ b/include/hw/s390x/tod.h @@ -21,10 +21,7 @@ typedef struct S390TOD { } S390TOD; #define TYPE_S390_TOD "s390-tod" -typedef struct S390TODClass S390TODClass; -typedef struct S390TODState S390TODState; -DECLARE_OBJ_CHECKERS(S390TODState, S390TODClass, - S390_TOD, TYPE_S390_TOD) +OBJECT_DECLARE_TYPE(S390TODState, S390TODClass, S390_TOD) #define TYPE_KVM_S390_TOD TYPE_S390_TOD "-kvm" #define TYPE_QEMU_S390_TOD TYPE_S390_TOD "-qemu" diff --git a/include/hw/s390x/vfio-ccw.h b/include/hw/s390x/vfio-ccw.h index 9c9c8944ad..63a909eb7e 100644 --- a/include/hw/s390x/vfio-ccw.h +++ b/include/hw/s390x/vfio-ccw.h @@ -20,9 +20,7 @@ #include "qom/object.h" #define TYPE_VFIO_CCW "vfio-ccw" -typedef struct VFIOCCWDevice VFIOCCWDevice; -DECLARE_INSTANCE_CHECKER(VFIOCCWDevice, VFIO_CCW, - TYPE_VFIO_CCW) +OBJECT_DECLARE_SIMPLE_TYPE(VFIOCCWDevice, VFIO_CCW) #define TYPE_VFIO_CCW "vfio-ccw" diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index 20800dbf5b..60cc3047a5 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -66,9 +66,7 @@ struct ESPState { }; #define TYPE_ESP "esp" -typedef struct SysBusESPState SysBusESPState; -DECLARE_INSTANCE_CHECKER(SysBusESPState, ESP, - TYPE_ESP) +OBJECT_DECLARE_SIMPLE_TYPE(SysBusESPState, ESP) struct SysBusESPState { /*< private >*/ diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h index 3818e3fa46..7a55cdbd74 100644 --- a/include/hw/scsi/scsi.h +++ b/include/hw/scsi/scsi.h @@ -50,9 +50,7 @@ struct SCSIRequest { }; #define TYPE_SCSI_DEVICE "scsi-device" -typedef struct SCSIDeviceClass SCSIDeviceClass; -DECLARE_OBJ_CHECKERS(SCSIDevice, SCSIDeviceClass, - SCSI_DEVICE, TYPE_SCSI_DEVICE) +OBJECT_DECLARE_TYPE(SCSIDevice, SCSIDeviceClass, SCSI_DEVICE) struct SCSIDeviceClass { DeviceClass parent_class; @@ -134,8 +132,7 @@ struct SCSIBusInfo { }; #define TYPE_SCSI_BUS "SCSI" -DECLARE_INSTANCE_CHECKER(SCSIBus, SCSI_BUS, - TYPE_SCSI_BUS) +OBJECT_DECLARE_SIMPLE_TYPE(SCSIBus, SCSI_BUS) struct SCSIBus { BusState qbus; diff --git a/include/hw/sd/allwinner-sdhost.h b/include/hw/sd/allwinner-sdhost.h index 7bccc06d1c..bfe08ff4ef 100644 --- a/include/hw/sd/allwinner-sdhost.h +++ b/include/hw/sd/allwinner-sdhost.h @@ -45,10 +45,7 @@ * @{ */ -typedef struct AwSdHostClass AwSdHostClass; -typedef struct AwSdHostState AwSdHostState; -DECLARE_OBJ_CHECKERS(AwSdHostState, AwSdHostClass, - AW_SDHOST, TYPE_AW_SDHOST) +OBJECT_DECLARE_TYPE(AwSdHostState, AwSdHostClass, AW_SDHOST) /** @} */ diff --git a/include/hw/sd/aspeed_sdhci.h b/include/hw/sd/aspeed_sdhci.h index 783ccc2956..b093d1b861 100644 --- a/include/hw/sd/aspeed_sdhci.h +++ b/include/hw/sd/aspeed_sdhci.h @@ -13,9 +13,7 @@ #include "qom/object.h" #define TYPE_ASPEED_SDHCI "aspeed.sdhci" -typedef struct AspeedSDHCIState AspeedSDHCIState; -DECLARE_INSTANCE_CHECKER(AspeedSDHCIState, ASPEED_SDHCI, - TYPE_ASPEED_SDHCI) +OBJECT_DECLARE_SIMPLE_TYPE(AspeedSDHCIState, ASPEED_SDHCI) #define ASPEED_SDHCI_CAPABILITIES 0x01E80080 #define ASPEED_SDHCI_NUM_SLOTS 2 diff --git a/include/hw/sd/bcm2835_sdhost.h b/include/hw/sd/bcm2835_sdhost.h index 751ba531d6..f6bca5c397 100644 --- a/include/hw/sd/bcm2835_sdhost.h +++ b/include/hw/sd/bcm2835_sdhost.h @@ -19,9 +19,7 @@ #include "qom/object.h" #define TYPE_BCM2835_SDHOST "bcm2835-sdhost" -typedef struct BCM2835SDHostState BCM2835SDHostState; -DECLARE_INSTANCE_CHECKER(BCM2835SDHostState, BCM2835_SDHOST, - TYPE_BCM2835_SDHOST) +OBJECT_DECLARE_SIMPLE_TYPE(BCM2835SDHostState, BCM2835_SDHOST) #define BCM2835_SDHOST_FIFO_LEN 16 diff --git a/include/hw/sd/sd.h b/include/hw/sd/sd.h index 54f97a07cd..59d108d453 100644 --- a/include/hw/sd/sd.h +++ b/include/hw/sd/sd.h @@ -89,12 +89,9 @@ typedef struct { uint8_t crc; } SDRequest; -typedef struct SDState SDState; #define TYPE_SD_CARD "sd-card" -typedef struct SDCardClass SDCardClass; -DECLARE_OBJ_CHECKERS(SDState, SDCardClass, - SD_CARD, TYPE_SD_CARD) +OBJECT_DECLARE_TYPE(SDState, SDCardClass, SD_CARD) struct SDCardClass { /*< private >*/ @@ -130,7 +127,7 @@ struct SDCardClass { #define TYPE_SD_BUS "sd-bus" OBJECT_DECLARE_TYPE(SDBus, SDBusClass, - sd_bus, SD_BUS) + SD_BUS) struct SDBus { BusState qbus; diff --git a/include/hw/sparc/sparc32_dma.h b/include/hw/sparc/sparc32_dma.h index a402665a9c..e650489414 100644 --- a/include/hw/sparc/sparc32_dma.h +++ b/include/hw/sparc/sparc32_dma.h @@ -9,9 +9,7 @@ #define DMA_REGS 4 #define TYPE_SPARC32_DMA_DEVICE "sparc32-dma-device" -typedef struct DMADeviceState DMADeviceState; -DECLARE_INSTANCE_CHECKER(DMADeviceState, SPARC32_DMA_DEVICE, - TYPE_SPARC32_DMA_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(DMADeviceState, SPARC32_DMA_DEVICE) struct DMADeviceState { @@ -25,9 +23,7 @@ struct DMADeviceState { }; #define TYPE_SPARC32_ESPDMA_DEVICE "sparc32-espdma" -typedef struct ESPDMADeviceState ESPDMADeviceState; -DECLARE_INSTANCE_CHECKER(ESPDMADeviceState, SPARC32_ESPDMA_DEVICE, - TYPE_SPARC32_ESPDMA_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(ESPDMADeviceState, SPARC32_ESPDMA_DEVICE) struct ESPDMADeviceState { DMADeviceState parent_obj; @@ -36,9 +32,7 @@ struct ESPDMADeviceState { }; #define TYPE_SPARC32_LEDMA_DEVICE "sparc32-ledma" -typedef struct LEDMADeviceState LEDMADeviceState; -DECLARE_INSTANCE_CHECKER(LEDMADeviceState, SPARC32_LEDMA_DEVICE, - TYPE_SPARC32_LEDMA_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(LEDMADeviceState, SPARC32_LEDMA_DEVICE) struct LEDMADeviceState { DMADeviceState parent_obj; @@ -47,9 +41,7 @@ struct LEDMADeviceState { }; #define TYPE_SPARC32_DMA "sparc32-dma" -typedef struct SPARC32DMAState SPARC32DMAState; -DECLARE_INSTANCE_CHECKER(SPARC32DMAState, SPARC32_DMA, - TYPE_SPARC32_DMA) +OBJECT_DECLARE_SIMPLE_TYPE(SPARC32DMAState, SPARC32_DMA) struct SPARC32DMAState { SysBusDevice parent_obj; diff --git a/include/hw/ssi/aspeed_smc.h b/include/hw/ssi/aspeed_smc.h index 8e023d8ff6..3dd354b52e 100644 --- a/include/hw/ssi/aspeed_smc.h +++ b/include/hw/ssi/aspeed_smc.h @@ -68,10 +68,7 @@ typedef struct AspeedSMCFlash { } AspeedSMCFlash; #define TYPE_ASPEED_SMC "aspeed.smc" -typedef struct AspeedSMCClass AspeedSMCClass; -typedef struct AspeedSMCState AspeedSMCState; -DECLARE_OBJ_CHECKERS(AspeedSMCState, AspeedSMCClass, - ASPEED_SMC, TYPE_ASPEED_SMC) +OBJECT_DECLARE_TYPE(AspeedSMCState, AspeedSMCClass, ASPEED_SMC) struct AspeedSMCClass { SysBusDevice parent_obj; diff --git a/include/hw/ssi/imx_spi.h b/include/hw/ssi/imx_spi.h index 874fea492d..b82b17f364 100644 --- a/include/hw/ssi/imx_spi.h +++ b/include/hw/ssi/imx_spi.h @@ -78,9 +78,7 @@ #define EXTRACT(value, name) extract32(value, name##_SHIFT, name##_LENGTH) #define TYPE_IMX_SPI "imx.spi" -typedef struct IMXSPIState IMXSPIState; -DECLARE_INSTANCE_CHECKER(IMXSPIState, IMX_SPI, - TYPE_IMX_SPI) +OBJECT_DECLARE_SIMPLE_TYPE(IMXSPIState, IMX_SPI) struct IMXSPIState { /* <private> */ diff --git a/include/hw/ssi/mss-spi.h b/include/hw/ssi/mss-spi.h index 7c16cf6b49..ce6279c431 100644 --- a/include/hw/ssi/mss-spi.h +++ b/include/hw/ssi/mss-spi.h @@ -31,9 +31,7 @@ #include "qom/object.h" #define TYPE_MSS_SPI "mss-spi" -typedef struct MSSSpiState MSSSpiState; -DECLARE_INSTANCE_CHECKER(MSSSpiState, MSS_SPI, - TYPE_MSS_SPI) +OBJECT_DECLARE_SIMPLE_TYPE(MSSSpiState, MSS_SPI) #define R_SPI_MAX 16 diff --git a/include/hw/ssi/pl022.h b/include/hw/ssi/pl022.h index 1f5da7cc44..545b52689c 100644 --- a/include/hw/ssi/pl022.h +++ b/include/hw/ssi/pl022.h @@ -25,9 +25,7 @@ #include "qom/object.h" #define TYPE_PL022 "pl022" -typedef struct PL022State PL022State; -DECLARE_INSTANCE_CHECKER(PL022State, PL022, - TYPE_PL022) +OBJECT_DECLARE_SIMPLE_TYPE(PL022State, PL022) struct PL022State { SysBusDevice parent_obj; diff --git a/include/hw/ssi/ssi.h b/include/hw/ssi/ssi.h index 4fe1d85136..fe3028c39d 100644 --- a/include/hw/ssi/ssi.h +++ b/include/hw/ssi/ssi.h @@ -18,7 +18,7 @@ typedef enum SSICSMode SSICSMode; #define TYPE_SSI_SLAVE "ssi-slave" OBJECT_DECLARE_TYPE(SSISlave, SSISlaveClass, - ssi_slave, SSI_SLAVE) + SSI_SLAVE) #define SSI_GPIO_CS "ssi-gpio-cs" diff --git a/include/hw/ssi/stm32f2xx_spi.h b/include/hw/ssi/stm32f2xx_spi.h index 4bb36d04ed..3683b4ad32 100644 --- a/include/hw/ssi/stm32f2xx_spi.h +++ b/include/hw/ssi/stm32f2xx_spi.h @@ -45,9 +45,7 @@ #define STM_SPI_SR_RXNE 1 #define TYPE_STM32F2XX_SPI "stm32f2xx-spi" -typedef struct STM32F2XXSPIState STM32F2XXSPIState; -DECLARE_INSTANCE_CHECKER(STM32F2XXSPIState, STM32F2XX_SPI, - TYPE_STM32F2XX_SPI) +OBJECT_DECLARE_SIMPLE_TYPE(STM32F2XXSPIState, STM32F2XX_SPI) struct STM32F2XXSPIState { /* <private> */ diff --git a/include/hw/ssi/xilinx_spips.h b/include/hw/ssi/xilinx_spips.h index b1ab347617..b96de21b34 100644 --- a/include/hw/ssi/xilinx_spips.h +++ b/include/hw/ssi/xilinx_spips.h @@ -120,7 +120,6 @@ struct XlnxZynqMPQSPIPS { uint32_t dma_burst_size; uint8_t dma_buf[QSPI_DMA_MAX_BURST_SIZE]; }; -typedef struct XlnxZynqMPQSPIPS XlnxZynqMPQSPIPS; struct XilinxSPIPSClass { SysBusDeviceClass parent_class; @@ -130,19 +129,15 @@ struct XilinxSPIPSClass { uint32_t rx_fifo_size; uint32_t tx_fifo_size; }; -typedef struct XilinxSPIPSClass XilinxSPIPSClass; #define TYPE_XILINX_SPIPS "xlnx.ps7-spi" #define TYPE_XILINX_QSPIPS "xlnx.ps7-qspi" #define TYPE_XLNX_ZYNQMP_QSPIPS "xlnx.usmp-gqspi" -DECLARE_OBJ_CHECKERS(XilinxSPIPS, XilinxSPIPSClass, - XILINX_SPIPS, TYPE_XILINX_SPIPS) +OBJECT_DECLARE_TYPE(XilinxSPIPS, XilinxSPIPSClass, XILINX_SPIPS) -DECLARE_INSTANCE_CHECKER(XilinxQSPIPS, XILINX_QSPIPS, - TYPE_XILINX_QSPIPS) +OBJECT_DECLARE_SIMPLE_TYPE(XilinxQSPIPS, XILINX_QSPIPS) -DECLARE_INSTANCE_CHECKER(XlnxZynqMPQSPIPS, XLNX_ZYNQMP_QSPIPS, - TYPE_XLNX_ZYNQMP_QSPIPS) +OBJECT_DECLARE_SIMPLE_TYPE(XlnxZynqMPQSPIPS, XLNX_ZYNQMP_QSPIPS) #endif /* XILINX_SPIPS_H */ diff --git a/include/hw/sysbus.h b/include/hw/sysbus.h index 28a9b0f634..3564b7b6a2 100644 --- a/include/hw/sysbus.h +++ b/include/hw/sysbus.h @@ -17,7 +17,7 @@ DECLARE_INSTANCE_CHECKER(BusState, SYSTEM_BUS, #define TYPE_SYS_BUS_DEVICE "sys-bus-device" OBJECT_DECLARE_TYPE(SysBusDevice, SysBusDeviceClass, - sys_bus_device, SYS_BUS_DEVICE) + SYS_BUS_DEVICE) /** * SysBusDeviceClass: diff --git a/include/hw/timer/a9gtimer.h b/include/hw/timer/a9gtimer.h index f6fcc4bfc6..6ae9122e4b 100644 --- a/include/hw/timer/a9gtimer.h +++ b/include/hw/timer/a9gtimer.h @@ -29,9 +29,7 @@ #define A9_GTIMER_MAX_CPUS 4 #define TYPE_A9_GTIMER "arm.cortex-a9-global-timer" -typedef struct A9GTimerState A9GTimerState; -DECLARE_INSTANCE_CHECKER(A9GTimerState, A9_GTIMER, - TYPE_A9_GTIMER) +OBJECT_DECLARE_SIMPLE_TYPE(A9GTimerState, A9_GTIMER) #define R_COUNTER_LO 0x00 #define R_COUNTER_HI 0x04 diff --git a/include/hw/timer/allwinner-a10-pit.h b/include/hw/timer/allwinner-a10-pit.h index 9638e3c84c..8435758ad6 100644 --- a/include/hw/timer/allwinner-a10-pit.h +++ b/include/hw/timer/allwinner-a10-pit.h @@ -6,9 +6,7 @@ #include "qom/object.h" #define TYPE_AW_A10_PIT "allwinner-A10-timer" -typedef struct AwA10PITState AwA10PITState; -DECLARE_INSTANCE_CHECKER(AwA10PITState, AW_A10_PIT, - TYPE_AW_A10_PIT) +OBJECT_DECLARE_SIMPLE_TYPE(AwA10PITState, AW_A10_PIT) #define AW_A10_PIT_TIMER_NR 6 #define AW_A10_PIT_TIMER_IRQ 0x1 diff --git a/include/hw/timer/arm_mptimer.h b/include/hw/timer/arm_mptimer.h index 47d5e51686..65a96e2a0d 100644 --- a/include/hw/timer/arm_mptimer.h +++ b/include/hw/timer/arm_mptimer.h @@ -36,9 +36,7 @@ typedef struct { } TimerBlock; #define TYPE_ARM_MPTIMER "arm_mptimer" -typedef struct ARMMPTimerState ARMMPTimerState; -DECLARE_INSTANCE_CHECKER(ARMMPTimerState, ARM_MPTIMER, - TYPE_ARM_MPTIMER) +OBJECT_DECLARE_SIMPLE_TYPE(ARMMPTimerState, ARM_MPTIMER) struct ARMMPTimerState { /*< private >*/ diff --git a/include/hw/timer/armv7m_systick.h b/include/hw/timer/armv7m_systick.h index b605688fee..97cb345ddb 100644 --- a/include/hw/timer/armv7m_systick.h +++ b/include/hw/timer/armv7m_systick.h @@ -17,9 +17,7 @@ #define TYPE_SYSTICK "armv7m_systick" -typedef struct SysTickState SysTickState; -DECLARE_INSTANCE_CHECKER(SysTickState, SYSTICK, - TYPE_SYSTICK) +OBJECT_DECLARE_SIMPLE_TYPE(SysTickState, SYSTICK) struct SysTickState { /*< private >*/ diff --git a/include/hw/timer/aspeed_timer.h b/include/hw/timer/aspeed_timer.h index 4c76f955c9..d36034a10c 100644 --- a/include/hw/timer/aspeed_timer.h +++ b/include/hw/timer/aspeed_timer.h @@ -27,10 +27,7 @@ #include "qom/object.h" #define TYPE_ASPEED_TIMER "aspeed.timer" -typedef struct AspeedTimerClass AspeedTimerClass; -typedef struct AspeedTimerCtrlState AspeedTimerCtrlState; -DECLARE_OBJ_CHECKERS(AspeedTimerCtrlState, AspeedTimerClass, - ASPEED_TIMER, TYPE_ASPEED_TIMER) +OBJECT_DECLARE_TYPE(AspeedTimerCtrlState, AspeedTimerClass, ASPEED_TIMER) #define TYPE_ASPEED_2400_TIMER TYPE_ASPEED_TIMER "-ast2400" #define TYPE_ASPEED_2500_TIMER TYPE_ASPEED_TIMER "-ast2500" #define TYPE_ASPEED_2600_TIMER TYPE_ASPEED_TIMER "-ast2600" diff --git a/include/hw/timer/avr_timer16.h b/include/hw/timer/avr_timer16.h index d454bb31cb..0536254337 100644 --- a/include/hw/timer/avr_timer16.h +++ b/include/hw/timer/avr_timer16.h @@ -42,9 +42,7 @@ enum NextInterrupt { }; #define TYPE_AVR_TIMER16 "avr-timer16" -typedef struct AVRTimer16State AVRTimer16State; -DECLARE_INSTANCE_CHECKER(AVRTimer16State, AVR_TIMER16, - TYPE_AVR_TIMER16) +OBJECT_DECLARE_SIMPLE_TYPE(AVRTimer16State, AVR_TIMER16) struct AVRTimer16State { /* <private> */ diff --git a/include/hw/timer/bcm2835_systmr.h b/include/hw/timer/bcm2835_systmr.h index 64166bd712..7ce8f6ef4d 100644 --- a/include/hw/timer/bcm2835_systmr.h +++ b/include/hw/timer/bcm2835_systmr.h @@ -14,9 +14,7 @@ #include "qom/object.h" #define TYPE_BCM2835_SYSTIMER "bcm2835-sys-timer" -typedef struct BCM2835SystemTimerState BCM2835SystemTimerState; -DECLARE_INSTANCE_CHECKER(BCM2835SystemTimerState, BCM2835_SYSTIMER, - TYPE_BCM2835_SYSTIMER) +OBJECT_DECLARE_SIMPLE_TYPE(BCM2835SystemTimerState, BCM2835_SYSTIMER) struct BCM2835SystemTimerState { /*< private >*/ diff --git a/include/hw/timer/cmsdk-apb-dualtimer.h b/include/hw/timer/cmsdk-apb-dualtimer.h index 7a5b9df5e5..08d9e6fa3d 100644 --- a/include/hw/timer/cmsdk-apb-dualtimer.h +++ b/include/hw/timer/cmsdk-apb-dualtimer.h @@ -31,9 +31,7 @@ #include "qom/object.h" #define TYPE_CMSDK_APB_DUALTIMER "cmsdk-apb-dualtimer" -typedef struct CMSDKAPBDualTimer CMSDKAPBDualTimer; -DECLARE_INSTANCE_CHECKER(CMSDKAPBDualTimer, CMSDK_APB_DUALTIMER, - TYPE_CMSDK_APB_DUALTIMER) +OBJECT_DECLARE_SIMPLE_TYPE(CMSDKAPBDualTimer, CMSDK_APB_DUALTIMER) /* One of the two identical timer modules in the dual-timer module */ diff --git a/include/hw/timer/cmsdk-apb-timer.h b/include/hw/timer/cmsdk-apb-timer.h index 0912bc0f3c..0d80b2a48c 100644 --- a/include/hw/timer/cmsdk-apb-timer.h +++ b/include/hw/timer/cmsdk-apb-timer.h @@ -18,9 +18,7 @@ #include "qom/object.h" #define TYPE_CMSDK_APB_TIMER "cmsdk-apb-timer" -typedef struct CMSDKAPBTIMER CMSDKAPBTIMER; -DECLARE_INSTANCE_CHECKER(CMSDKAPBTIMER, CMSDK_APB_TIMER, - TYPE_CMSDK_APB_TIMER) +OBJECT_DECLARE_SIMPLE_TYPE(CMSDKAPBTIMER, CMSDK_APB_TIMER) struct CMSDKAPBTIMER { /*< private >*/ diff --git a/include/hw/timer/digic-timer.h b/include/hw/timer/digic-timer.h index 84a0ef473a..da82fb4663 100644 --- a/include/hw/timer/digic-timer.h +++ b/include/hw/timer/digic-timer.h @@ -23,9 +23,7 @@ #include "qom/object.h" #define TYPE_DIGIC_TIMER "digic-timer" -typedef struct DigicTimerState DigicTimerState; -DECLARE_INSTANCE_CHECKER(DigicTimerState, DIGIC_TIMER, - TYPE_DIGIC_TIMER) +OBJECT_DECLARE_SIMPLE_TYPE(DigicTimerState, DIGIC_TIMER) #define DIGIC_TIMER_CONTROL 0x00 #define DIGIC_TIMER_CONTROL_RST 0x80000000 diff --git a/include/hw/timer/i8254.h b/include/hw/timer/i8254.h index 1a522a2457..3e569f42b6 100644 --- a/include/hw/timer/i8254.h +++ b/include/hw/timer/i8254.h @@ -40,10 +40,7 @@ typedef struct PITChannelInfo { } PITChannelInfo; #define TYPE_PIT_COMMON "pit-common" -typedef struct PITCommonState PITCommonState; -typedef struct PITCommonClass PITCommonClass; -DECLARE_OBJ_CHECKERS(PITCommonState, PITCommonClass, - PIT_COMMON, TYPE_PIT_COMMON) +OBJECT_DECLARE_TYPE(PITCommonState, PITCommonClass, PIT_COMMON) #define TYPE_I8254 "isa-pit" #define TYPE_KVM_I8254 "kvm-pit" diff --git a/include/hw/timer/imx_epit.h b/include/hw/timer/imx_epit.h index 39bcf81331..2acc41e982 100644 --- a/include/hw/timer/imx_epit.h +++ b/include/hw/timer/imx_epit.h @@ -56,9 +56,7 @@ #define EPIT_TIMER_MAX 0XFFFFFFFFUL #define TYPE_IMX_EPIT "imx.epit" -typedef struct IMXEPITState IMXEPITState; -DECLARE_INSTANCE_CHECKER(IMXEPITState, IMX_EPIT, - TYPE_IMX_EPIT) +OBJECT_DECLARE_SIMPLE_TYPE(IMXEPITState, IMX_EPIT) struct IMXEPITState { /*< private >*/ diff --git a/include/hw/timer/mss-timer.h b/include/hw/timer/mss-timer.h index d207bae2c0..da38512904 100644 --- a/include/hw/timer/mss-timer.h +++ b/include/hw/timer/mss-timer.h @@ -30,9 +30,7 @@ #include "qom/object.h" #define TYPE_MSS_TIMER "mss-timer" -typedef struct MSSTimerState MSSTimerState; -DECLARE_INSTANCE_CHECKER(MSSTimerState, MSS_TIMER, - TYPE_MSS_TIMER) +OBJECT_DECLARE_SIMPLE_TYPE(MSSTimerState, MSS_TIMER) /* * There are two 32-bit down counting timers. diff --git a/include/hw/timer/nrf51_timer.h b/include/hw/timer/nrf51_timer.h index 4261a03b95..76827c11dc 100644 --- a/include/hw/timer/nrf51_timer.h +++ b/include/hw/timer/nrf51_timer.h @@ -17,9 +17,7 @@ #include "qemu/timer.h" #include "qom/object.h" #define TYPE_NRF51_TIMER "nrf51_soc.timer" -typedef struct NRF51TimerState NRF51TimerState; -DECLARE_INSTANCE_CHECKER(NRF51TimerState, NRF51_TIMER, - TYPE_NRF51_TIMER) +OBJECT_DECLARE_SIMPLE_TYPE(NRF51TimerState, NRF51_TIMER) #define NRF51_TIMER_REG_COUNT 4 diff --git a/include/hw/usb.h b/include/hw/usb.h index 5783635491..a70a72e917 100644 --- a/include/hw/usb.h +++ b/include/hw/usb.h @@ -175,7 +175,6 @@ #define USB_INTERFACE_INVALID 255 -typedef struct USBBus USBBus; typedef struct USBBusOps USBBusOps; typedef struct USBPort USBPort; typedef struct USBDevice USBDevice; @@ -265,9 +264,7 @@ struct USBDevice { }; #define TYPE_USB_DEVICE "usb-device" -typedef struct USBDeviceClass USBDeviceClass; -DECLARE_OBJ_CHECKERS(USBDevice, USBDeviceClass, - USB_DEVICE, TYPE_USB_DEVICE) +OBJECT_DECLARE_TYPE(USBDevice, USBDeviceClass, USB_DEVICE) typedef void (*USBDeviceRealize)(USBDevice *dev, Error **errp); typedef void (*USBDeviceUnrealize)(USBDevice *dev); @@ -475,8 +472,7 @@ bool usb_host_dev_is_scsi_storage(USBDevice *usbdev); /* usb-bus.c */ #define TYPE_USB_BUS "usb-bus" -DECLARE_INSTANCE_CHECKER(USBBus, USB_BUS, - TYPE_USB_BUS) +OBJECT_DECLARE_SIMPLE_TYPE(USBBus, USB_BUS) struct USBBus { BusState qbus; diff --git a/include/hw/usb/chipidea.h b/include/hw/usb/chipidea.h index f0303b8721..fe4113ee01 100644 --- a/include/hw/usb/chipidea.h +++ b/include/hw/usb/chipidea.h @@ -10,10 +10,8 @@ struct ChipideaState { MemoryRegion iomem[3]; }; -typedef struct ChipideaState ChipideaState; #define TYPE_CHIPIDEA "usb-chipidea" -DECLARE_INSTANCE_CHECKER(ChipideaState, CHIPIDEA, - TYPE_CHIPIDEA) +OBJECT_DECLARE_SIMPLE_TYPE(ChipideaState, CHIPIDEA) #endif /* CHIPIDEA_H */ diff --git a/include/hw/usb/imx-usb-phy.h b/include/hw/usb/imx-usb-phy.h index f7f92fc462..d1e867b77a 100644 --- a/include/hw/usb/imx-usb-phy.h +++ b/include/hw/usb/imx-usb-phy.h @@ -39,9 +39,7 @@ enum IMXUsbPhyRegisters { #define USBPHY_CTRL_SFTRST BIT(31) #define TYPE_IMX_USBPHY "imx.usbphy" -typedef struct IMXUSBPHYState IMXUSBPHYState; -DECLARE_INSTANCE_CHECKER(IMXUSBPHYState, IMX_USBPHY, - TYPE_IMX_USBPHY) +OBJECT_DECLARE_SIMPLE_TYPE(IMXUSBPHYState, IMX_USBPHY) struct IMXUSBPHYState { /* <private> */ diff --git a/include/hw/virtio/vhost-scsi-common.h b/include/hw/virtio/vhost-scsi-common.h index 5f0bf73d9d..0c8909d12a 100644 --- a/include/hw/virtio/vhost-scsi-common.h +++ b/include/hw/virtio/vhost-scsi-common.h @@ -20,9 +20,7 @@ #include "qom/object.h" #define TYPE_VHOST_SCSI_COMMON "vhost-scsi-common" -typedef struct VHostSCSICommon VHostSCSICommon; -DECLARE_INSTANCE_CHECKER(VHostSCSICommon, VHOST_SCSI_COMMON, - TYPE_VHOST_SCSI_COMMON) +OBJECT_DECLARE_SIMPLE_TYPE(VHostSCSICommon, VHOST_SCSI_COMMON) struct VHostSCSICommon { VirtIOSCSICommon parent_obj; diff --git a/include/hw/virtio/vhost-scsi.h b/include/hw/virtio/vhost-scsi.h index 7a77644150..7dc2bdd69d 100644 --- a/include/hw/virtio/vhost-scsi.h +++ b/include/hw/virtio/vhost-scsi.h @@ -26,9 +26,7 @@ enum vhost_scsi_vq_list { }; #define TYPE_VHOST_SCSI "vhost-scsi" -typedef struct VHostSCSI VHostSCSI; -DECLARE_INSTANCE_CHECKER(VHostSCSI, VHOST_SCSI, - TYPE_VHOST_SCSI) +OBJECT_DECLARE_SIMPLE_TYPE(VHostSCSI, VHOST_SCSI) struct VHostSCSI { VHostSCSICommon parent_obj; diff --git a/include/hw/virtio/vhost-user-blk.h b/include/hw/virtio/vhost-user-blk.h index dc40ab6f11..f536576d20 100644 --- a/include/hw/virtio/vhost-user-blk.h +++ b/include/hw/virtio/vhost-user-blk.h @@ -23,9 +23,7 @@ #include "qom/object.h" #define TYPE_VHOST_USER_BLK "vhost-user-blk" -typedef struct VHostUserBlk VHostUserBlk; -DECLARE_INSTANCE_CHECKER(VHostUserBlk, VHOST_USER_BLK, - TYPE_VHOST_USER_BLK) +OBJECT_DECLARE_SIMPLE_TYPE(VHostUserBlk, VHOST_USER_BLK) #define VHOST_USER_BLK_AUTO_NUM_QUEUES UINT16_MAX diff --git a/include/hw/virtio/vhost-user-fs.h b/include/hw/virtio/vhost-user-fs.h index 9033e6f902..6985752771 100644 --- a/include/hw/virtio/vhost-user-fs.h +++ b/include/hw/virtio/vhost-user-fs.h @@ -21,9 +21,7 @@ #include "qom/object.h" #define TYPE_VHOST_USER_FS "vhost-user-fs-device" -typedef struct VHostUserFS VHostUserFS; -DECLARE_INSTANCE_CHECKER(VHostUserFS, VHOST_USER_FS, - TYPE_VHOST_USER_FS) +OBJECT_DECLARE_SIMPLE_TYPE(VHostUserFS, VHOST_USER_FS) typedef struct { CharBackend chardev; diff --git a/include/hw/virtio/vhost-user-scsi.h b/include/hw/virtio/vhost-user-scsi.h index 342d67ee9e..521b08e559 100644 --- a/include/hw/virtio/vhost-user-scsi.h +++ b/include/hw/virtio/vhost-user-scsi.h @@ -24,9 +24,7 @@ #include "qom/object.h" #define TYPE_VHOST_USER_SCSI "vhost-user-scsi" -typedef struct VHostUserSCSI VHostUserSCSI; -DECLARE_INSTANCE_CHECKER(VHostUserSCSI, VHOST_USER_SCSI, - TYPE_VHOST_USER_SCSI) +OBJECT_DECLARE_SIMPLE_TYPE(VHostUserSCSI, VHOST_USER_SCSI) struct VHostUserSCSI { VHostSCSICommon parent_obj; diff --git a/include/hw/virtio/vhost-user-vsock.h b/include/hw/virtio/vhost-user-vsock.h index b3c40c16a3..4cfd558245 100644 --- a/include/hw/virtio/vhost-user-vsock.h +++ b/include/hw/virtio/vhost-user-vsock.h @@ -17,9 +17,7 @@ #include "qom/object.h" #define TYPE_VHOST_USER_VSOCK "vhost-user-vsock-device" -typedef struct VHostUserVSock VHostUserVSock; -DECLARE_INSTANCE_CHECKER(VHostUserVSock, VHOST_USER_VSOCK, - TYPE_VHOST_USER_VSOCK) +OBJECT_DECLARE_SIMPLE_TYPE(VHostUserVSock, VHOST_USER_VSOCK) typedef struct { CharBackend chardev; diff --git a/include/hw/virtio/vhost-vsock-common.h b/include/hw/virtio/vhost-vsock-common.h index 60bfb68db1..e412b5ee98 100644 --- a/include/hw/virtio/vhost-vsock-common.h +++ b/include/hw/virtio/vhost-vsock-common.h @@ -16,9 +16,7 @@ #include "qom/object.h" #define TYPE_VHOST_VSOCK_COMMON "vhost-vsock-common" -typedef struct VHostVSockCommon VHostVSockCommon; -DECLARE_INSTANCE_CHECKER(VHostVSockCommon, VHOST_VSOCK_COMMON, - TYPE_VHOST_VSOCK_COMMON) +OBJECT_DECLARE_SIMPLE_TYPE(VHostVSockCommon, VHOST_VSOCK_COMMON) enum { VHOST_VSOCK_SAVEVM_VERSION = 0, diff --git a/include/hw/virtio/vhost-vsock.h b/include/hw/virtio/vhost-vsock.h index c561cc427a..84f4e727c7 100644 --- a/include/hw/virtio/vhost-vsock.h +++ b/include/hw/virtio/vhost-vsock.h @@ -18,9 +18,7 @@ #include "qom/object.h" #define TYPE_VHOST_VSOCK "vhost-vsock-device" -typedef struct VHostVSock VHostVSock; -DECLARE_INSTANCE_CHECKER(VHostVSock, VHOST_VSOCK, - TYPE_VHOST_VSOCK) +OBJECT_DECLARE_SIMPLE_TYPE(VHostVSock, VHOST_VSOCK) typedef struct { uint64_t guest_cid; diff --git a/include/hw/virtio/virtio-balloon.h b/include/hw/virtio/virtio-balloon.h index 0d08f496d9..5139cf8ab6 100644 --- a/include/hw/virtio/virtio-balloon.h +++ b/include/hw/virtio/virtio-balloon.h @@ -21,9 +21,7 @@ #include "qom/object.h" #define TYPE_VIRTIO_BALLOON "virtio-balloon-device" -typedef struct VirtIOBalloon VirtIOBalloon; -DECLARE_INSTANCE_CHECKER(VirtIOBalloon, VIRTIO_BALLOON, - TYPE_VIRTIO_BALLOON) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOBalloon, VIRTIO_BALLOON) #define VIRTIO_BALLOON_FREE_PAGE_HINT_CMD_ID_MIN 0x80000000 diff --git a/include/hw/virtio/virtio-blk.h b/include/hw/virtio/virtio-blk.h index 29c9f32353..5953cf8961 100644 --- a/include/hw/virtio/virtio-blk.h +++ b/include/hw/virtio/virtio-blk.h @@ -22,9 +22,7 @@ #include "qom/object.h" #define TYPE_VIRTIO_BLK "virtio-blk-device" -typedef struct VirtIOBlock VirtIOBlock; -DECLARE_INSTANCE_CHECKER(VirtIOBlock, VIRTIO_BLK, - TYPE_VIRTIO_BLK) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOBlock, VIRTIO_BLK) /* This is the last element of the write scatter-gather list */ struct virtio_blk_inhdr diff --git a/include/hw/virtio/virtio-crypto.h b/include/hw/virtio/virtio-crypto.h index 7969695983..a2228d7b2e 100644 --- a/include/hw/virtio/virtio-crypto.h +++ b/include/hw/virtio/virtio-crypto.h @@ -32,9 +32,7 @@ do { \ #define TYPE_VIRTIO_CRYPTO "virtio-crypto-device" -typedef struct VirtIOCrypto VirtIOCrypto; -DECLARE_INSTANCE_CHECKER(VirtIOCrypto, VIRTIO_CRYPTO, - TYPE_VIRTIO_CRYPTO) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOCrypto, VIRTIO_CRYPTO) #define VIRTIO_CRYPTO_GET_PARENT_CLASS(obj) \ OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_CRYPTO) diff --git a/include/hw/virtio/virtio-gpu-pci.h b/include/hw/virtio/virtio-gpu-pci.h index 5201792ede..225cbbc2e4 100644 --- a/include/hw/virtio/virtio-gpu-pci.h +++ b/include/hw/virtio/virtio-gpu-pci.h @@ -18,14 +18,12 @@ #include "hw/virtio/virtio-gpu.h" #include "qom/object.h" -typedef struct VirtIOGPUPCIBase VirtIOGPUPCIBase; /* * virtio-gpu-pci-base: This extends VirtioPCIProxy. */ #define TYPE_VIRTIO_GPU_PCI_BASE "virtio-gpu-pci-base" -DECLARE_INSTANCE_CHECKER(VirtIOGPUPCIBase, VIRTIO_GPU_PCI_BASE, - TYPE_VIRTIO_GPU_PCI_BASE) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOGPUPCIBase, VIRTIO_GPU_PCI_BASE) struct VirtIOGPUPCIBase { VirtIOPCIProxy parent_obj; diff --git a/include/hw/virtio/virtio-gpu.h b/include/hw/virtio/virtio-gpu.h index 6b45b4799a..455e0a7433 100644 --- a/include/hw/virtio/virtio-gpu.h +++ b/include/hw/virtio/virtio-gpu.h @@ -26,17 +26,13 @@ #define TYPE_VIRTIO_GPU_BASE "virtio-gpu-base" OBJECT_DECLARE_TYPE(VirtIOGPUBase, VirtIOGPUBaseClass, - virtio_gpu_base, VIRTIO_GPU_BASE) + VIRTIO_GPU_BASE) #define TYPE_VIRTIO_GPU "virtio-gpu-device" -typedef struct VirtIOGPU VirtIOGPU; -DECLARE_INSTANCE_CHECKER(VirtIOGPU, VIRTIO_GPU, - TYPE_VIRTIO_GPU) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOGPU, VIRTIO_GPU) #define TYPE_VHOST_USER_GPU "vhost-user-gpu" -typedef struct VhostUserGPU VhostUserGPU; -DECLARE_INSTANCE_CHECKER(VhostUserGPU, VHOST_USER_GPU, - TYPE_VHOST_USER_GPU) +OBJECT_DECLARE_SIMPLE_TYPE(VhostUserGPU, VHOST_USER_GPU) #define VIRTIO_ID_GPU 16 diff --git a/include/hw/virtio/virtio-input.h b/include/hw/virtio/virtio-input.h index 5eb9e7745e..f2da63d309 100644 --- a/include/hw/virtio/virtio-input.h +++ b/include/hw/virtio/virtio-input.h @@ -20,7 +20,7 @@ typedef struct virtio_input_event virtio_input_event; #define TYPE_VIRTIO_INPUT "virtio-input-device" OBJECT_DECLARE_TYPE(VirtIOInput, VirtIOInputClass, - virtio_input, VIRTIO_INPUT) + VIRTIO_INPUT) #define VIRTIO_INPUT_GET_PARENT_CLASS(obj) \ OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_INPUT) @@ -29,23 +29,17 @@ OBJECT_DECLARE_TYPE(VirtIOInput, VirtIOInputClass, #define TYPE_VIRTIO_MOUSE "virtio-mouse-device" #define TYPE_VIRTIO_TABLET "virtio-tablet-device" -typedef struct VirtIOInputHID VirtIOInputHID; -DECLARE_INSTANCE_CHECKER(VirtIOInputHID, VIRTIO_INPUT_HID, - TYPE_VIRTIO_INPUT_HID) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOInputHID, VIRTIO_INPUT_HID) #define VIRTIO_INPUT_HID_GET_PARENT_CLASS(obj) \ OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_INPUT_HID) #define TYPE_VIRTIO_INPUT_HOST "virtio-input-host-device" -typedef struct VirtIOInputHost VirtIOInputHost; -DECLARE_INSTANCE_CHECKER(VirtIOInputHost, VIRTIO_INPUT_HOST, - TYPE_VIRTIO_INPUT_HOST) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOInputHost, VIRTIO_INPUT_HOST) #define VIRTIO_INPUT_HOST_GET_PARENT_CLASS(obj) \ OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_INPUT_HOST) #define TYPE_VHOST_USER_INPUT "vhost-user-input" -typedef struct VHostUserInput VHostUserInput; -DECLARE_INSTANCE_CHECKER(VHostUserInput, VHOST_USER_INPUT, - TYPE_VHOST_USER_INPUT) +OBJECT_DECLARE_SIMPLE_TYPE(VHostUserInput, VHOST_USER_INPUT) #define VHOST_USER_INPUT_GET_PARENT_CLASS(obj) \ OBJECT_GET_PARENT_CLASS(obj, TYPE_VHOST_USER_INPUT) diff --git a/include/hw/virtio/virtio-iommu.h b/include/hw/virtio/virtio-iommu.h index ae9dc566c7..273e35c04b 100644 --- a/include/hw/virtio/virtio-iommu.h +++ b/include/hw/virtio/virtio-iommu.h @@ -27,9 +27,7 @@ #define TYPE_VIRTIO_IOMMU "virtio-iommu-device" #define TYPE_VIRTIO_IOMMU_PCI "virtio-iommu-device-base" -typedef struct VirtIOIOMMU VirtIOIOMMU; -DECLARE_INSTANCE_CHECKER(VirtIOIOMMU, VIRTIO_IOMMU, - TYPE_VIRTIO_IOMMU) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOIOMMU, VIRTIO_IOMMU) #define TYPE_VIRTIO_IOMMU_MEMORY_REGION "virtio-iommu-memory-region" diff --git a/include/hw/virtio/virtio-mem.h b/include/hw/virtio/virtio-mem.h index dfc72e14b1..4eeb82d5dd 100644 --- a/include/hw/virtio/virtio-mem.h +++ b/include/hw/virtio/virtio-mem.h @@ -22,7 +22,7 @@ #define TYPE_VIRTIO_MEM "virtio-mem" OBJECT_DECLARE_TYPE(VirtIOMEM, VirtIOMEMClass, - virtio_mem, VIRTIO_MEM) + VIRTIO_MEM) #define VIRTIO_MEM_MEMDEV_PROP "memdev" #define VIRTIO_MEM_NODE_PROP "node" diff --git a/include/hw/virtio/virtio-mmio.h b/include/hw/virtio/virtio-mmio.h index 6a1c2c20d4..d4c4c386ab 100644 --- a/include/hw/virtio/virtio-mmio.h +++ b/include/hw/virtio/virtio-mmio.h @@ -34,9 +34,7 @@ DECLARE_OBJ_CHECKERS(VirtioBusState, VirtioBusClass, /* virtio-mmio */ #define TYPE_VIRTIO_MMIO "virtio-mmio" -typedef struct VirtIOMMIOProxy VirtIOMMIOProxy; -DECLARE_INSTANCE_CHECKER(VirtIOMMIOProxy, VIRTIO_MMIO, - TYPE_VIRTIO_MMIO) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOMMIOProxy, VIRTIO_MMIO) #define VIRT_MAGIC 0x74726976 /* 'virt' */ #define VIRT_VERSION 2 diff --git a/include/hw/virtio/virtio-net.h b/include/hw/virtio/virtio-net.h index 929ed232dd..f4852ac27b 100644 --- a/include/hw/virtio/virtio-net.h +++ b/include/hw/virtio/virtio-net.h @@ -22,9 +22,7 @@ #include "qom/object.h" #define TYPE_VIRTIO_NET "virtio-net-device" -typedef struct VirtIONet VirtIONet; -DECLARE_INSTANCE_CHECKER(VirtIONet, VIRTIO_NET, - TYPE_VIRTIO_NET) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIONet, VIRTIO_NET) #define TX_TIMER_INTERVAL 150000 /* 150 us */ diff --git a/include/hw/virtio/virtio-pmem.h b/include/hw/virtio/virtio-pmem.h index 56df9a03ce..66b590821e 100644 --- a/include/hw/virtio/virtio-pmem.h +++ b/include/hw/virtio/virtio-pmem.h @@ -21,7 +21,7 @@ #define TYPE_VIRTIO_PMEM "virtio-pmem" OBJECT_DECLARE_TYPE(VirtIOPMEM, VirtIOPMEMClass, - virtio_pmem, VIRTIO_PMEM) + VIRTIO_PMEM) #define VIRTIO_PMEM_ADDR_PROP "memaddr" #define VIRTIO_PMEM_MEMDEV_PROP "memdev" diff --git a/include/hw/virtio/virtio-rng.h b/include/hw/virtio/virtio-rng.h index 3671c9ba19..82734255d9 100644 --- a/include/hw/virtio/virtio-rng.h +++ b/include/hw/virtio/virtio-rng.h @@ -18,9 +18,7 @@ #include "qom/object.h" #define TYPE_VIRTIO_RNG "virtio-rng-device" -typedef struct VirtIORNG VirtIORNG; -DECLARE_INSTANCE_CHECKER(VirtIORNG, VIRTIO_RNG, - TYPE_VIRTIO_RNG) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIORNG, VIRTIO_RNG) #define VIRTIO_RNG_GET_PARENT_CLASS(obj) \ OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_RNG) diff --git a/include/hw/virtio/virtio-scsi.h b/include/hw/virtio/virtio-scsi.h index 9a8a06fdd1..543681bc18 100644 --- a/include/hw/virtio/virtio-scsi.h +++ b/include/hw/virtio/virtio-scsi.h @@ -26,14 +26,10 @@ #include "sysemu/iothread.h" #define TYPE_VIRTIO_SCSI_COMMON "virtio-scsi-common" -typedef struct VirtIOSCSICommon VirtIOSCSICommon; -DECLARE_INSTANCE_CHECKER(VirtIOSCSICommon, VIRTIO_SCSI_COMMON, - TYPE_VIRTIO_SCSI_COMMON) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOSCSICommon, VIRTIO_SCSI_COMMON) #define TYPE_VIRTIO_SCSI "virtio-scsi-device" -typedef struct VirtIOSCSI VirtIOSCSI; -DECLARE_INSTANCE_CHECKER(VirtIOSCSI, VIRTIO_SCSI, - TYPE_VIRTIO_SCSI) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOSCSI, VIRTIO_SCSI) #define VIRTIO_SCSI_MAX_CHANNEL 0 #define VIRTIO_SCSI_MAX_TARGET 255 diff --git a/include/hw/virtio/virtio-serial.h b/include/hw/virtio/virtio-serial.h index 0b7f963611..d87c62eab7 100644 --- a/include/hw/virtio/virtio-serial.h +++ b/include/hw/virtio/virtio-serial.h @@ -27,14 +27,12 @@ struct virtio_serial_conf { #define TYPE_VIRTIO_SERIAL_PORT "virtio-serial-port" OBJECT_DECLARE_TYPE(VirtIOSerialPort, VirtIOSerialPortClass, - virtio_serial_port, VIRTIO_SERIAL_PORT) + VIRTIO_SERIAL_PORT) typedef struct VirtIOSerial VirtIOSerial; #define TYPE_VIRTIO_SERIAL_BUS "virtio-serial-bus" -typedef struct VirtIOSerialBus VirtIOSerialBus; -DECLARE_INSTANCE_CHECKER(VirtIOSerialBus, VIRTIO_SERIAL_BUS, - TYPE_VIRTIO_SERIAL_BUS) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOSerialBus, VIRTIO_SERIAL_BUS) struct VirtIOSerialPortClass { @@ -224,7 +222,6 @@ size_t virtio_serial_guest_ready(VirtIOSerialPort *port); void virtio_serial_throttle_port(VirtIOSerialPort *port, bool throttle); #define TYPE_VIRTIO_SERIAL "virtio-serial-device" -DECLARE_INSTANCE_CHECKER(VirtIOSerial, VIRTIO_SERIAL, - TYPE_VIRTIO_SERIAL) +OBJECT_DECLARE_SIMPLE_TYPE(VirtIOSerial, VIRTIO_SERIAL) #endif diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h index 807280451b..28cf3b9120 100644 --- a/include/hw/virtio/virtio.h +++ b/include/hw/virtio/virtio.h @@ -68,9 +68,7 @@ typedef struct VirtQueueElement #define VIRTIO_NO_VECTOR 0xffff #define TYPE_VIRTIO_DEVICE "virtio-device" -typedef struct VirtioDeviceClass VirtioDeviceClass; -DECLARE_OBJ_CHECKERS(VirtIODevice, VirtioDeviceClass, - VIRTIO_DEVICE, TYPE_VIRTIO_DEVICE) +OBJECT_DECLARE_TYPE(VirtIODevice, VirtioDeviceClass, VIRTIO_DEVICE) enum virtio_device_endian { VIRTIO_DEVICE_ENDIAN_UNKNOWN, diff --git a/include/hw/watchdog/cmsdk-apb-watchdog.h b/include/hw/watchdog/cmsdk-apb-watchdog.h index 63f4becf86..3da0d43e35 100644 --- a/include/hw/watchdog/cmsdk-apb-watchdog.h +++ b/include/hw/watchdog/cmsdk-apb-watchdog.h @@ -36,9 +36,7 @@ #include "qom/object.h" #define TYPE_CMSDK_APB_WATCHDOG "cmsdk-apb-watchdog" -typedef struct CMSDKAPBWatchdog CMSDKAPBWatchdog; -DECLARE_INSTANCE_CHECKER(CMSDKAPBWatchdog, CMSDK_APB_WATCHDOG, - TYPE_CMSDK_APB_WATCHDOG) +OBJECT_DECLARE_SIMPLE_TYPE(CMSDKAPBWatchdog, CMSDK_APB_WATCHDOG) /* * This shares the same struct (and cast macro) as the base diff --git a/include/hw/watchdog/wdt_aspeed.h b/include/hw/watchdog/wdt_aspeed.h index 2ca1eb5432..80b03661e3 100644 --- a/include/hw/watchdog/wdt_aspeed.h +++ b/include/hw/watchdog/wdt_aspeed.h @@ -15,10 +15,7 @@ #include "qom/object.h" #define TYPE_ASPEED_WDT "aspeed.wdt" -typedef struct AspeedWDTClass AspeedWDTClass; -typedef struct AspeedWDTState AspeedWDTState; -DECLARE_OBJ_CHECKERS(AspeedWDTState, AspeedWDTClass, - ASPEED_WDT, TYPE_ASPEED_WDT) +OBJECT_DECLARE_TYPE(AspeedWDTState, AspeedWDTClass, ASPEED_WDT) #define TYPE_ASPEED_2400_WDT TYPE_ASPEED_WDT "-ast2400" #define TYPE_ASPEED_2500_WDT TYPE_ASPEED_WDT "-ast2500" #define TYPE_ASPEED_2600_WDT TYPE_ASPEED_WDT "-ast2600" diff --git a/include/hw/watchdog/wdt_imx2.h b/include/hw/watchdog/wdt_imx2.h index 7665d93640..023d83f48f 100644 --- a/include/hw/watchdog/wdt_imx2.h +++ b/include/hw/watchdog/wdt_imx2.h @@ -19,9 +19,7 @@ #include "qom/object.h" #define TYPE_IMX2_WDT "imx2.wdt" -typedef struct IMX2WdtState IMX2WdtState; -DECLARE_INSTANCE_CHECKER(IMX2WdtState, IMX2_WDT, - TYPE_IMX2_WDT) +OBJECT_DECLARE_SIMPLE_TYPE(IMX2WdtState, IMX2_WDT) enum IMX2WdtRegisters { IMX2_WDT_WCR = 0x0000, /* Control Register */ diff --git a/include/hw/xen/xen-block.h b/include/hw/xen/xen-block.h index 8ff5421dc3..d692ea7580 100644 --- a/include/hw/xen/xen-block.h +++ b/include/hw/xen/xen-block.h @@ -68,28 +68,22 @@ struct XenBlockDeviceClass { XenBlockDeviceRealize realize; XenBlockDeviceUnrealize unrealize; }; -typedef struct XenBlockDeviceClass XenBlockDeviceClass; #define TYPE_XEN_BLOCK_DEVICE "xen-block" -DECLARE_OBJ_CHECKERS(XenBlockDevice, XenBlockDeviceClass, - XEN_BLOCK_DEVICE, TYPE_XEN_BLOCK_DEVICE) +OBJECT_DECLARE_TYPE(XenBlockDevice, XenBlockDeviceClass, XEN_BLOCK_DEVICE) struct XenDiskDevice { XenBlockDevice blockdev; }; -typedef struct XenDiskDevice XenDiskDevice; #define TYPE_XEN_DISK_DEVICE "xen-disk" -DECLARE_INSTANCE_CHECKER(XenDiskDevice, XEN_DISK_DEVICE, - TYPE_XEN_DISK_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(XenDiskDevice, XEN_DISK_DEVICE) struct XenCDRomDevice { XenBlockDevice blockdev; }; -typedef struct XenCDRomDevice XenCDRomDevice; #define TYPE_XEN_CDROM_DEVICE "xen-cdrom" -DECLARE_INSTANCE_CHECKER(XenCDRomDevice, XEN_CDROM_DEVICE, - TYPE_XEN_CDROM_DEVICE) +OBJECT_DECLARE_SIMPLE_TYPE(XenCDRomDevice, XEN_CDROM_DEVICE) #endif /* HW_XEN_BLOCK_H */ diff --git a/include/hw/xen/xen-bus.h b/include/hw/xen/xen-bus.h index e0e67505b8..3df696136f 100644 --- a/include/hw/xen/xen-bus.h +++ b/include/hw/xen/xen-bus.h @@ -57,11 +57,9 @@ struct XenDeviceClass { XenDeviceFrontendChanged frontend_changed; XenDeviceUnrealize unrealize; }; -typedef struct XenDeviceClass XenDeviceClass; #define TYPE_XEN_DEVICE "xen-device" -DECLARE_OBJ_CHECKERS(XenDevice, XenDeviceClass, - XEN_DEVICE, TYPE_XEN_DEVICE) +OBJECT_DECLARE_TYPE(XenDevice, XenDeviceClass, XEN_DEVICE) struct XenBus { BusState qbus; @@ -79,7 +77,7 @@ struct XenBusClass { #define TYPE_XEN_BUS "xen-bus" OBJECT_DECLARE_TYPE(XenBus, XenBusClass, - xen_bus, XEN_BUS) + XEN_BUS) void xen_bus_init(void); diff --git a/include/io/channel-buffer.h b/include/io/channel-buffer.h index 89632ef437..518c28f13f 100644 --- a/include/io/channel-buffer.h +++ b/include/io/channel-buffer.h @@ -25,9 +25,7 @@ #include "qom/object.h" #define TYPE_QIO_CHANNEL_BUFFER "qio-channel-buffer" -typedef struct QIOChannelBuffer QIOChannelBuffer; -DECLARE_INSTANCE_CHECKER(QIOChannelBuffer, QIO_CHANNEL_BUFFER, - TYPE_QIO_CHANNEL_BUFFER) +OBJECT_DECLARE_SIMPLE_TYPE(QIOChannelBuffer, QIO_CHANNEL_BUFFER) /** diff --git a/include/io/channel-command.h b/include/io/channel-command.h index 4b64ff011b..5556a38d7e 100644 --- a/include/io/channel-command.h +++ b/include/io/channel-command.h @@ -25,9 +25,7 @@ #include "qom/object.h" #define TYPE_QIO_CHANNEL_COMMAND "qio-channel-command" -typedef struct QIOChannelCommand QIOChannelCommand; -DECLARE_INSTANCE_CHECKER(QIOChannelCommand, QIO_CHANNEL_COMMAND, - TYPE_QIO_CHANNEL_COMMAND) +OBJECT_DECLARE_SIMPLE_TYPE(QIOChannelCommand, QIO_CHANNEL_COMMAND) diff --git a/include/io/channel-file.h b/include/io/channel-file.h index c6caf179d9..c61d6e0ef7 100644 --- a/include/io/channel-file.h +++ b/include/io/channel-file.h @@ -25,9 +25,7 @@ #include "qom/object.h" #define TYPE_QIO_CHANNEL_FILE "qio-channel-file" -typedef struct QIOChannelFile QIOChannelFile; -DECLARE_INSTANCE_CHECKER(QIOChannelFile, QIO_CHANNEL_FILE, - TYPE_QIO_CHANNEL_FILE) +OBJECT_DECLARE_SIMPLE_TYPE(QIOChannelFile, QIO_CHANNEL_FILE) /** diff --git a/include/io/channel-socket.h b/include/io/channel-socket.h index 62e3e2e970..d07d67fab6 100644 --- a/include/io/channel-socket.h +++ b/include/io/channel-socket.h @@ -27,9 +27,7 @@ #include "qom/object.h" #define TYPE_QIO_CHANNEL_SOCKET "qio-channel-socket" -typedef struct QIOChannelSocket QIOChannelSocket; -DECLARE_INSTANCE_CHECKER(QIOChannelSocket, QIO_CHANNEL_SOCKET, - TYPE_QIO_CHANNEL_SOCKET) +OBJECT_DECLARE_SIMPLE_TYPE(QIOChannelSocket, QIO_CHANNEL_SOCKET) /** diff --git a/include/io/channel-tls.h b/include/io/channel-tls.h index 036bf54195..6dd1a3cd3c 100644 --- a/include/io/channel-tls.h +++ b/include/io/channel-tls.h @@ -27,9 +27,7 @@ #include "qom/object.h" #define TYPE_QIO_CHANNEL_TLS "qio-channel-tls" -typedef struct QIOChannelTLS QIOChannelTLS; -DECLARE_INSTANCE_CHECKER(QIOChannelTLS, QIO_CHANNEL_TLS, - TYPE_QIO_CHANNEL_TLS) +OBJECT_DECLARE_SIMPLE_TYPE(QIOChannelTLS, QIO_CHANNEL_TLS) /** diff --git a/include/io/channel-websock.h b/include/io/channel-websock.h index b07eddabe1..9c40513e74 100644 --- a/include/io/channel-websock.h +++ b/include/io/channel-websock.h @@ -27,9 +27,7 @@ #include "qom/object.h" #define TYPE_QIO_CHANNEL_WEBSOCK "qio-channel-websock" -typedef struct QIOChannelWebsock QIOChannelWebsock; -DECLARE_INSTANCE_CHECKER(QIOChannelWebsock, QIO_CHANNEL_WEBSOCK, - TYPE_QIO_CHANNEL_WEBSOCK) +OBJECT_DECLARE_SIMPLE_TYPE(QIOChannelWebsock, QIO_CHANNEL_WEBSOCK) typedef union QIOChannelWebsockMask QIOChannelWebsockMask; diff --git a/include/io/channel.h b/include/io/channel.h index 245479548a..3c04f0edda 100644 --- a/include/io/channel.h +++ b/include/io/channel.h @@ -27,7 +27,7 @@ #define TYPE_QIO_CHANNEL "qio-channel" OBJECT_DECLARE_TYPE(QIOChannel, QIOChannelClass, - qio_channel, QIO_CHANNEL) + QIO_CHANNEL) #define QIO_CHANNEL_ERR_BLOCK -2 diff --git a/include/io/dns-resolver.h b/include/io/dns-resolver.h index e248fba5bd..01d0bd7a42 100644 --- a/include/io/dns-resolver.h +++ b/include/io/dns-resolver.h @@ -26,8 +26,8 @@ #include "io/task.h" #define TYPE_QIO_DNS_RESOLVER "qio-dns-resolver" -OBJECT_DECLARE_SIMPLE_TYPE(QIODNSResolver, qio_dns_resolver, - QIO_DNS_RESOLVER, ObjectClass) +OBJECT_DECLARE_SIMPLE_TYPE(QIODNSResolver, + QIO_DNS_RESOLVER) /** diff --git a/include/io/net-listener.h b/include/io/net-listener.h index 60fad29ff4..ab9f291ed6 100644 --- a/include/io/net-listener.h +++ b/include/io/net-listener.h @@ -25,8 +25,8 @@ #include "qom/object.h" #define TYPE_QIO_NET_LISTENER "qio-net-listener" -OBJECT_DECLARE_SIMPLE_TYPE(QIONetListener, qio_net_listener, - QIO_NET_LISTENER, ObjectClass) +OBJECT_DECLARE_SIMPLE_TYPE(QIONetListener, + QIO_NET_LISTENER) typedef void (*QIONetListenerClientFunc)(QIONetListener *listener, diff --git a/include/monitor/monitor.h b/include/monitor/monitor.h index 1018d754a6..c0170773d4 100644 --- a/include/monitor/monitor.h +++ b/include/monitor/monitor.h @@ -43,8 +43,7 @@ int monitor_read_password(MonitorHMP *mon, ReadLineFunc *readline_func, AddfdInfo *monitor_fdset_add_fd(int fd, bool has_fdset_id, int64_t fdset_id, bool has_opaque, const char *opaque, Error **errp); -int monitor_fdset_get_fd(int64_t fdset_id, int flags); -int monitor_fdset_dup_fd_add(int64_t fdset_id, int dup_fd); +int monitor_fdset_dup_fd_add(int64_t fdset_id, int flags); void monitor_fdset_dup_fd_remove(int dup_fd); int64_t monitor_fdset_dup_fd_find(int dup_fd); diff --git a/include/net/can_emu.h b/include/net/can_emu.h index 150f91a657..743c6647c1 100644 --- a/include/net/can_emu.h +++ b/include/net/can_emu.h @@ -100,8 +100,7 @@ struct CanBusClientState { }; #define TYPE_CAN_BUS "can-bus" -DECLARE_INSTANCE_CHECKER(CanBusState, CAN_BUS, - TYPE_CAN_BUS) +OBJECT_DECLARE_SIMPLE_TYPE(CanBusState, CAN_BUS) int can_bus_filter_match(struct qemu_can_filter *filter, qemu_canid_t can_id); diff --git a/include/net/can_host.h b/include/net/can_host.h index 18979c2e2d..4e3ce3f954 100644 --- a/include/net/can_host.h +++ b/include/net/can_host.h @@ -32,10 +32,7 @@ #include "qom/object.h" #define TYPE_CAN_HOST "can-host" -typedef struct CanHostClass CanHostClass; -typedef struct CanHostState CanHostState; -DECLARE_OBJ_CHECKERS(CanHostState, CanHostClass, - CAN_HOST, TYPE_CAN_HOST) +OBJECT_DECLARE_TYPE(CanHostState, CanHostClass, CAN_HOST) struct CanHostState { ObjectClass oc; diff --git a/include/net/filter.h b/include/net/filter.h index e7e593128a..27ffc630df 100644 --- a/include/net/filter.h +++ b/include/net/filter.h @@ -15,9 +15,7 @@ #include "net/queue.h" #define TYPE_NETFILTER "netfilter" -typedef struct NetFilterClass NetFilterClass; -DECLARE_OBJ_CHECKERS(NetFilterState, NetFilterClass, - NETFILTER, TYPE_NETFILTER) +OBJECT_DECLARE_TYPE(NetFilterState, NetFilterClass, NETFILTER) typedef void (FilterSetup) (NetFilterState *nf, Error **errp); typedef void (FilterCleanup) (NetFilterState *nf); diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h index 412962d91a..dad44be043 100644 --- a/include/qemu/osdep.h +++ b/include/qemu/osdep.h @@ -497,16 +497,23 @@ int qemu_madvise(void *addr, size_t len, int advice); int qemu_mprotect_rwx(void *addr, size_t size); int qemu_mprotect_none(void *addr, size_t size); -int qemu_open(const char *name, int flags, ...); +/* + * Don't introduce new usage of this function, prefer the following + * qemu_open/qemu_create that take an "Error **errp" + */ +int qemu_open_old(const char *name, int flags, ...); +int qemu_open(const char *name, int flags, Error **errp); +int qemu_create(const char *name, int flags, mode_t mode, Error **errp); int qemu_close(int fd); int qemu_unlink(const char *name); #ifndef _WIN32 +int qemu_dup_flags(int fd, int flags); int qemu_dup(int fd); -#endif int qemu_lock_fd(int fd, int64_t start, int64_t len, bool exclusive); int qemu_unlock_fd(int fd, int64_t start, int64_t len); int qemu_lock_fd_test(int fd, int64_t start, int64_t len, bool exclusive); bool qemu_has_ofd_lock(void); +#endif #if defined(__HAIKU__) && defined(__i386__) #define FMT_pid "%ld" diff --git a/include/qemu/rcu.h b/include/qemu/rcu.h index 570aa603eb..0e375ebe13 100644 --- a/include/qemu/rcu.h +++ b/include/qemu/rcu.h @@ -133,6 +133,7 @@ struct rcu_head { }; extern void call_rcu1(struct rcu_head *head, RCUCBFunc *func); +extern void drain_call_rcu(void); /* The operands of the minus operator must have the same type, * which must be the one that we specify in the cast. diff --git a/include/qom/object.h b/include/qom/object.h index 056f67ab3b..19cccd3f5f 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -614,7 +614,6 @@ struct Object * OBJECT_DECLARE_TYPE: * @InstanceType: instance struct name * @ClassType: class struct name - * @module_obj_name: the object name in lowercase with underscore separators * @MODULE_OBJ_NAME: the object name in uppercase with underscore separators * * This macro is typically used in a header file, and will: @@ -625,7 +624,7 @@ struct Object * * The object struct and class struct need to be declared manually. */ -#define OBJECT_DECLARE_TYPE(InstanceType, ClassType, module_obj_name, MODULE_OBJ_NAME) \ +#define OBJECT_DECLARE_TYPE(InstanceType, ClassType, MODULE_OBJ_NAME) \ typedef struct InstanceType InstanceType; \ typedef struct ClassType ClassType; \ \ @@ -637,21 +636,20 @@ struct Object /** * OBJECT_DECLARE_SIMPLE_TYPE: * @InstanceType: instance struct name - * @module_obj_name: the object name in lowercase with underscore separators * @MODULE_OBJ_NAME: the object name in uppercase with underscore separators - * @ParentClassType: class struct name of parent type * - * This does the same as OBJECT_DECLARE_TYPE(), but also declares - * the class struct, thus only the object struct needs to be declare - * manually. + * This does the same as OBJECT_DECLARE_TYPE(), but with no class struct + * declared. * * This macro should be used unless the class struct needs to have * virtual methods declared. */ -#define OBJECT_DECLARE_SIMPLE_TYPE(InstanceType, module_obj_name, \ - MODULE_OBJ_NAME, ParentClassType) \ - OBJECT_DECLARE_TYPE(InstanceType, InstanceType##Class, module_obj_name, MODULE_OBJ_NAME) \ - struct InstanceType##Class { ParentClassType parent_class; }; +#define OBJECT_DECLARE_SIMPLE_TYPE(InstanceType, MODULE_OBJ_NAME) \ + typedef struct InstanceType InstanceType; \ + \ + G_DEFINE_AUTOPTR_CLEANUP_FUNC(InstanceType, object_unref) \ + \ + DECLARE_INSTANCE_CHECKER(InstanceType, MODULE_OBJ_NAME, TYPE_##MODULE_OBJ_NAME) /** @@ -691,6 +689,7 @@ struct Object .parent = TYPE_##PARENT_MODULE_OBJ_NAME, \ .name = TYPE_##MODULE_OBJ_NAME, \ .instance_size = sizeof(ModuleObjName), \ + .instance_align = __alignof__(ModuleObjName), \ .instance_init = module_obj_name##_init, \ .instance_finalize = module_obj_name##_finalize, \ .class_size = sizeof(ModuleObjName##Class), \ @@ -770,6 +769,9 @@ struct Object * @instance_size: The size of the object (derivative of #Object). If * @instance_size is 0, then the size of the object will be the size of the * parent object. + * @instance_align: The required alignment of the object. If @instance_align + * is 0, then normal malloc alignment is sufficient; if non-zero, then we + * must use qemu_memalign for allocation. * @instance_init: This function is called to initialize an object. The parent * class will have already been initialized so the type is only responsible * for initializing its own members. @@ -807,6 +809,7 @@ struct TypeInfo const char *parent; size_t instance_size; + size_t instance_align; void (*instance_init)(Object *obj); void (*instance_post_init)(Object *obj); void (*instance_finalize)(Object *obj); @@ -1257,7 +1260,7 @@ type_init(do_qemu_init_ ## type_array) * of this function. The only difference in behavior is that this function * asserts instead of returning #NULL on failure if QOM cast debugging is * enabled. This function is not meant to be called directly, but only through - * the wrapper macros OBJECT_CLASS_CHECK and INTERFACE_CHECK. + * the wrapper macro OBJECT_CLASS_CHECK. */ ObjectClass *object_class_dynamic_cast_assert(ObjectClass *klass, const char *typename, @@ -1624,7 +1627,7 @@ bool object_property_set_bool(Object *obj, const char *name, * @name: the name of the property * @errp: returns an error if this function fails * - * Returns: the value of the property, converted to a boolean, or NULL if + * Returns: the value of the property, converted to a boolean, or false if * an error occurs (including when the property value is not a bool). */ bool object_property_get_bool(Object *obj, const char *name, @@ -1649,7 +1652,7 @@ bool object_property_set_int(Object *obj, const char *name, * @name: the name of the property * @errp: returns an error if this function fails * - * Returns: the value of the property, converted to an integer, or negative if + * Returns: the value of the property, converted to an integer, or -1 if * an error occurs (including when the property value is not an integer). */ int64_t object_property_get_int(Object *obj, const char *name, @@ -1687,9 +1690,9 @@ uint64_t object_property_get_uint(Object *obj, const char *name, * @typename: the name of the enum data type * @errp: returns an error if this function fails * - * Returns: the value of the property, converted to an integer, or - * undefined if an error occurs (including when the property value is not - * an enum). + * Returns: the value of the property, converted to an integer (which + * can't be negative), or -1 on error (including when the property + * value is not an enum). */ int object_property_get_enum(Object *obj, const char *name, const char *typename, Error **errp); diff --git a/include/scsi/pr-manager.h b/include/scsi/pr-manager.h index 26bd134531..e4ecbe00f6 100644 --- a/include/scsi/pr-manager.h +++ b/include/scsi/pr-manager.h @@ -10,7 +10,7 @@ #define TYPE_PR_MANAGER "pr-manager" OBJECT_DECLARE_TYPE(PRManager, PRManagerClass, - pr_manager, PR_MANAGER) + PR_MANAGER) struct sg_io_hdr; diff --git a/include/sysemu/cryptodev.h b/include/sysemu/cryptodev.h index 06726f7014..b458aa4dae 100644 --- a/include/sysemu/cryptodev.h +++ b/include/sysemu/cryptodev.h @@ -38,7 +38,7 @@ #define TYPE_CRYPTODEV_BACKEND "cryptodev-backend" OBJECT_DECLARE_TYPE(CryptoDevBackend, CryptoDevBackendClass, - cryptodev_backend, CRYPTODEV_BACKEND) + CRYPTODEV_BACKEND) #define MAX_CRYPTO_QUEUE_NUM 64 diff --git a/include/sysemu/hostmem.h b/include/sysemu/hostmem.h index e5b7a152d3..df5644723a 100644 --- a/include/sysemu/hostmem.h +++ b/include/sysemu/hostmem.h @@ -21,7 +21,7 @@ #define TYPE_MEMORY_BACKEND "memory-backend" OBJECT_DECLARE_TYPE(HostMemoryBackend, HostMemoryBackendClass, - memory_backend, MEMORY_BACKEND) + MEMORY_BACKEND) /* hostmem-ram.c */ /** diff --git a/include/sysemu/rng-random.h b/include/sysemu/rng-random.h index 58033ac3fe..0fdc6c6974 100644 --- a/include/sysemu/rng-random.h +++ b/include/sysemu/rng-random.h @@ -15,9 +15,7 @@ #include "qom/object.h" #define TYPE_RNG_RANDOM "rng-random" -typedef struct RngRandom RngRandom; -DECLARE_INSTANCE_CHECKER(RngRandom, RNG_RANDOM, - TYPE_RNG_RANDOM) +OBJECT_DECLARE_SIMPLE_TYPE(RngRandom, RNG_RANDOM) #endif diff --git a/include/sysemu/rng.h b/include/sysemu/rng.h index cee45a4787..e383f87d20 100644 --- a/include/sysemu/rng.h +++ b/include/sysemu/rng.h @@ -18,7 +18,7 @@ #define TYPE_RNG_BACKEND "rng-backend" OBJECT_DECLARE_TYPE(RngBackend, RngBackendClass, - rng_backend, RNG_BACKEND) + RNG_BACKEND) #define TYPE_RNG_BUILTIN "rng-builtin" diff --git a/include/sysemu/tpm_backend.h b/include/sysemu/tpm_backend.h index 7e8a014031..6f078f5f48 100644 --- a/include/sysemu/tpm_backend.h +++ b/include/sysemu/tpm_backend.h @@ -20,7 +20,7 @@ #define TYPE_TPM_BACKEND "tpm-backend" OBJECT_DECLARE_TYPE(TPMBackend, TPMBackendClass, - tpm_backend, TPM_BACKEND) + TPM_BACKEND) typedef struct TPMBackendCmd { diff --git a/include/sysemu/vhost-user-backend.h b/include/sysemu/vhost-user-backend.h index 23205edeb8..327b0b84f1 100644 --- a/include/sysemu/vhost-user-backend.h +++ b/include/sysemu/vhost-user-backend.h @@ -22,8 +22,8 @@ #include "io/channel.h" #define TYPE_VHOST_USER_BACKEND "vhost-user-backend" -OBJECT_DECLARE_SIMPLE_TYPE(VhostUserBackend, vhost_user_backend, - VHOST_USER_BACKEND, ObjectClass) +OBJECT_DECLARE_SIMPLE_TYPE(VhostUserBackend, + VHOST_USER_BACKEND) diff --git a/include/ui/console.h b/include/ui/console.h index 8602203523..d091c2e1e2 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -106,9 +106,7 @@ void kbd_put_keysym(int keysym); /* consoles */ #define TYPE_QEMU_CONSOLE "qemu-console" -typedef struct QemuConsoleClass QemuConsoleClass; -DECLARE_OBJ_CHECKERS(QemuConsole, QemuConsoleClass, - QEMU_CONSOLE, TYPE_QEMU_CONSOLE) +OBJECT_DECLARE_TYPE(QemuConsole, QemuConsoleClass, QEMU_CONSOLE) struct QemuConsoleClass { diff --git a/io/channel-file.c b/io/channel-file.c index dac21f6012..2ed3b75e8b 100644 --- a/io/channel-file.c +++ b/io/channel-file.c @@ -51,7 +51,7 @@ qio_channel_file_new_path(const char *path, ioc = QIO_CHANNEL_FILE(object_new(TYPE_QIO_CHANNEL_FILE)); - ioc->fd = qemu_open(path, flags, mode); + ioc->fd = qemu_open_old(path, flags, mode); if (ioc->fd < 0) { object_unref(OBJECT(ioc)); error_setg_errno(errp, errno, diff --git a/io/dns-resolver.c b/io/dns-resolver.c index 6ebe2a5650..b55d8cc3fe 100644 --- a/io/dns-resolver.c +++ b/io/dns-resolver.c @@ -267,7 +267,6 @@ static const TypeInfo qio_dns_resolver_info = { .parent = TYPE_OBJECT, .name = TYPE_QIO_DNS_RESOLVER, .instance_size = sizeof(QIODNSResolver), - .class_size = sizeof(QIODNSResolverClass), }; diff --git a/io/net-listener.c b/io/net-listener.c index 5d8a226872..46c2643d00 100644 --- a/io/net-listener.c +++ b/io/net-listener.c @@ -307,7 +307,6 @@ static const TypeInfo qio_net_listener_info = { .name = TYPE_QIO_NET_LISTENER, .instance_size = sizeof(QIONetListener), .instance_finalize = qio_net_listener_finalize, - .class_size = sizeof(QIONetListenerClass), }; diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 4961e6119e..f6022fd704 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -2331,14 +2331,13 @@ static void pgb_reserved_va(const char *image_name, abi_ulong guest_loaddr, assert(guest_base != 0); test = g2h(0); addr = mmap(test, reserved_va, PROT_NONE, flags, -1, 0); - if (addr == MAP_FAILED) { + if (addr == MAP_FAILED || addr != test) { error_report("Unable to reserve 0x%lx bytes of virtual address " - "space (%s) for use as guest address space (check your " - "virtual memory ulimit setting or reserve less " - "using -R option)", reserved_va, strerror(errno)); + "space at %p (%s) for use as guest address space (check your" + "virtual memory ulimit setting, min_mmap_addr or reserve less " + "using -R option)", reserved_va, test, strerror(errno)); exit(EXIT_FAILURE); } - assert(addr == test); } void probe_guest_base(const char *image_name, abi_ulong guest_loaddr, diff --git a/migration/rdma.c b/migration/rdma.c index 8f43d69b06..3bd30d46ad 100644 --- a/migration/rdma.c +++ b/migration/rdma.c @@ -398,9 +398,7 @@ typedef struct RDMAContext { } RDMAContext; #define TYPE_QIO_CHANNEL_RDMA "qio-channel-rdma" -typedef struct QIOChannelRDMA QIOChannelRDMA; -DECLARE_INSTANCE_CHECKER(QIOChannelRDMA, QIO_CHANNEL_RDMA, - TYPE_QIO_CHANNEL_RDMA) +OBJECT_DECLARE_SIMPLE_TYPE(QIOChannelRDMA, QIO_CHANNEL_RDMA) diff --git a/monitor/misc.c b/monitor/misc.c index e847b58a8c..0b1b9b196c 100644 --- a/monitor/misc.c +++ b/monitor/misc.c @@ -1547,69 +1547,61 @@ AddfdInfo *monitor_fdset_add_fd(int fd, bool has_fdset_id, int64_t fdset_id, return fdinfo; } -int monitor_fdset_get_fd(int64_t fdset_id, int flags) +int monitor_fdset_dup_fd_add(int64_t fdset_id, int flags) { #ifdef _WIN32 return -ENOENT; #else MonFdset *mon_fdset; - MonFdsetFd *mon_fdset_fd; - int mon_fd_flags; - int ret; qemu_mutex_lock(&mon_fdsets_lock); QLIST_FOREACH(mon_fdset, &mon_fdsets, next) { + MonFdsetFd *mon_fdset_fd; + MonFdsetFd *mon_fdset_fd_dup; + int fd = -1; + int dup_fd; + int mon_fd_flags; + if (mon_fdset->id != fdset_id) { continue; } + QLIST_FOREACH(mon_fdset_fd, &mon_fdset->fds, next) { mon_fd_flags = fcntl(mon_fdset_fd->fd, F_GETFL); if (mon_fd_flags == -1) { - ret = -errno; - goto out; + qemu_mutex_unlock(&mon_fdsets_lock); + return -1; } if ((flags & O_ACCMODE) == (mon_fd_flags & O_ACCMODE)) { - ret = mon_fdset_fd->fd; - goto out; + fd = mon_fdset_fd->fd; + break; } } - ret = -EACCES; - goto out; - } - ret = -ENOENT; - -out: - qemu_mutex_unlock(&mon_fdsets_lock); - return ret; -#endif -} - -int monitor_fdset_dup_fd_add(int64_t fdset_id, int dup_fd) -{ - MonFdset *mon_fdset; - MonFdsetFd *mon_fdset_fd_dup; - qemu_mutex_lock(&mon_fdsets_lock); - QLIST_FOREACH(mon_fdset, &mon_fdsets, next) { - if (mon_fdset->id != fdset_id) { - continue; + if (fd == -1) { + qemu_mutex_unlock(&mon_fdsets_lock); + errno = EACCES; + return -1; } - QLIST_FOREACH(mon_fdset_fd_dup, &mon_fdset->dup_fds, next) { - if (mon_fdset_fd_dup->fd == dup_fd) { - goto err; - } + + dup_fd = qemu_dup_flags(fd, flags); + if (dup_fd == -1) { + qemu_mutex_unlock(&mon_fdsets_lock); + return -1; } + mon_fdset_fd_dup = g_malloc0(sizeof(*mon_fdset_fd_dup)); mon_fdset_fd_dup->fd = dup_fd; QLIST_INSERT_HEAD(&mon_fdset->dup_fds, mon_fdset_fd_dup, next); qemu_mutex_unlock(&mon_fdsets_lock); - return 0; + return dup_fd; } -err: qemu_mutex_unlock(&mon_fdsets_lock); + errno = ENOENT; return -1; +#endif } static int64_t monitor_fdset_dup_fd_find_remove(int dup_fd, bool remove) diff --git a/net/can/can_socketcan.c b/net/can/can_socketcan.c index f933bd2db2..ce8c2549ed 100644 --- a/net/can/can_socketcan.c +++ b/net/can/can_socketcan.c @@ -47,9 +47,7 @@ #endif /*DEBUG_CAN*/ #define TYPE_CAN_HOST_SOCKETCAN "can-host-socketcan" -typedef struct CanHostSocketCAN CanHostSocketCAN; -DECLARE_INSTANCE_CHECKER(CanHostSocketCAN, CAN_HOST_SOCKETCAN, - TYPE_CAN_HOST_SOCKETCAN) +OBJECT_DECLARE_SIMPLE_TYPE(CanHostSocketCAN, CAN_HOST_SOCKETCAN) #define CAN_READ_BUF_LEN 5 struct CanHostSocketCAN { diff --git a/net/dump.c b/net/dump.c index 42e64a6f29..7fd448d2e1 100644 --- a/net/dump.c +++ b/net/dump.c @@ -140,9 +140,7 @@ static int net_dump_state_init(DumpState *s, const char *filename, #define TYPE_FILTER_DUMP "filter-dump" -typedef struct NetFilterDumpState NetFilterDumpState; -DECLARE_INSTANCE_CHECKER(NetFilterDumpState, FILTER_DUMP, - TYPE_FILTER_DUMP) +OBJECT_DECLARE_SIMPLE_TYPE(NetFilterDumpState, FILTER_DUMP) struct NetFilterDumpState { NetFilterState nfs; diff --git a/net/filter-buffer.c b/net/filter-buffer.c index 6ade7a19b8..d8392be53c 100644 --- a/net/filter-buffer.c +++ b/net/filter-buffer.c @@ -18,9 +18,7 @@ #define TYPE_FILTER_BUFFER "filter-buffer" -typedef struct FilterBufferState FilterBufferState; -DECLARE_INSTANCE_CHECKER(FilterBufferState, FILTER_BUFFER, - TYPE_FILTER_BUFFER) +OBJECT_DECLARE_SIMPLE_TYPE(FilterBufferState, FILTER_BUFFER) struct FilterBufferState { NetFilterState parent_obj; diff --git a/net/filter-replay.c b/net/filter-replay.c index 78696c162e..eef8443059 100644 --- a/net/filter-replay.c +++ b/net/filter-replay.c @@ -23,9 +23,7 @@ #define TYPE_FILTER_REPLAY "filter-replay" -typedef struct NetFilterReplayState NetFilterReplayState; -DECLARE_INSTANCE_CHECKER(NetFilterReplayState, FILTER_REPLAY, - TYPE_FILTER_REPLAY) +OBJECT_DECLARE_SIMPLE_TYPE(NetFilterReplayState, FILTER_REPLAY) struct NetFilterReplayState { NetFilterState nfs; diff --git a/net/filter-rewriter.c b/net/filter-rewriter.c index 3070b6d59e..dc3c27a489 100644 --- a/net/filter-rewriter.c +++ b/net/filter-rewriter.c @@ -24,9 +24,7 @@ #include "util.h" #define TYPE_FILTER_REWRITER "filter-rewriter" -typedef struct RewriterState RewriterState; -DECLARE_INSTANCE_CHECKER(RewriterState, FILTER_REWRITER, - TYPE_FILTER_REWRITER) +OBJECT_DECLARE_SIMPLE_TYPE(RewriterState, FILTER_REWRITER) #define FAILOVER_MODE_ON true #define FAILOVER_MODE_OFF false diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c index bc0e0d2d35..e2b3ba85bf 100644 --- a/net/vhost-vdpa.c +++ b/net/vhost-vdpa.c @@ -184,7 +184,7 @@ static int net_vhost_vdpa_init(NetClientState *peer, const char *device, snprintf(nc->info_str, sizeof(nc->info_str), TYPE_VHOST_VDPA); nc->queue_index = 0; s = DO_UPCAST(VhostVDPAState, nc, nc); - vdpa_device_fd = qemu_open(vhostdev, O_RDWR); + vdpa_device_fd = qemu_open_old(vhostdev, O_RDWR); if (vdpa_device_fd == -1) { return -errno; } diff --git a/os-posix.c b/os-posix.c index bf98508b6d..0bfd8e2d3c 100644 --- a/os-posix.c +++ b/os-posix.c @@ -297,7 +297,7 @@ void os_setup_post(void) error_report("not able to chdir to /: %s", strerror(errno)); exit(1); } - TFR(fd = qemu_open("/dev/null", O_RDWR)); + TFR(fd = qemu_open_old("/dev/null", O_RDWR)); if (fd == -1) { exit(1); } diff --git a/pc-bios/bios-microvm.bin b/pc-bios/bios-microvm.bin Binary files differindex 45eabc5166..eefd32197e 100644 --- a/pc-bios/bios-microvm.bin +++ b/pc-bios/bios-microvm.bin diff --git a/pc-bios/meson.build b/pc-bios/meson.build index 182d5ebb35..a0d21be432 100644 --- a/pc-bios/meson.build +++ b/pc-bios/meson.build @@ -28,6 +28,7 @@ blobs = files( 'bios.bin', 'bios-256k.bin', 'bios-microvm.bin', + 'qboot.rom', 'sgabios.bin', 'vgabios.bin', 'vgabios-cirrus.bin', diff --git a/pc-bios/qboot.rom b/pc-bios/qboot.rom Binary files differnew file mode 100644 index 0000000000..45eabc5166 --- /dev/null +++ b/pc-bios/qboot.rom diff --git a/qga/channel-posix.c b/qga/channel-posix.c index 8fc205ad21..0373975360 100644 --- a/qga/channel-posix.c +++ b/qga/channel-posix.c @@ -127,7 +127,7 @@ static gboolean ga_channel_open(GAChannel *c, const gchar *path, switch (c->method) { case GA_CHANNEL_VIRTIO_SERIAL: { assert(fd < 0); - fd = qemu_open(path, O_RDWR | O_NONBLOCK + fd = qemu_open_old(path, O_RDWR | O_NONBLOCK #ifndef CONFIG_SOLARIS | O_ASYNC #endif @@ -157,7 +157,7 @@ static gboolean ga_channel_open(GAChannel *c, const gchar *path, struct termios tio; assert(fd < 0); - fd = qemu_open(path, O_RDWR | O_NOCTTY | O_NONBLOCK); + fd = qemu_open_old(path, O_RDWR | O_NOCTTY | O_NONBLOCK); if (fd == -1) { g_critical("error opening channel: %s", strerror(errno)); return false; diff --git a/qga/commands-posix.c b/qga/commands-posix.c index af5a58a9fd..3bffee99d4 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -1365,7 +1365,7 @@ int64_t qmp_guest_fsfreeze_freeze_list(bool has_mountpoints, } } - fd = qemu_open(mount->dirname, O_RDONLY); + fd = qemu_open_old(mount->dirname, O_RDONLY); if (fd == -1) { error_setg_errno(errp, errno, "failed to open %s", mount->dirname); goto error; @@ -1432,7 +1432,7 @@ int64_t qmp_guest_fsfreeze_thaw(Error **errp) QTAILQ_FOREACH(mount, &mounts, next) { logged = false; - fd = qemu_open(mount->dirname, O_RDONLY); + fd = qemu_open_old(mount->dirname, O_RDONLY); if (fd == -1) { continue; } @@ -1522,7 +1522,7 @@ qmp_guest_fstrim(bool has_minimum, int64_t minimum, Error **errp) list->next = response->paths; response->paths = list; - fd = qemu_open(mount->dirname, O_RDONLY); + fd = qemu_open_old(mount->dirname, O_RDONLY); if (fd == -1) { result->error = g_strdup_printf("failed to open: %s", strerror(errno)); diff --git a/qga/commands-win32.c b/qga/commands-win32.c index 48d8bbe649..0c3c05484f 100644 --- a/qga/commands-win32.c +++ b/qga/commands-win32.c @@ -57,8 +57,10 @@ DEFINE_DEVPROPKEY(qga_DEVPKEY_Device_DriverDate, 0xa8b865dd, 0x2e3d, DEFINE_DEVPROPKEY(qga_DEVPKEY_Device_DriverVersion, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 3); /* DEVPROP_TYPE_STRING */ -/* The following shoud be in cfgmgr32.h, but it isn't */ +/* The CM_Get_DevNode_PropertyW prototype is only sometimes in cfgmgr32.h */ #ifndef CM_Get_DevNode_Property +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wredundant-decls" CMAPI CONFIGRET WINAPI CM_Get_DevNode_PropertyW( DEVINST dnDevInst, CONST DEVPROPKEY * PropertyKey, @@ -68,6 +70,7 @@ CMAPI CONFIGRET WINAPI CM_Get_DevNode_PropertyW( ULONG ulFlags ); #define CM_Get_DevNode_Property CM_Get_DevNode_PropertyW +#pragma GCC diagnostic pop #endif #ifndef SHTDN_REASON_FLAG_PLANNED diff --git a/qom/object.c b/qom/object.c index 387efb25eb..a91a6a515a 100644 --- a/qom/object.c +++ b/qom/object.c @@ -50,6 +50,7 @@ struct TypeImpl size_t class_size; size_t instance_size; + size_t instance_align; void (*class_init)(ObjectClass *klass, void *data); void (*class_base_init)(ObjectClass *klass, void *data); @@ -114,6 +115,7 @@ static TypeImpl *type_new(const TypeInfo *info) ti->class_size = info->class_size; ti->instance_size = info->instance_size; + ti->instance_align = info->instance_align; ti->class_init = info->class_init; ti->class_base_init = info->class_base_init; @@ -688,16 +690,44 @@ static void object_finalize(void *data) } } +/* Find the minimum alignment guaranteed by the system malloc. */ +#if __STDC_VERSION__ >= 201112L +typddef max_align_t qemu_max_align_t; +#else +typedef union { + long l; + void *p; + double d; + long double ld; +} qemu_max_align_t; +#endif + static Object *object_new_with_type(Type type) { Object *obj; + size_t size, align; + void (*obj_free)(void *); g_assert(type != NULL); type_initialize(type); - obj = g_malloc(type->instance_size); - object_initialize_with_type(obj, type->instance_size, type); - obj->free = g_free; + size = type->instance_size; + align = type->instance_align; + + /* + * Do not use qemu_memalign unless required. Depending on the + * implementation, extra alignment implies extra overhead. + */ + if (likely(align <= __alignof__(qemu_max_align_t))) { + obj = g_malloc(size); + obj_free = g_free; + } else { + obj = qemu_memalign(align, size); + obj_free = qemu_vfree; + } + + object_initialize_with_type(obj, size, type); + obj->free = obj_free; return obj; } @@ -1564,21 +1594,21 @@ int object_property_get_enum(Object *obj, const char *name, EnumProperty *enumprop; if (prop == NULL) { - return 0; + return -1; } if (!g_str_equal(prop->type, typename)) { error_setg(errp, "Property %s on %s is not '%s' enum type", name, object_class_get_name( object_get_class(obj)), typename); - return 0; + return -1; } enumprop = prop->opaque; str = object_property_get_str(obj, name, errp); if (!str) { - return 0; + return -1; } ret = qapi_enum_parse(enumprop->lookup, str, -1, errp); diff --git a/roms/Makefile b/roms/Makefile index 3726f06fe7..1489d47350 100644 --- a/roms/Makefile +++ b/roms/Makefile @@ -68,13 +68,16 @@ default help: @echo " efi -- update UEFI (edk2) platform firmware" @echo " opensbi32-generic -- update OpenSBI for 32-bit generic machine" @echo " opensbi64-generic -- update OpenSBI for 64-bit generic machine" - @echo " bios-microvm -- update bios-microvm.bin (qboot)" + @echo " qboot -- update qboot" @echo " clean -- delete the files generated by the previous" \ "build targets" -bios: build-seabios-config-seabios-128k build-seabios-config-seabios-256k +bios: build-seabios-config-seabios-128k \ + build-seabios-config-seabios-256k \ + build-seabios-config-seabios-microvm cp seabios/builds/seabios-128k/bios.bin ../pc-bios/bios.bin cp seabios/builds/seabios-256k/bios.bin ../pc-bios/bios-256k.bin + cp seabios/builds/seabios-microvm/bios.bin ../pc-bios/bios-microvm.bin vgabios seavgabios: $(patsubst %,seavgabios-%,$(vgabios_variants)) @@ -183,9 +186,9 @@ opensbi64-generic: cp opensbi/build/platform/generic/firmware/fw_dynamic.bin ../pc-bios/opensbi-riscv64-generic-fw_dynamic.bin cp opensbi/build/platform/generic/firmware/fw_dynamic.elf ../pc-bios/opensbi-riscv64-generic-fw_dynamic.elf -bios-microvm: +qboot: $(MAKE) -C qboot - cp qboot/bios.bin ../pc-bios/bios-microvm.bin + cp qboot/bios.bin ../pc-bios/qboot.rom npcm7xx_bootrom: $(MAKE) -C vbootrom CROSS_COMPILE=$(arm_cross_prefix) diff --git a/roms/config.seabios-microvm b/roms/config.seabios-microvm new file mode 100644 index 0000000000..a253e2edc6 --- /dev/null +++ b/roms/config.seabios-microvm @@ -0,0 +1,26 @@ +CONFIG_QEMU=y +CONFIG_QEMU_HARDWARE=y +CONFIG_PERMIT_UNALIGNED_PCIROM=y +CONFIG_ROM_SIZE=128 +CONFIG_XEN=n +CONFIG_BOOTSPLASH=n +CONFIG_ATA=n +CONFIG_AHCI=n +CONFIG_SDCARD=n +CONFIG_PVSCSI=n +CONFIG_ESP_SCSI=n +CONFIG_LSI_SCSI=n +CONFIG_MEGASAS=n +CONFIG_MPT_SCSI=n +CONFIG_FLOPPY=n +CONFIG_FLASH_FLOPPY=n +CONFIG_NVME=n +CONFIG_PS2PORT=n +CONFIG_USB=n +CONFIG_LPT=n +CONFIG_RTC_TIMER=n +CONFIG_USE_SMM=n +CONFIG_PMTIMER=n +CONFIG_TCGBIOS=n +CONFIG_HARDWARE_IRQ=n +CONFIG_ACPI_PARSE=y diff --git a/scripts/analyze-migration.py b/scripts/analyze-migration.py index 95838cbff3..d70ec7d33a 100755 --- a/scripts/analyze-migration.py +++ b/scripts/analyze-migration.py @@ -97,7 +97,8 @@ class MigrationFile(object): # Seek back to where we were at the beginning self.file.seek(entrypos, 0) - return data[jsonpos:jsonpos + jsonlen] + # explicit decode() needed for Python 3.5 compatibility + return data[jsonpos:jsonpos + jsonlen].decode("utf-8") def close(self): self.file.close() diff --git a/scripts/codeconverter/codeconverter/patching.py b/scripts/codeconverter/codeconverter/patching.py index 627a1a1b04..9e92505d39 100644 --- a/scripts/codeconverter/codeconverter/patching.py +++ b/scripts/codeconverter/codeconverter/patching.py @@ -5,7 +5,7 @@ # # This work is licensed under the terms of the GNU GPL, version 2. See # the COPYING file in the top-level directory. -from typing import IO, Match, NamedTuple, Optional, Literal, Iterable, Type, Dict, List, Any, TypeVar, NewType, Tuple +from typing import IO, Match, NamedTuple, Optional, Literal, Iterable, Type, Dict, List, Any, TypeVar, NewType, Tuple, Union from pathlib import Path from itertools import chain from tempfile import NamedTemporaryFile @@ -47,7 +47,7 @@ class FileMatch: def __init__(self, f: 'FileInfo', m: Match) -> None: self.file: 'FileInfo' = f - self.match: Match = m + self.match: Match[str] = m @property def name(self) -> str: @@ -68,8 +68,13 @@ class FileMatch: def line_col(self) -> LineAndColumn: return self.file.line_col(self.start()) - def group(self, *args): - return self.match.group(*args) + def group(self, group: Union[int, str]) -> str: + return self.match.group(group) + + def getgroup(self, group: str) -> Optional[str]: + if group not in self.match.groupdict(): + return None + return self.match.group(group) def log(self, level, fmt, *args) -> None: pos = self.line_col() @@ -163,18 +168,51 @@ class FileMatch: raise NotImplementedError() @classmethod - def find_matches(klass, content: str) -> Iterable[Match]: - """Generate match objects for class + def finditer(klass, content: str, pos=0, endpos=-1) -> Iterable[Match]: + """Helper for re.finditer()""" + if endpos >= 0: + content = content[:endpos] + return klass.compiled_re().finditer(content, pos) - Might be reimplemented by subclasses if they - intend to look for matches using a different method. - """ - return klass.compiled_re().finditer(content) + @classmethod + def domatch(klass, content: str, pos=0, endpos=-1) -> Optional[Match]: + """Helper for re.match()""" + if endpos >= 0: + content = content[:endpos] + return klass.compiled_re().match(content, pos) + + def group_finditer(self, klass: Type['FileMatch'], group: Union[str, int]) -> Iterable['FileMatch']: + assert self.file.original_content + return (klass(self.file, m) + for m in klass.finditer(self.file.original_content, + self.match.start(group), + self.match.end(group))) + + def try_group_match(self, klass: Type['FileMatch'], group: Union[str, int]) -> Optional['FileMatch']: + assert self.file.original_content + m = klass.domatch(self.file.original_content, + self.match.start(group), + self.match.end(group)) + if not m: + return None + else: + return klass(self.file, m) + + def group_match(self, group: Union[str, int]) -> 'FileMatch': + m = self.try_group_match(FullMatch, group) + assert m + return m @property def allfiles(self) -> 'FileList': return self.file.allfiles +class FullMatch(FileMatch): + """Regexp that will match all contents of string + Useful when used with group_match() + """ + regexp = r'(?s).*' # (?s) is re.DOTALL + def all_subclasses(c: Type[FileMatch]) -> Iterable[Type[FileMatch]]: for sc in c.__subclasses__(): yield sc @@ -201,7 +239,15 @@ def apply_patches(s: str, patches: Iterable[Patch]) -> str: """ r = StringIO() last = 0 - for p in sorted(patches): + def patch_sort_key(item: Tuple[int, Patch]) -> Tuple[int, int, int]: + """Patches are sorted by byte position, + patches at the same byte position are applied in the order + they were generated. + """ + i,p = item + return (p.start, p.end, i) + + for i,p in sorted(enumerate(patches), key=patch_sort_key): DBG("Applying patch at position %d (%s) - %d (%s): %r", p.start, line_col(s, p.start), p.end, line_col(s, p.end), @@ -220,26 +266,35 @@ class RegexpScanner: self.match_index: Dict[Type[Any], List[FileMatch]] = {} self.match_name_index: Dict[Tuple[Type[Any], str, str], Optional[FileMatch]] = {} - def _find_matches(self, klass: Type[Any]) -> Iterable[FileMatch]: + def _matches_of_type(self, klass: Type[Any]) -> Iterable[FileMatch]: raise NotImplementedError() def matches_of_type(self, t: Type[T]) -> List[T]: if t not in self.match_index: - self.match_index[t] = list(self._find_matches(t)) - return self.match_index[t] # type: ignore + self.match_index[t] = list(self._matches_of_type(t)) + return self.match_index[t] # type: ignore - def find_match(self, t: Type[T], name: str, group: str='name') -> Optional[T]: + def find_matches(self, t: Type[T], name: str, group: str='name') -> List[T]: indexkey = (t, name, group) if indexkey in self.match_name_index: return self.match_name_index[indexkey] # type: ignore - r: Optional[T] = None + r: List[T] = [] for m in self.matches_of_type(t): assert isinstance(m, FileMatch) - if m.group(group) == name: - r = m # type: ignore + if m.getgroup(group) == name: + r.append(m) # type: ignore self.match_name_index[indexkey] = r # type: ignore return r + def find_match(self, t: Type[T], name: str, group: str='name') -> Optional[T]: + l = self.find_matches(t, name, group) + if not l: + return None + if len(l) > 1: + logger.warn("multiple matches found for %r (%s=%r)", t, group, name) + return None + return l[0] + def reset_index(self) -> None: self.match_index.clear() self.match_name_index.clear() @@ -258,18 +313,22 @@ class FileInfo(RegexpScanner): def __repr__(self) -> str: return f'<FileInfo {repr(self.filename)}>' + def filename_matches(self, name: str) -> bool: + nameparts = Path(name).parts + return self.filename.parts[-len(nameparts):] == nameparts + def line_col(self, start: int) -> LineAndColumn: """Return line and column for a match object inside original_content""" return line_col(self.original_content, start) - def _find_matches(self, klass: Type[Any]) -> List[FileMatch]: + def _matches_of_type(self, klass: Type[Any]) -> List[FileMatch]: """Build FileMatch objects for each match of regexp""" if not hasattr(klass, 'regexp') or klass.regexp is None: return [] assert hasattr(klass, 'regexp') DBG("%s: scanning for %s", self.filename, klass.__name__) DBG("regexp: %s", klass.regexp) - matches = [klass(self, m) for m in klass.find_matches(self.original_content)] + matches = [klass(self, m) for m in klass.finditer(self.original_content)] DBG('%s: %d matches found for %s: %s', self.filename, len(matches), klass.__name__,' '.join(names(matches))) return matches @@ -277,7 +336,7 @@ class FileInfo(RegexpScanner): def find_match(self, t: Type[T], name: str, group: str='name') -> Optional[T]: for m in self.matches_of_type(t): assert isinstance(m, FileMatch) - if m.group(group) == name: + if m.getgroup(group) == name: return m # type: ignore return None @@ -299,7 +358,16 @@ class FileInfo(RegexpScanner): return (m for l in lists for m in l) - def scan_for_matches(self, class_names: Optional[List[str]]=None) -> None: + def gen_patches(self, matches: List[FileMatch]) -> None: + for m in matches: + DBG("Generating patches for %r", m) + for i,p in enumerate(m.gen_patches()): + DBG("patch %d generated by %r:", i, m) + DBG("replace contents at %s-%s with %r", + self.line_col(p.start), self.line_col(p.end), p.replacement) + self.patches.append(p) + + def scan_for_matches(self, class_names: Optional[List[str]]=None) -> Iterable[FileMatch]: DBG("class names: %r", class_names) class_dict = match_class_dict() if class_names is None: @@ -309,40 +377,9 @@ class FileInfo(RegexpScanner): DBG("class_names: %r", class_names) for cn in class_names: matches = self.matches_of_type(class_dict[cn]) - if len(matches) > 0: - DBG('%s: %d matches found for %s: %s', self.filename, - len(matches), cn, ' '.join(names(matches))) - - def gen_patches(self) -> None: - for m in self.all_matches: - for i,p in enumerate(m.gen_patches()): - DBG("patch %d generated by %r:", i, m) - DBG("replace contents at %s-%s with %r", - self.line_col(p.start), self.line_col(p.end), p.replacement) - self.patches.append(p) - - def patch_content(self, max_passes=0, class_names: Optional[List[str]]=None) -> None: - """Multi-pass content patching loop - - We run multiple passes because there are rules that will - delete init functions once they become empty. - """ - passes = 0 - total_patches = 0 - DBG("max_passes: %r", max_passes) - while not max_passes or max_passes <= 0 or passes < max_passes: - passes += 1 - self.scan_for_matches(class_names) - self.gen_patches() - DBG("patch content: pass %d: %d patches generated", passes, len(self.patches)) - total_patches += len(self.patches) - if not self.patches: - break - try: - self.apply_patches() - except PatchingError: - logger.exception("%s: failed to patch file", self.filename) - DBG("%s: %d patches applied total in %d passes", self.filename, total_patches, passes) + DBG('%d matches found for %s: %s', + len(matches), cn, ' '.join(names(matches))) + yield from matches def apply_patches(self) -> None: """Replace self.original_content after applying patches from self.patches""" @@ -384,14 +421,46 @@ class FileList(RegexpScanner): def __iter__(self): return iter(self.files) - def _find_matches(self, klass: Type[Any]) -> Iterable[FileMatch]: - return chain(*(f._find_matches(klass) for f in self.files)) + def _matches_of_type(self, klass: Type[Any]) -> Iterable[FileMatch]: + return chain(*(f._matches_of_type(klass) for f in self.files)) - def find_file(self, name) -> Optional[FileInfo]: + def find_file(self, name: str) -> Optional[FileInfo]: """Get file with path ending with @name""" - nameparts = Path(name).parts for f in self.files: - if f.filename.parts[:len(nameparts)] == nameparts: + if f.filename_matches(name): return f else: - return None
\ No newline at end of file + return None + + def one_pass(self, class_names: List[str]) -> int: + total_patches = 0 + for f in self.files: + INFO("Scanning file %s", f.filename) + matches = list(f.scan_for_matches(class_names)) + INFO("Generating patches for file %s", f.filename) + f.gen_patches(matches) + total_patches += len(f.patches) + if total_patches: + for f in self.files: + try: + f.apply_patches() + except PatchingError: + logger.exception("%s: failed to patch file", f.filename) + return total_patches + + def patch_content(self, max_passes, class_names: List[str]) -> None: + """Multi-pass content patching loop + + We run multiple passes because there are rules that will + delete init functions once they become empty. + """ + passes = 0 + total_patches = 0 + DBG("max_passes: %r", max_passes) + while not max_passes or max_passes <= 0 or passes < max_passes: + passes += 1 + INFO("Running pass: %d", passes) + count = self.one_pass(class_names) + DBG("patch content: pass %d: %d patches generated", passes, count) + total_patches += count + DBG("%d patches applied total in %d passes", total_patches, passes) diff --git a/scripts/codeconverter/codeconverter/qom_macros.py b/scripts/codeconverter/codeconverter/qom_macros.py index 68a33d5c6f..2d2f2055a3 100644 --- a/scripts/codeconverter/codeconverter/qom_macros.py +++ b/scripts/codeconverter/codeconverter/qom_macros.py @@ -23,16 +23,24 @@ WARN = logger.warning RE_CONSTANT = OR(RE_STRING, RE_NUMBER) -class ConstantDefine(FileMatch): - """Simple #define preprocessor directive for a constant""" - # if the macro contents are very simple, it might be included - # in the match group 'value' +class DefineDirective(FileMatch): + """Match any #define directive""" + regexp = S(r'^[ \t]*#[ \t]*define', CPP_SPACE, NAMED('name', RE_IDENTIFIER), r'\b') + +class ExpressionDefine(FileMatch): + """Simple #define preprocessor directive for an expression""" regexp = S(r'^[ \t]*#[ \t]*define', CPP_SPACE, NAMED('name', RE_IDENTIFIER), - CPP_SPACE, NAMED('value', RE_CONSTANT), r'[ \t]*\n') + CPP_SPACE, NAMED('value', RE_EXPRESSION), r'[ \t]*\n') def provided_identifiers(self) -> Iterable[RequiredIdentifier]: yield RequiredIdentifier('constant', self.group('name')) +class ConstantDefine(ExpressionDefine): + """Simple #define preprocessor directive for a number or string constant""" + regexp = S(r'^[ \t]*#[ \t]*define', CPP_SPACE, NAMED('name', RE_IDENTIFIER), + CPP_SPACE, NAMED('value', RE_CONSTANT), r'[ \t]*\n') + + class TypeIdentifiers(NamedTuple): """Type names found in type declarations""" # TYPE_MYDEVICE @@ -236,13 +244,12 @@ class TypeCheckMacro(FileMatch): """OBJECT_CHECK/OBJECT_CLASS_CHECK/OBJECT_GET_CLASS macro definitions Will be replaced by DECLARE_*_CHECKERS macro """ - #TODO: handle and convert INTERFACE_CHECK macros regexp = RE_CHECK_MACRO @property def checker(self) -> CheckerMacroName: """Name of checker macro being used""" - return self.group('checker') + return self.group('checker') # type: ignore @property def typedefname(self) -> Optional[str]: @@ -330,6 +337,8 @@ class TypeCheckMacro(FileMatch): instancetype=instancetype, uppercase=uppercase) def gen_patches(self) -> Iterable[Patch]: + # the implementation is a bit tricky because we need to group + # macros dealing with the same type into a single declaration if self.type_identifiers is None: self.warn("couldn't extract type information from macro %s", self.name) return @@ -426,10 +435,61 @@ class TypeCheckMacro(FileMatch): yield self.prepend("/* FIXME: %s */\n" % (issue)) yield self.append(new_decl) -class DeclareInstanceChecker(FileMatch): - """DECLARE_INSTANCE_CHECKER use - Will be replaced with DECLARE_OBJ_CHECKERS if possible +class InterfaceCheckMacro(FileMatch): + """Type checking macro using INTERFACE_CHECK + Will be replaced by DECLARE_INTERFACE_CHECKER """ + regexp = S(RE_MACRO_DEFINE, + 'INTERFACE_CHECK', + r'\s*\(\s*', OR(NAMED('instancetype', RE_IDENTIFIER), RE_TYPE, name='c_type'), + r'\s*,', CPP_SPACE, + OPTIONAL_PARS(RE_IDENTIFIER), r',', CPP_SPACE, + NAMED('qom_typename', RE_IDENTIFIER), r'\s*\)\n') + + def required_identifiers(self) -> Iterable[RequiredIdentifier]: + yield RequiredIdentifier('include', '"qom/object.h"') + yield RequiredIdentifier('type', self.group('instancetype')) + yield RequiredIdentifier('constant', self.group('qom_typename')) + + def gen_patches(self) -> Iterable[Patch]: + if self.file.filename_matches('qom/object.h'): + self.debug("skipping object.h") + return + + typename = self.group('qom_typename') + uppercase = self.name + instancetype = self.group('instancetype') + c = f"DECLARE_INTERFACE_CHECKER({instancetype}, {uppercase},\n"+\ + f" {typename})\n" + yield self.make_patch(c) + + +class TypeDeclaration(FileMatch): + """Parent class to all type declarations""" + @property + def instancetype(self) -> Optional[str]: + return self.getgroup('instancetype') + + @property + def classtype(self) -> Optional[str]: + return self.getgroup('classtype') + + @property + def typename(self) -> Optional[str]: + return self.getgroup('typename') + +class TypeCheckerDeclaration(TypeDeclaration): + """Parent class to all type checker declarations""" + @property + def typename(self) -> str: + return self.group('typename') + + @property + def uppercase(self) -> str: + return self.group('uppercase') + +class DeclareInstanceChecker(TypeCheckerDeclaration): + """DECLARE_INSTANCE_CHECKER use""" #TODO: replace lonely DECLARE_INSTANCE_CHECKER with DECLARE_OBJ_CHECKERS # if all types are found. # This will require looking up the correct class type in the TypeInfo @@ -445,8 +505,45 @@ class DeclareInstanceChecker(FileMatch): yield RequiredIdentifier('constant', self.group('typename')) yield RequiredIdentifier('type', self.group('instancetype')) -class DeclareClassCheckers(FileMatch): - """DECLARE_INSTANCE_CHECKER use""" +class DeclareInterfaceChecker(TypeCheckerDeclaration): + """DECLARE_INTERFACE_CHECKER use""" + regexp = S(r'^[ \t]*DECLARE_INTERFACE_CHECKER\s*\(\s*', + NAMED('instancetype', RE_TYPE), r'\s*,\s*', + NAMED('uppercase', RE_IDENTIFIER), r'\s*,\s*', + OR(RE_IDENTIFIER, RE_STRING, RE_MACRO_CONCAT, RE_FUN_CALL, name='typename'), SP, + r'\)[ \t]*;?[ \t]*\n') + + def required_identifiers(self) -> Iterable[RequiredIdentifier]: + yield RequiredIdentifier('include', '"qom/object.h"') + yield RequiredIdentifier('constant', self.group('typename')) + yield RequiredIdentifier('type', self.group('instancetype')) + +class DeclareInstanceType(TypeDeclaration): + """DECLARE_INSTANCE_TYPE use""" + regexp = S(r'^[ \t]*DECLARE_INSTANCE_TYPE\s*\(\s*', + NAMED('uppercase', RE_IDENTIFIER), r'\s*,\s*', + NAMED('instancetype', RE_TYPE), SP, + r'\)[ \t]*;?[ \t]*\n') + + def required_identifiers(self) -> Iterable[RequiredIdentifier]: + yield RequiredIdentifier('include', '"qom/object.h"') + yield RequiredIdentifier('type', self.group('instancetype')) + +class DeclareClassType(TypeDeclaration): + """DECLARE_CLASS_TYPE use""" + regexp = S(r'^[ \t]*DECLARE_CLASS_TYPE\s*\(\s*', + NAMED('uppercase', RE_IDENTIFIER), r'\s*,\s*', + NAMED('classtype', RE_TYPE), SP, + r'\)[ \t]*;?[ \t]*\n') + + def required_identifiers(self) -> Iterable[RequiredIdentifier]: + yield RequiredIdentifier('include', '"qom/object.h"') + yield RequiredIdentifier('type', self.group('classtype')) + + + +class DeclareClassCheckers(TypeCheckerDeclaration): + """DECLARE_CLASS_CHECKER use""" regexp = S(r'^[ \t]*DECLARE_CLASS_CHECKERS\s*\(\s*', NAMED('classtype', RE_TYPE), r'\s*,\s*', NAMED('uppercase', RE_IDENTIFIER), r'\s*,\s*', @@ -458,10 +555,8 @@ class DeclareClassCheckers(FileMatch): yield RequiredIdentifier('constant', self.group('typename')) yield RequiredIdentifier('type', self.group('classtype')) -class DeclareObjCheckers(FileMatch): - """DECLARE_OBJ_CHECKERS use - Will be replaced with OBJECT_DECLARE_TYPE if possible - """ +class DeclareObjCheckers(TypeCheckerDeclaration): + """DECLARE_OBJ_CHECKERS use""" #TODO: detect when OBJECT_DECLARE_SIMPLE_TYPE can be used regexp = S(r'^[ \t]*DECLARE_OBJ_CHECKERS\s*\(\s*', NAMED('instancetype', RE_TYPE), r'\s*,\s*', @@ -476,44 +571,121 @@ class DeclareObjCheckers(FileMatch): yield RequiredIdentifier('type', self.group('classtype')) yield RequiredIdentifier('type', self.group('instancetype')) - def gen_patches(self): - ids = TypeIdentifiers(uppercase=self.group('uppercase'), - typename=self.group('typename'), - classtype=self.group('classtype'), - instancetype=self.group('instancetype')) - issues = ids.check_consistency() - if issues: - for i in issues: - self.warn("inconsistent identifiers: %s", i) +class TypeDeclarationFixup(FileMatch): + """Common base class for code that will look at a set of type declarations""" + regexp = RE_FILE_BEGIN + def gen_patches(self) -> Iterable[Patch]: + if self.file.filename_matches('qom/object.h'): + self.debug("skipping object.h") return - if self.group('typename') != 'TYPE_'+self.group('uppercase'): - self.warn("type %s mismatch with uppercase name %s", ids.typename, ids.uppercase) - return + # group checkers by uppercase name: + decl_types: List[Type[TypeDeclaration]] = [DeclareInstanceChecker, DeclareInstanceType, + DeclareClassCheckers, DeclareClassType, + DeclareObjCheckers] + checker_dict: Dict[str, List[TypeDeclaration]] = {} + for t in decl_types: + for m in self.file.matches_of_type(t): + checker_dict.setdefault(m.group('uppercase'), []).append(m) + self.debug("checker_dict: %r", checker_dict) + for uppercase,checkers in checker_dict.items(): + fields = ('instancetype', 'classtype', 'uppercase', 'typename') + fvalues = dict((field, set(getattr(m, field) for m in checkers + if getattr(m, field, None) is not None)) + for field in fields) + for field,values in fvalues.items(): + if len(values) > 1: + for c in checkers: + c.warn("%s mismatch (%s)", field, ' '.join(values)) + return - typedefs = [(t,self.file.find_match(SimpleTypedefMatch, t)) - for t in (ids.instancetype, ids.classtype)] - for t,td in typedefs: - if td is None: - self.warn("typedef %s not found", t) - break - if td.start() > self.start(): - self.warn("typedef %s needs to be move earlier in the file", t) - break - #HACK: check if typedef is used between its definition and the macro - #TODO: check if the only match is inside the "struct { ... }" declaration - if re.search(r'\b'+t+r'\b', self.file.original_content[td.end():self.start()]): - self.warn("typedef %s can't be moved, it is used before the macro", t) - break - else: - for t,td in typedefs: - yield td.make_removal_patch() + field_dict = dict((f, v.pop() if v else None) for f,v in fvalues.items()) + yield from self.gen_patches_for_type(uppercase, checkers, field_dict) + + def find_conflicts(self, uppercase: str, checkers: List[TypeDeclaration]) -> bool: + """Look for conflicting declarations that would make it unsafe to add new ones""" + conflicting: List[FileMatch] = [] + # conflicts in the same file: + conflicting.extend(chain(self.file.find_matches(DefineDirective, uppercase), + self.file.find_matches(DeclareInterfaceChecker, uppercase, 'uppercase'), + self.file.find_matches(DeclareClassType, uppercase, 'uppercase'), + self.file.find_matches(DeclareInstanceType, uppercase, 'uppercase'))) + + # conflicts in another file: + conflicting.extend(o for o in chain(self.allfiles.find_matches(DeclareInstanceChecker, uppercase, 'uppercase'), + self.allfiles.find_matches(DeclareClassCheckers, uppercase, 'uppercase'), + self.allfiles.find_matches(DeclareInterfaceChecker, uppercase, 'uppercase'), + self.allfiles.find_matches(DefineDirective, uppercase)) + if o is not None and o.file != self.file + # if both are .c files, there's no conflict at all: + and not (o.file.filename.suffix == '.c' and + self.file.filename.suffix == '.c')) + + if conflicting: + for c in checkers: + c.warn("skipping due to conflicting %s macro", uppercase) + for o in conflicting: + if o is None: + continue + o.warn("conflicting %s macro is here", uppercase) + return True - lowercase = ids.uppercase.lower() - # all is OK, we can replace the macro! - c = (f'OBJECT_DECLARE_TYPE({ids.instancetype}, {ids.classtype},\n' - f' {lowercase}, {ids.uppercase})\n') - yield self.make_patch(c) + return False + + def gen_patches_for_type(self, uppercase: str, + checkers: List[TypeDeclaration], + fields: Dict[str, Optional[str]]) -> Iterable[Patch]: + """Should be reimplemented by subclasses""" + return + yield + +class DeclareVoidTypes(TypeDeclarationFixup): + """Add DECLARE_*_TYPE(..., void) when there's no declared type""" + regexp = RE_FILE_BEGIN + def gen_patches_for_type(self, uppercase: str, + checkers: List[TypeDeclaration], + fields: Dict[str, Optional[str]]) -> Iterable[Patch]: + if self.find_conflicts(uppercase, checkers): + return + + #_,last_checker = max((m.start(), m) for m in checkers) + _,first_checker = min((m.start(), m) for m in checkers) + + if not any(m.instancetype for m in checkers): + yield first_checker.prepend(f'DECLARE_INSTANCE_TYPE({uppercase}, void)\n') + if not any(m.classtype for m in checkers): + yield first_checker.prepend(f'DECLARE_CLASS_TYPE({uppercase}, void)\n') + + #if not all(len(v) == 1 for v in fvalues.values()): + # return + # + #final_values = dict((field, values.pop()) + # for field,values in fvalues.items()) + #s = (f"DECLARE_OBJ_CHECKERS({final_values['instancetype']}, {final_values['classtype']},\n"+ + # f" {final_values['uppercase']}, {final_values['typename']})\n") + #for c in checkers: + # yield c.make_removal_patch() + #yield last_checker.append(s) + + +class AddDeclareTypeName(TypeDeclarationFixup): + """Add DECLARE_TYPE_NAME declarations if necessary""" + def gen_patches_for_type(self, uppercase: str, + checkers: List[TypeDeclaration], + fields: Dict[str, Optional[str]]) -> Iterable[Patch]: + typename = fields.get('typename') + if typename is None: + self.warn("typename unavailable") + return + if typename == f'TYPE_{uppercase}': + self.info("already using TYPE_%s as type name", uppercase) + return + if self.file.find_match(DeclareTypeName, uppercase, 'uppercase'): + self.info("type name for %s already declared", uppercase) + return + _,first_checker = min((m.start(), m) for m in checkers) + s = f'DECLARE_TYPE_NAME({uppercase}, {typename})\n' + yield first_checker.prepend(s) class TrivialClassStruct(FileMatch): """Trivial class struct""" @@ -527,14 +699,13 @@ class DeclareTypeName(FileMatch): OR(RE_IDENTIFIER, RE_STRING, RE_MACRO_CONCAT, RE_FUN_CALL, name='typename'), r'\s*\);?[ \t]*\n') -class ObjectDeclareType(FileMatch): +class ObjectDeclareType(TypeCheckerDeclaration): """OBJECT_DECLARE_TYPE usage Will be replaced with OBJECT_DECLARE_SIMPLE_TYPE if possible """ regexp = S(r'^[ \t]*OBJECT_DECLARE_TYPE\s*\(', NAMED('instancetype', RE_TYPE), r'\s*,\s*', NAMED('classtype', RE_TYPE), r'\s*,\s*', - NAMED('lowercase', RE_IDENTIFIER), r'\s*,\s*', NAMED('uppercase', RE_IDENTIFIER), SP, r'\)[ \t]*;?[ \t]*\n') @@ -549,14 +720,42 @@ class ObjectDeclareType(FileMatch): " %(uppercase)s, %(parent_struct)s)\n" % d) yield self.make_patch(c) -def find_type_declaration(files: FileList, typename: str) -> Optional[FileMatch]: - """Find usage of DECLARE*CHECKER macro""" - for c in (DeclareInstanceChecker, DeclareClassCheckers, DeclareObjCheckers, DeclareTypeName): - d = files.find_match(c, name=typename, group='typename') - if d: - return d +class ObjectDeclareSimpleType(TypeCheckerDeclaration): + """OBJECT_DECLARE_SIMPLE_TYPE usage""" + regexp = S(r'^[ \t]*OBJECT_DECLARE_SIMPLE_TYPE\s*\(', + NAMED('instancetype', RE_TYPE), r'\s*,\s*', + NAMED('uppercase', RE_IDENTIFIER), SP, + r'\)[ \t]*;?[ \t]*\n') + +class OldStyleObjectDeclareSimpleType(TypeCheckerDeclaration): + """OBJECT_DECLARE_SIMPLE_TYPE usage (old API)""" + regexp = S(r'^[ \t]*OBJECT_DECLARE_SIMPLE_TYPE\s*\(', + NAMED('instancetype', RE_TYPE), r'\s*,\s*', + NAMED('lowercase', RE_IDENTIFIER), r'\s*,\s*', + NAMED('uppercase', RE_IDENTIFIER), r'\s*,\s*', + NAMED('parent_classtype', RE_TYPE), SP, + r'\)[ \t]*;?[ \t]*\n') + + @property + def classtype(self) -> Optional[str]: + instancetype = self.instancetype + assert instancetype + return f"{instancetype}Class" + +def find_typename_uppercase(files: FileList, typename: str) -> Optional[str]: + """Try to find what's the right MODULE_OBJ_NAME for a given type name""" + decl = files.find_match(DeclareTypeName, name=typename, group='typename') + if decl: + return decl.group('uppercase') + if typename.startswith('TYPE_'): + return typename[len('TYPE_'):] return None +def find_type_checkers(files:FileList, name:str, group:str='uppercase') -> Iterable[TypeCheckerDeclaration]: + """Find usage of DECLARE*CHECKER macro""" + c: Type[TypeCheckerDeclaration] + for c in (DeclareInstanceChecker, DeclareClassCheckers, DeclareObjCheckers, ObjectDeclareType, ObjectDeclareSimpleType): + yield from files.find_matches(c, name=name, group=group) class Include(FileMatch): """#include directive""" @@ -586,9 +785,13 @@ class MoveSymbols(FileMatch): regexp = RE_FILE_BEGIN def gen_patches(self) -> Iterator[Patch]: + if self.file.filename_matches('qom/object.h'): + self.debug("skipping object.h") + return + index: Dict[RequiredIdentifier, SymbolUserList] = {} definition_classes = [SimpleTypedefMatch, FullStructTypedefMatch, ConstantDefine, Include] - user_classes = [TypeCheckMacro, DeclareObjCheckers, DeclareInstanceChecker, DeclareClassCheckers] + user_classes = [TypeCheckMacro, DeclareObjCheckers, DeclareInstanceChecker, DeclareClassCheckers, InterfaceCheckMacro] # first we scan for all symbol definitions and usage: for dc in definition_classes: @@ -650,3 +853,9 @@ class MoveSymbols(FileMatch): definition.warn("definition of %s %s needs to be moved earlier in the file", i.type, i.name) earliest.warn("definition of %s %s is used here", i.type, i.name) + +class EmptyPreprocessorConditional(FileMatch): + """Delete empty preprocessor conditionals""" + regexp = r'^[ \t]*#(if|ifdef)[ \t].*\n+[ \t]*#endif[ \t]*\n' + def gen_patches(self) -> Iterable[Patch]: + yield self.make_removal_patch() diff --git a/scripts/codeconverter/codeconverter/qom_type_info.py b/scripts/codeconverter/codeconverter/qom_type_info.py index fc02058739..255cb59923 100644 --- a/scripts/codeconverter/codeconverter/qom_type_info.py +++ b/scripts/codeconverter/codeconverter/qom_type_info.py @@ -24,11 +24,6 @@ RE_TI_FIELDS = M(RE_TI_FIELD_INIT) RE_TYPEINFO_START = S(r'^[ \t]*', M(r'(static|const)\s+', name='modifiers'), r'TypeInfo\s+', NAMED('name', RE_IDENTIFIER), r'\s*=\s*{[ \t]*\n') -RE_TYPEINFO_DEF = S(RE_TYPEINFO_START, - M(NAMED('fields', RE_TI_FIELDS), - SP, NAMED('endcomments', RE_COMMENTS), - r'};?\n', - n='?', name='fullspec')) ParsedArray = List[str] ParsedInitializerValue = Union[str, ParsedArray] @@ -36,26 +31,55 @@ class InitializerValue(NamedTuple): raw: str parsed: Optional[ParsedInitializerValue] match: Optional[Match] -TypeInfoInitializers = Dict[str, InitializerValue] - -def parse_array(m: Match) -> ParsedArray: - #DBG('parse_array: %r', m.group(0)) - return [m.group('arrayitem') for m in re.finditer(RE_ARRAY_ITEM, m.group('arrayitems'))] - -def parse_initializer_value(m: Match, s: str) -> InitializerValue: - parsed: Optional[ParsedInitializerValue] = None - #DBG("parse_initializer_value: %r", s) - array = re.match(RE_ARRAY, s) - if array: - parsed = parse_array(array) - return InitializerValue(s, parsed, m) - -class TypeInfoVar(FileMatch): - """TypeInfo variable declaration with initializer - Will be replaced by OBJECT_DEFINE_TYPE_EXTENDED macro - (not implemented yet) + +class ArrayItem(FileMatch): + regexp = RE_ARRAY_ITEM + +class ArrayInitializer(FileMatch): + regexp = RE_ARRAY + + def parsed(self) -> ParsedArray: + #DBG('parse_array: %r', m.group(0)) + return [m.group('arrayitem') for m in self.group_finditer(ArrayItem, 'arrayitems')] + +class FieldInitializer(FileMatch): + regexp = RE_TI_FIELD_INIT + + @property + def raw(self) -> str: + return self.group('value') + + @property + def parsed(self) -> ParsedInitializerValue: + parsed: ParsedInitializerValue = self.raw + #DBG("parse_initializer_value: %r", s) + array = self.try_group_match(ArrayInitializer, 'value') + if array: + assert isinstance(array, ArrayInitializer) + return array.parsed() + return parsed + +TypeInfoInitializers = Dict[str, FieldInitializer] + +class TypeDefinition(FileMatch): + """ + Common base class for type definitions (TypeInfo variables or OBJECT_DEFINE* macros) """ - regexp = RE_TYPEINFO_DEF + @property + def instancetype(self) -> Optional[str]: + return self.group('instancetype') + + @property + def classtype(self) -> Optional[str]: + return self.group('classtype') + + @property + def uppercase(self) -> Optional[str]: + return self.group('uppercase') + + @property + def parent_uppercase(self) -> str: + return self.group('parent_uppercase') @property def initializers(self) -> Optional[TypeInfoInitializers]: @@ -65,14 +89,26 @@ class TypeInfoVar(FileMatch): fields = self.group('fields') if fields is None: return None - d = dict((fm.group('field'), parse_initializer_value(fm, fm.group('value'))) - for fm in re.finditer(RE_TI_FIELD_INIT, fields)) - self._initializers = d - return d + d = dict((fm.group('field'), fm) + for fm in self.group_finditer(FieldInitializer, 'fields')) + self._initializers = d # type: ignore + return self._initializers + + +class TypeInfoVar(TypeDefinition): + """TypeInfo variable declaration with initializer""" + regexp = S(NAMED('begin', RE_TYPEINFO_START), + M(NAMED('fields', RE_TI_FIELDS), + NAMED('endcomments', SP, RE_COMMENTS), + NAMED('end', r'};?\n'), + n='?', name='fullspec')) def is_static(self) -> bool: return 'static' in self.group('modifiers') + def is_const(self) -> bool: + return 'const' in self.group('modifiers') + def is_full(self) -> bool: return bool(self.group('fullspec')) @@ -82,8 +118,46 @@ class TypeInfoVar(FileMatch): return {} return self.initializers - def get_initializer_value(self, field: str) -> InitializerValue: - return self.get_initializers().get(field, InitializerValue('', '', None)) + def get_raw_initializer_value(self, field: str, default: str = '') -> str: + initializers = self.get_initializers() + if field in initializers: + return initializers[field].raw + else: + return default + + @property + def typename(self) -> Optional[str]: + return self.get_raw_initializer_value('name') + + @property + def uppercase(self) -> Optional[str]: + typename = self.typename + if not typename: + return None + if not typename.startswith('TYPE_'): + return None + return typename[len('TYPE_'):] + + @property + def classtype(self) -> Optional[str]: + class_size = self.get_raw_initializer_value('class_size') + if not class_size: + return None + m = re.fullmatch(RE_SIZEOF, class_size) + if not m: + return None + return m.group('sizeoftype') + + @property + def instancetype(self) -> Optional[str]: + instance_size = self.get_raw_initializer_value('instance_size') + if not instance_size: + return None + m = re.fullmatch(RE_SIZEOF, instance_size) + if not m: + return None + return m.group('sizeoftype') + #def extract_identifiers(self) -> Optional[TypeIdentifiers]: # """Try to extract identifiers from names being used""" @@ -116,32 +190,105 @@ class TypeInfoVar(FileMatch): # uppercase=uppercase, lowercase=lowercase, # instancetype=instancetype, classtype=classtype) - def append_field(self, field, value) -> Patch: + def append_field(self, field: str, value: str) -> Patch: """Generate patch appending a field initializer""" content = f' .{field} = {value},\n' - return Patch(self.match.end('fields'), self.match.end('fields'), - content) + fm = self.group_match('fields') + assert fm + return fm.append(content) def patch_field(self, field: str, replacement: str) -> Patch: """Generate patch replacing a field initializer""" - values = self.initializers - assert values - value = values.get(field) + initializers = self.initializers + assert initializers + value = initializers.get(field) assert value - fm = value.match - assert fm - fstart = self.match.start('fields') + fm.start() - fend = self.match.start('fields') + fm.end() - return Patch(fstart, fend, replacement) + return value.make_patch(replacement) + + def remove_field(self, field: str) -> Iterable[Patch]: + initializers = self.initializers + assert initializers + if field in initializers: + yield self.patch_field(field, '') + + def remove_fields(self, *fields: str) -> Iterable[Patch]: + for f in fields: + yield from self.remove_field(f) + + def patch_field_value(self, field: str, replacement: str) -> Patch: + """Replace just the value of a field initializer""" + initializers = self.initializers + assert initializers + value = initializers.get(field) + assert value + vm = value.group_match('value') + assert vm + return vm.make_patch(replacement) + + +class RemoveRedundantClassSize(TypeInfoVar): + """Remove class_size when using OBJECT_DECLARE_SIMPLE_TYPE""" + def gen_patches(self) -> Iterable[Patch]: + initializers = self.initializers + if initializers is None: + return + if 'class_size' not in initializers: + return + + self.debug("Handling %s", self.name) + m = re.fullmatch(RE_SIZEOF, initializers['class_size'].raw) + if not m: + self.warn("%s class_size is not sizeof?", self.name) + return + classtype = m.group('sizeoftype') + if not classtype.endswith('Class'): + self.warn("%s class size type (%s) is not *Class?", self.name, classtype) + return + self.debug("classtype is %s", classtype) + instancetype = classtype[:-len('Class')] + self.debug("intanceypte is %s", instancetype) + self.debug("searching for simpletype declaration using %s as InstanceType", instancetype) + decl = self.allfiles.find_match(OldStyleObjectDeclareSimpleType, + instancetype, 'instancetype') + if not decl: + self.debug("No simpletype declaration found for %s", instancetype) + return + self.debug("Found simple type declaration") + decl.debug("declaration is here") + yield from self.remove_field('class_size') +class RemoveDeclareSimpleTypeArg(OldStyleObjectDeclareSimpleType): + """Remove class_size when using OBJECT_DECLARE_SIMPLE_TYPE""" def gen_patches(self) -> Iterable[Patch]: + c = (f'OBJECT_DECLARE_SIMPLE_TYPE({self.group("instancetype")}, {self.group("lowercase")},\n' + f' {self.group("uppercase")})\n') + yield self.make_patch(c) + +class UseDeclareTypeExtended(TypeInfoVar): + """Replace TypeInfo variable with OBJECT_DEFINE_TYPE_EXTENDED""" + def gen_patches(self) -> Iterable[Patch]: + # this will just ensure the caches for find_match() and matches_for_type() + # will be loaded in advance: + find_type_checkers(self.allfiles, 'xxxxxxxxxxxxxxxxx') + + if not self.is_static(): + self.info("Skipping non-static TypeInfo variable") + return + + type_info_macro = self.file.find_match(TypeInfoMacro, self.name) + if not type_info_macro: + self.warn("TYPE_INFO(%s) line not found", self.name) + return + values = self.initializers if values is None: return if 'name' not in values: self.warn("name not set in TypeInfo variable %s", self.name) return + typename = values['name'].raw + if 'parent' not in values: self.warn("parent not set in TypeInfo variable %s", self.name) return @@ -167,49 +314,403 @@ class TypeInfoVar(FileMatch): self.warn("class_size is set to: %r", values['class_size'].raw) return - #NOTE: this will NOT work after declarations are converted - # to OBJECT_DECLARE* + #for t in (typename, parent_typename): + # if not re.fullmatch(RE_IDENTIFIER, t): + # self.info("type name is not a macro/constant") + # if instancetype or classtype: + # self.warn("macro/constant type name is required for instance/class type") + # if not self.file.force: + # return # Now, the challenge is to find out the right MODULE_OBJ_NAME for the # type and for the parent type - instance_decl = find_type_declaration(self.allfiles, typename) - parent_decl = find_type_declaration(self.allfiles, parent_typename) - self.info("TypeInfo variable for %s is here", typename) - if instance_decl: - instance_decl.info("instance type declaration (%s) is here", instance_decl.match.group('uppercase')) - if parent_decl: - parent_decl.info("parent type declaration (%s) is here", parent_decl.match.group('uppercase')) + uppercase = find_typename_uppercase(self.allfiles, typename) + if not uppercase: + self.info("Can't find right uppercase name for %s", typename) + if instancetype or classtype: + self.warn("Can't find right uppercase name for %s", typename) + self.warn("This will make type validation difficult in the future") + return - ok = True - if (instance_decl is None and (instancetype or classtype)): - self.warn("Can't find where type checkers for %s are declared. We need them to validate sizes of %s", typename, self.name) - ok = False - - if (instance_decl is not None - and 'instancetype' in instance_decl.match.groupdict() - and instancetype != instance_decl.group('instancetype')): - self.warn("type at instance_size is %r. Should instance_size be set to sizeof(%s) ?", - instancetype, instance_decl.group('instancetype')) - instance_decl.warn("Type checker declaration for %s is here", typename) - ok = False - if (instance_decl is not None - and 'classtype' in instance_decl.match.groupdict() - and classtype != instance_decl.group('classtype')): - self.warn("type at class_size is %r. Should class_size be set to sizeof(%s) ?", - classtype, instance_decl.group('classtype')) - instance_decl.warn("Type checker declaration for %s is here", typename) - ok = False - - if not ok: + parent_uppercase = find_typename_uppercase(self.allfiles, parent_typename) + if not parent_uppercase: + self.info("Can't find right uppercase name for parent type (%s)", parent_typename) + if instancetype or classtype: + self.warn("Can't find right uppercase name for parent type (%s)", parent_typename) + self.warn("This will make type validation difficult in the future") return + ok = True + + #checkers: List[TypeCheckerDeclaration] = list(find_type_checkers(self.allfiles, uppercase)) + #for c in checkers: + # c.info("instance type checker declaration (%s) is here", c.group('uppercase')) + #if not checkers: + # self.info("No type checkers declared for %s", uppercase) + # if instancetype or classtype: + # self.warn("Can't find where type checkers for %s (%s) are declared. We will need them to validate sizes of %s", + # typename, uppercase, self.name) + + if not instancetype: + instancetype = 'void' + if not classtype: + classtype = 'void' + + #checker_instancetypes = set(c.instancetype for c in checkers + # if c.instancetype is not None) + #if len(checker_instancetypes) > 1: + # self.warn("ambiguous set of type checkers") + # for c in checkers: + # c.warn("instancetype is %s here", c.instancetype) + # ok = False + #elif len(checker_instancetypes) == 1: + # checker_instancetype = checker_instancetypes.pop() + # DBG("checker instance type: %r", checker_instancetype) + # if instancetype != checker_instancetype: + # self.warn("type at instance_size is %r. Should instance_size be set to sizeof(%s) ?", + # instancetype, checker_instancetype) + # ok = False + #else: + # if instancetype != 'void': + # self.warn("instance type checker for %s (%s) not found", typename, instancetype) + # ok = False + + #checker_classtypes = set(c.classtype for c in checkers + # if c.classtype is not None) + #if len(checker_classtypes) > 1: + # self.warn("ambiguous set of type checkers") + # for c in checkers: + # c.warn("classtype is %s here", c.classtype) + # ok = False + #elif len(checker_classtypes) == 1: + # checker_classtype = checker_classtypes.pop() + # DBG("checker class type: %r", checker_classtype) + # if classtype != checker_classtype: + # self.warn("type at class_size is %r. Should class_size be set to sizeof(%s) ?", + # classtype, checker_classtype) + # ok = False + #else: + # if classtype != 'void': + # self.warn("class type checker for %s (%s) not found", typename, classtype) + # ok = False + + #if not ok: + # for c in checkers: + # c.warn("Type checker declaration for %s (%s) is here", + # typename, type(c).__name__) + # return + #if parent_decl is None: # self.warn("Can't find where parent type %s is declared", parent_typename) + #yield self.prepend(f'DECLARE_TYPE_NAME({uppercase}, {typename})\n') + #if not instancetype: + # yield self.prepend(f'DECLARE_INSTANCE_TYPE({uppercase}, void)\n') + #if not classtype: + # yield self.prepend(f'DECLARE_CLASS_TYPE({uppercase}, void)\n') self.info("%s can be patched!", self.name) - return - yield + replaced_fields = ['name', 'parent', 'instance_size', 'class_size'] + begin = self.group_match('begin') + newbegin = f'OBJECT_DEFINE_TYPE_EXTENDED({self.name},\n' + newbegin += f' {instancetype}, {classtype},\n' + newbegin += f' {uppercase}, {parent_uppercase}' + if set(values.keys()) - set(replaced_fields): + newbegin += ',\n' + yield begin.make_patch(newbegin) + yield from self.remove_fields(*replaced_fields) + end = self.group_match('end') + yield end.make_patch(')\n') + yield type_info_macro.make_removal_patch() + +class ObjectDefineTypeExtended(TypeDefinition): + """OBJECT_DEFINE_TYPE_EXTENDED usage""" + regexp = S(r'^[ \t]*OBJECT_DEFINE_TYPE_EXTENDED\s*\(\s*', + NAMED('name', RE_IDENTIFIER), r'\s*,\s*', + NAMED('instancetype', RE_IDENTIFIER), r'\s*,\s*', + NAMED('classtype', RE_IDENTIFIER), r'\s*,\s*', + NAMED('uppercase', RE_IDENTIFIER), r'\s*,\s*', + NAMED('parent_uppercase', RE_IDENTIFIER), + M(r',\s*\n', + NAMED('fields', RE_TI_FIELDS), + n='?'), + r'\s*\);?\n?') + +class ObjectDefineType(TypeDefinition): + """OBJECT_DEFINE_TYPE usage""" + regexp = S(r'^[ \t]*OBJECT_DEFINE_TYPE\s*\(\s*', + NAMED('lowercase', RE_IDENTIFIER), r'\s*,\s*', + NAMED('uppercase', RE_IDENTIFIER), r'\s*,\s*', + NAMED('parent_uppercase', RE_IDENTIFIER), + M(r',\s*\n', + NAMED('fields', RE_TI_FIELDS), + n='?'), + r'\s*\);?\n?') + +def find_type_definitions(files: FileList, uppercase: str) -> Iterable[TypeDefinition]: + types: List[Type[TypeDefinition]] = [TypeInfoVar, ObjectDefineType, ObjectDefineTypeExtended] + for t in types: + for m in files.matches_of_type(t): + m.debug("uppercase: %s", m.uppercase) + yield from (m for t in types + for m in files.matches_of_type(t) + if m.uppercase == uppercase) + +class AddDeclareVoidClassType(TypeDeclarationFixup): + """Will add DECLARE_CLASS_TYPE(..., void) if possible""" + def gen_patches_for_type(self, uppercase: str, + checkers: List[TypeDeclaration], + fields: Dict[str, Optional[str]]) -> Iterable[Patch]: + defs = list(find_type_definitions(self.allfiles, uppercase)) + if len(defs) > 1: + self.warn("multiple definitions for %s", uppercase) + for d in defs: + d.warn("definition found here") + return + elif len(defs) == 0: + self.warn("type definition for %s not found", uppercase) + return + d = defs[0] + if d.classtype is None: + d.info("definition for %s has classtype, skipping", uppercase) + return + class_type_checkers = [c for c in checkers + if c.classtype is not None] + if class_type_checkers: + for c in class_type_checkers: + c.warn("class type checker for %s is present here", uppercase) + return + + _,last_checker = max((m.start(), m) for m in checkers) + s = f'DECLARE_CLASS_TYPE({uppercase}, void)\n' + yield last_checker.append(s) + +class AddDeclareVoidInstanceType(FileMatch): + """Will add DECLARE_INSTANCE_TYPE(..., void) if possible""" + regexp = S(r'^[ \t]*#[ \t]*define', CPP_SPACE, + NAMED('name', r'TYPE_[a-zA-Z0-9_]+\b'), + CPP_SPACE, r'.*\n') + + def gen_patches(self) -> Iterable[Patch]: + assert self.name.startswith('TYPE_') + uppercase = self.name[len('TYPE_'):] + defs = list(find_type_definitions(self.allfiles, uppercase)) + if len(defs) > 1: + self.warn("multiple definitions for %s", uppercase) + for d in defs: + d.warn("definition found here") + return + elif len(defs) == 0: + self.warn("type definition for %s not found", uppercase) + return + d = defs[0] + instancetype = d.instancetype + if instancetype is not None and instancetype != 'void': + return + + instance_checkers = [c for c in find_type_checkers(self.allfiles, uppercase) + if c.instancetype] + if instance_checkers: + d.warn("instance type checker for %s already declared", uppercase) + for c in instance_checkers: + c.warn("instance checker for %s is here", uppercase) + return + + s = f'DECLARE_INSTANCE_TYPE({uppercase}, void)\n' + yield self.append(s) + +class AddObjectDeclareType(DeclareObjCheckers): + """Will add OBJECT_DECLARE_TYPE(...) if possible""" + def gen_patches(self) -> Iterable[Patch]: + uppercase = self.uppercase + typename = self.group('typename') + instancetype = self.group('instancetype') + classtype = self.group('classtype') + + if typename != f'TYPE_{uppercase}': + self.warn("type name mismatch: %s vs %s", typename, uppercase) + return + + typedefs = [(t,self.allfiles.find_matches(SimpleTypedefMatch, t)) + for t in (instancetype, classtype)] + for t,tds in typedefs: + if not tds: + self.warn("typedef %s not found", t) + return + for td in tds: + td_type = td.group('typedef_type') + if td_type != f'struct {t}': + self.warn("typedef mismatch: %s is defined as %s", t, td_type) + td.warn("typedef is here") + return + + # look for reuse of same struct type + other_instance_checkers = [c for c in find_type_checkers(self.allfiles, instancetype, 'instancetype') + if c.uppercase != uppercase] + if other_instance_checkers: + self.warn("typedef %s is being reused", instancetype) + for ic in other_instance_checkers: + ic.warn("%s is reused here", instancetype) + if not self.file.force: + return + + decl_types: List[Type[TypeDeclaration]] = [DeclareClassCheckers, DeclareObjCheckers] + class_decls = [m for t in decl_types + for m in self.allfiles.find_matches(t, uppercase, 'uppercase')] + + defs = list(find_type_definitions(self.allfiles, uppercase)) + if len(defs) > 1: + self.warn("multiple definitions for %s", uppercase) + for d in defs: + d.warn("definition found here") + if not self.file.force: + return + elif len(defs) == 0: + self.warn("type definition for %s not found", uppercase) + if not self.file.force: + return + else: + d = defs[0] + if d.instancetype != instancetype: + self.warn("mismatching instance type for %s (%s)", uppercase, instancetype) + d.warn("instance type declared here (%s)", d.instancetype) + if not self.file.force: + return + if d.classtype != classtype: + self.warn("mismatching class type for %s (%s)", uppercase, classtype) + d.warn("class type declared here (%s)", d.classtype) + if not self.file.force: + return + + assert self.file.original_content + for t,tds in typedefs: + assert tds + for td in tds: + if td.file is not self.file: + continue + + # delete typedefs that are truly redundant: + # 1) defined after DECLARE_OBJ_CHECKERS + if td.start() > self.start(): + yield td.make_removal_patch() + # 2) defined before DECLARE_OBJ_CHECKERS, but unused + elif not re.search(r'\b'+t+r'\b', self.file.original_content[td.end():self.start()]): + yield td.make_removal_patch() + + c = (f'OBJECT_DECLARE_TYPE({instancetype}, {classtype}, {uppercase})\n') + yield self.make_patch(c) + +class AddObjectDeclareSimpleType(DeclareInstanceChecker): + """Will add OBJECT_DECLARE_SIMPLE_TYPE(...) if possible""" + def gen_patches(self) -> Iterable[Patch]: + uppercase = self.uppercase + typename = self.group('typename') + instancetype = self.group('instancetype') + + if typename != f'TYPE_{uppercase}': + self.warn("type name mismatch: %s vs %s", typename, uppercase) + return + + typedefs = [(t,self.allfiles.find_matches(SimpleTypedefMatch, t)) + for t in (instancetype,)] + for t,tds in typedefs: + if not tds: + self.warn("typedef %s not found", t) + return + for td in tds: + td_type = td.group('typedef_type') + if td_type != f'struct {t}': + self.warn("typedef mismatch: %s is defined as %s", t, td_type) + td.warn("typedef is here") + return + + # look for reuse of same struct type + other_instance_checkers = [c for c in find_type_checkers(self.allfiles, instancetype, 'instancetype') + if c.uppercase != uppercase] + if other_instance_checkers: + self.warn("typedef %s is being reused", instancetype) + for ic in other_instance_checkers: + ic.warn("%s is reused here", instancetype) + if not self.file.force: + return + + decl_types: List[Type[TypeDeclaration]] = [DeclareClassCheckers, DeclareObjCheckers] + class_decls = [m for t in decl_types + for m in self.allfiles.find_matches(t, uppercase, 'uppercase')] + if class_decls: + self.warn("class type declared for %s", uppercase) + for cd in class_decls: + cd.warn("class declaration found here") + return + + defs = list(find_type_definitions(self.allfiles, uppercase)) + if len(defs) > 1: + self.warn("multiple definitions for %s", uppercase) + for d in defs: + d.warn("definition found here") + if not self.file.force: + return + elif len(defs) == 0: + self.warn("type definition for %s not found", uppercase) + if not self.file.force: + return + else: + d = defs[0] + if d.instancetype != instancetype: + self.warn("mismatching instance type for %s (%s)", uppercase, instancetype) + d.warn("instance type declared here (%s)", d.instancetype) + if not self.file.force: + return + if d.classtype: + self.warn("class type set for %s", uppercase) + d.warn("class type declared here") + if not self.file.force: + return + + assert self.file.original_content + for t,tds in typedefs: + assert tds + for td in tds: + if td.file is not self.file: + continue + + # delete typedefs that are truly redundant: + # 1) defined after DECLARE_OBJ_CHECKERS + if td.start() > self.start(): + yield td.make_removal_patch() + # 2) defined before DECLARE_OBJ_CHECKERS, but unused + elif not re.search(r'\b'+t+r'\b', self.file.original_content[td.end():self.start()]): + yield td.make_removal_patch() + + c = (f'OBJECT_DECLARE_SIMPLE_TYPE({instancetype}, {uppercase})\n') + yield self.make_patch(c) + + +class TypeInfoStringName(TypeInfoVar): + """Replace hardcoded type names with TYPE_ constant""" + def gen_patches(self) -> Iterable[Patch]: + values = self.initializers + if values is None: + return + if 'name' not in values: + self.warn("name not set in TypeInfo variable %s", self.name) + return + typename = values['name'].raw + if re.fullmatch(RE_IDENTIFIER, typename): + return + + self.warn("name %s is not an identifier", typename) + #all_defines = [m for m in self.allfiles.matches_of_type(ExpressionDefine)] + #self.debug("all_defines: %r", all_defines) + constants = [m for m in self.allfiles.matches_of_type(ExpressionDefine) + if m.group('value').strip() == typename.strip()] + if not constants: + self.warn("No macro for %s found", typename) + return + if len(constants) > 1: + self.warn("I don't know which macro to use: %r", constants) + return + yield self.patch_field_value('name', constants[0].name) class RedundantTypeSizes(TypeInfoVar): """Remove redundant instance_size/class_size from TypeInfo vars""" @@ -230,8 +731,8 @@ class RedundantTypeSizes(TypeInfoVar): self.debug("no need to validate %s", self.name) return - instance_decl = find_type_declaration(self.allfiles, typename) - if instance_decl: + instance_decls = find_type_checkers(self.allfiles, typename) + if instance_decls: self.debug("won't touch TypeInfo var that has type checkers") return @@ -240,12 +741,12 @@ class RedundantTypeSizes(TypeInfoVar): self.warn("Can't find TypeInfo for %s", parent_typename) return - if 'instance_size' in values and parent.get_initializer_value('instance_size').raw != values['instance_size'].raw: + if 'instance_size' in values and parent.get_raw_initializer_value('instance_size') != values['instance_size'].raw: self.info("instance_size mismatch") parent.info("parent type declared here") return - if 'class_size' in values and parent.get_initializer_value('class_size').raw != values['class_size'].raw: + if 'class_size' in values and parent.get_raw_initializer_value('class_size') != values['class_size'].raw: self.info("class_size mismatch") parent.info("parent type declared here") return @@ -303,10 +804,11 @@ class RedundantTypeSizes(TypeInfoVar): # yield self.append_field('class_init', ids.lowercase+'_class_init') class TypeInitMacro(FileMatch): - """type_init(...) macro use - Will be deleted if function is empty - """ + """Use of type_init(...) macro""" regexp = S(r'^[ \t]*type_init\s*\(\s*', NAMED('name', RE_IDENTIFIER), r'\s*\);?[ \t]*\n') + +class DeleteEmptyTypeInitFunc(TypeInitMacro): + """Delete empty function declared using type_init(...)""" def gen_patches(self) -> Iterable[Patch]: fn = self.file.find_match(StaticVoidFunction, self.name) DBG("function for %s: %s", self.name, fn) @@ -331,7 +833,7 @@ class StaticVoidFunction(FileMatch): r'#[^\n]*\n', r'\n', repeat='*')), - r'}\n') + r'};?\n') @property def body(self) -> str: @@ -340,34 +842,40 @@ class StaticVoidFunction(FileMatch): def has_preprocessor_directive(self) -> bool: return bool(re.search(r'^[ \t]*#', self.body, re.MULTILINE)) -class TypeRegisterCall(FileMatch): +def find_containing_func(m: FileMatch) -> Optional['StaticVoidFunction']: + """Return function containing this match""" + for fn in m.file.matches_of_type(StaticVoidFunction): + if fn.contains(m): + return fn + return None + +class TypeRegisterStaticCall(FileMatch): """type_register_static() call Will be replaced by TYPE_INFO() macro """ - regexp = S(r'^[ \t]*type_register_static\s*\(&\s*', NAMED('name', RE_IDENTIFIER), r'\s*\);[ \t]*\n') - - def function(self) -> Optional['StaticVoidFunction']: - """Return function containing this call""" - for m in self.file.matches_of_type(StaticVoidFunction): - if m.contains(self): - return m - return None + regexp = S(r'^[ \t]*', NAMED('func_name', 'type_register_static'), + r'\s*\(&\s*', NAMED('name', RE_IDENTIFIER), r'\s*\);[ \t]*\n') +class UseTypeInfo(TypeRegisterStaticCall): + """Replace type_register_static() call with TYPE_INFO declaration""" def gen_patches(self) -> Iterable[Patch]: - fn = self.function() - if fn is None: - self.warn("can't find function where type_register_static(&%s) is called", self.name) - return + fn = find_containing_func(self) + if fn: + DBG("%r is inside %r", self, fn) + type_init = self.file.find_match(TypeInitMacro, fn.name) + if type_init is None: + self.warn("can't find type_init(%s) line", fn.name) + if not self.file.force: + return + else: + self.warn("can't identify the function where type_register_static(&%s) is called", self.name) + if not self.file.force: + return #if fn.has_preprocessor_directive() and not self.file.force: # self.warn("function %s has preprocessor directives, this requires --force", fn.name) # return - type_init = self.file.find_match(TypeInitMacro, fn.name) - if type_init is None: - self.warn("can't find type_init(%s) line", fn.name) - return - var = self.file.find_match(TypeInfoVar, self.name) if var is None: self.warn("can't find TypeInfo var declaration for %s", self.name) @@ -375,24 +883,51 @@ class TypeRegisterCall(FileMatch): if not var.is_full(): self.warn("variable declaration %s wasn't parsed fully", var.name) - return + if not self.file.force: + return - if fn.contains(var): + if fn and fn.contains(var): self.warn("TypeInfo %s variable is inside a function", self.name) - return + if not self.file.force: + return # delete type_register_static() call: yield self.make_patch('') # append TYPE_REGISTER(...) after variable declaration: yield var.append(f'TYPE_INFO({self.name})\n') +class TypeRegisterCall(FileMatch): + """type_register_static() call""" + regexp = S(r'^[ \t]*', NAMED('func_name', 'type_register'), + r'\s*\(&\s*', NAMED('name', RE_IDENTIFIER), r'\s*\);[ \t]*\n') + +class MakeTypeRegisterStatic(TypeRegisterCall): + """Make type_register() call static if variable is static const""" + def gen_patches(self): + var = self.file.find_match(TypeInfoVar, self.name) + if var is None: + self.warn("can't find TypeInfo var declaration for %s", self.name) + return + if var.is_static() and var.is_const(): + yield self.group_match('func_name').make_patch('type_register_static') + +class MakeTypeRegisterNotStatic(TypeRegisterStaticCall): + """Make type_register() call static if variable is static const""" + def gen_patches(self): + var = self.file.find_match(TypeInfoVar, self.name) + if var is None: + self.warn("can't find TypeInfo var declaration for %s", self.name) + return + if not var.is_static() or not var.is_const(): + yield self.group_match('func_name').make_patch('type_register') + class TypeInfoMacro(FileMatch): """TYPE_INFO macro usage""" regexp = S(r'^[ \t]*TYPE_INFO\s*\(\s*', NAMED('name', RE_IDENTIFIER), r'\s*\)[ \t]*;?[ \t]*\n') def find_type_info(files: RegexpScanner, name: str) -> Optional[TypeInfoVar]: ti = [ti for ti in files.matches_of_type(TypeInfoVar) - if ti.get_initializer_value('name').raw == name] + if ti.get_raw_initializer_value('name') == name] DBG("type info vars: %r", ti) if len(ti) > 1: DBG("multiple TypeInfo vars found for %s", name) diff --git a/scripts/codeconverter/codeconverter/test_patching.py b/scripts/codeconverter/codeconverter/test_patching.py index 5998af81c9..71dfbd47e1 100644 --- a/scripts/codeconverter/codeconverter/test_patching.py +++ b/scripts/codeconverter/codeconverter/test_patching.py @@ -31,7 +31,6 @@ def test_pattern_patching(): files = FileList() f = FileInfo(files, of.name) f.load() - f.scan_for_matches() matches = f.matches_of_type(BasicPattern) assert len(matches) == 2 p2 = matches[1] @@ -40,7 +39,7 @@ def test_pattern_patching(): f.patches.append(p2.append('XXX')) # apply all patches: - f.gen_patches() + f.gen_patches(matches) patched = f.get_patched_content() assert patched == ('one line\n'+ 'this pattern will be patched: defBBBBBhij\n'+ diff --git a/scripts/codeconverter/codeconverter/test_regexps.py b/scripts/codeconverter/codeconverter/test_regexps.py index 9b84d689a6..a445634d88 100644 --- a/scripts/codeconverter/codeconverter/test_regexps.py +++ b/scripts/codeconverter/codeconverter/test_regexps.py @@ -9,7 +9,7 @@ from .regexps import * from .qom_macros import * from .qom_type_info import * -def test_res(): +def test_res() -> None: def fullmatch(regexp, s): return re.fullmatch(regexp, s, re.MULTILINE) @@ -113,10 +113,10 @@ static const TypeInfo char_file_type_info = { * need to set up reset or vmstate, and has no realize method. */''') - print(RE_TYPEINFO_DEF) + print(TypeInfoVar.regexp) test_empty = 'static const TypeInfo x86_base_cpu_type_info = {\n'+\ '};\n'; - assert fullmatch(RE_TYPEINFO_DEF, test_empty) + assert fullmatch(TypeInfoVar.regexp, test_empty) test_simple = r''' static const TypeInfo x86_base_cpu_type_info = { @@ -125,7 +125,7 @@ static const TypeInfo char_file_type_info = { .class_init = x86_cpu_base_class_init, }; ''' - assert re.search(RE_TYPEINFO_DEF, test_simple, re.MULTILINE) + assert re.search(TypeInfoVar.regexp, test_simple, re.MULTILINE) test_interfaces = r''' static const TypeInfo acpi_ged_info = { @@ -141,7 +141,7 @@ static const TypeInfo char_file_type_info = { } }; ''' - assert re.search(RE_TYPEINFO_DEF, test_interfaces, re.MULTILINE) + assert re.search(TypeInfoVar.regexp, test_interfaces, re.MULTILINE) test_comments = r''' static const TypeInfo palm_misc_gpio_info = { @@ -155,7 +155,7 @@ static const TypeInfo char_file_type_info = { */ }; ''' - assert re.search(RE_TYPEINFO_DEF, test_comments, re.MULTILINE) + assert re.search(TypeInfoVar.regexp, test_comments, re.MULTILINE) test_comments = r''' static const TypeInfo tpm_crb_info = { @@ -170,7 +170,7 @@ static const TypeInfo char_file_type_info = { } }; ''' - assert re.search(RE_TYPEINFO_DEF, test_comments, re.MULTILINE) + assert re.search(TypeInfoVar.regexp, test_comments, re.MULTILINE) def test_struct_re(): print('---') @@ -232,8 +232,8 @@ def test_initial_includes(): /* pflash_cfi01.c */ ''' - print(repr(list(m.groupdict() for m in re.finditer(InitialIncludes.regexp, c, re.MULTILINE)))) - m = re.match(InitialIncludes.regexp, c, re.MULTILINE) + print(repr(list(m.groupdict() for m in InitialIncludes.finditer(c)))) + m = InitialIncludes.domatch(c) assert m print(repr(m.group(0))) assert m.group(0).endswith('#include "exec/hwaddr.h"\n') @@ -247,8 +247,8 @@ def test_initial_includes(): ''' - print(repr(list(m.groupdict() for m in re.finditer(InitialIncludes.regexp, c, re.MULTILINE)))) - m = re.match(InitialIncludes.regexp, c, re.MULTILINE) + print(repr(list(m.groupdict() for m in InitialIncludes.finditer(c)))) + m = InitialIncludes.domatch(c) assert m print(repr(m.group(0))) assert m.group(0).endswith('#include "9p.h"\n') @@ -274,8 +274,8 @@ def test_initial_includes(): /* Missing stuff: SCTRL_P[12](END|ST)INC ''' - print(repr(list(m.groupdict() for m in re.finditer(InitialIncludes.regexp, c, re.MULTILINE)))) - m = re.match(InitialIncludes.regexp, c, re.MULTILINE) + print(repr(list(m.groupdict() for m in InitialIncludes.finditer(c)))) + m = InitialIncludes.domatch(c) assert m print(repr(m.group(0))) assert m.group(0).endswith('#include "sysemu/dma.h"\n') diff --git a/scripts/codeconverter/converter.py b/scripts/codeconverter/converter.py index ebaf9b57ce..75cb515d93 100755 --- a/scripts/codeconverter/converter.py +++ b/scripts/codeconverter/converter.py @@ -42,7 +42,7 @@ def process_all_files(parser: argparse.ArgumentParser, args: argparse.Namespace) for t in f.matches_of_type(TypeInfoVar): assert isinstance(t, TypeInfoVar) values = [f.filename, t.name] + \ - [t.get_initializer_value(f).raw + [t.get_raw_initializer_value(f) for f in TI_FIELDS] DBG('values: %r', values) assert all('\t' not in v for v in values) @@ -55,18 +55,18 @@ def process_all_files(parser: argparse.ArgumentParser, args: argparse.Namespace) parser.error("--pattern is required") classes = [p for arg in args.patterns - for p in re.split(r'[\s,]', arg)] + for p in re.split(r'[\s,]', arg) + if p.strip()] for c in classes: - if c not in match_classes: + if c not in match_classes \ + or not match_classes[c].regexp: print("Invalid pattern name: %s" % (c), file=sys.stderr) print("Valid patterns:", file=sys.stderr) print(PATTERN_HELP, file=sys.stderr) sys.exit(1) DBG("classes: %r", classes) - for f in files: - DBG("patching contents of %s", f.filename) - f.patch_content(max_passes=args.passes, class_names=classes) + files.patch_content(max_passes=args.passes, class_names=classes) for f in files: #alltypes.extend(f.type_infos) diff --git a/scripts/simplebench/bench_write_req.py b/scripts/simplebench/bench_write_req.py new file mode 100755 index 0000000000..ca1178fd68 --- /dev/null +++ b/scripts/simplebench/bench_write_req.py @@ -0,0 +1,170 @@ +#!/usr/bin/env python3 +# +# Test to compare performance of write requests for two qemu-img binary files. +# +# The idea of the test comes from intention to check the benefit of c8bb23cbdbe +# "qcow2: skip writing zero buffers to empty COW areas". +# +# Copyright (c) 2020 Virtuozzo International GmbH. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + + +import sys +import os +import subprocess +import simplebench + + +def bench_func(env, case): + """ Handle one "cell" of benchmarking table. """ + return bench_write_req(env['qemu_img'], env['image_name'], + case['block_size'], case['block_offset'], + case['cluster_size']) + + +def qemu_img_pipe(*args): + '''Run qemu-img and return its output''' + subp = subprocess.Popen(list(args), + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + universal_newlines=True) + exitcode = subp.wait() + if exitcode < 0: + sys.stderr.write('qemu-img received signal %i: %s\n' + % (-exitcode, ' '.join(list(args)))) + return subp.communicate()[0] + + +def bench_write_req(qemu_img, image_name, block_size, block_offset, + cluster_size): + """Benchmark write requests + + The function creates a QCOW2 image with the given path/name. Then it runs + the 'qemu-img bench' command and makes series of write requests on the + image clusters. Finally, it returns the total time of the write operations + on the disk. + + qemu_img -- path to qemu_img executable file + image_name -- QCOW2 image name to create + block_size -- size of a block to write to clusters + block_offset -- offset of the block in clusters + cluster_size -- size of the image cluster + + Returns {'seconds': int} on success and {'error': str} on failure. + Return value is compatible with simplebench lib. + """ + + if not os.path.isfile(qemu_img): + print(f'File not found: {qemu_img}') + sys.exit(1) + + image_dir = os.path.dirname(os.path.abspath(image_name)) + if not os.path.isdir(image_dir): + print(f'Path not found: {image_name}') + sys.exit(1) + + image_size = 1024 * 1024 * 1024 + + args_create = [qemu_img, 'create', '-f', 'qcow2', '-o', + f'cluster_size={cluster_size}', + image_name, str(image_size)] + + count = int(image_size / cluster_size) - 1 + step = str(cluster_size) + + args_bench = [qemu_img, 'bench', '-w', '-n', '-t', 'none', '-c', + str(count), '-s', f'{block_size}', '-o', str(block_offset), + '-S', step, '-f', 'qcow2', image_name] + + try: + qemu_img_pipe(*args_create) + except OSError as e: + os.remove(image_name) + return {'error': 'qemu_img create failed: ' + str(e)} + + try: + ret = qemu_img_pipe(*args_bench) + except OSError as e: + os.remove(image_name) + return {'error': 'qemu_img bench failed: ' + str(e)} + + os.remove(image_name) + + if 'seconds' in ret: + ret_list = ret.split() + index = ret_list.index('seconds.') + return {'seconds': float(ret_list[index-1])} + else: + return {'error': 'qemu_img bench failed: ' + ret} + + +if __name__ == '__main__': + + if len(sys.argv) < 4: + program = os.path.basename(sys.argv[0]) + print(f'USAGE: {program} <path to qemu-img binary file> ' + '<path to another qemu-img to compare performance with> ' + '<full or relative name for QCOW2 image to create>') + exit(1) + + # Test-cases are "rows" in benchmark resulting table, 'id' is a caption + # for the row, other fields are handled by bench_func. + test_cases = [ + { + 'id': '<cluster front>', + 'block_size': 4096, + 'block_offset': 0, + 'cluster_size': 1048576 + }, + { + 'id': '<cluster middle>', + 'block_size': 4096, + 'block_offset': 524288, + 'cluster_size': 1048576 + }, + { + 'id': '<cross cluster>', + 'block_size': 1048576, + 'block_offset': 4096, + 'cluster_size': 1048576 + }, + { + 'id': '<cluster 64K>', + 'block_size': 4096, + 'block_offset': 0, + 'cluster_size': 65536 + }, + ] + + # Test-envs are "columns" in benchmark resulting table, 'id is a caption + # for the column, other fields are handled by bench_func. + # Set the paths below to desired values + test_envs = [ + { + 'id': '<qemu-img binary 1>', + 'qemu_img': f'{sys.argv[1]}', + 'image_name': f'{sys.argv[3]}' + }, + { + 'id': '<qemu-img binary 2>', + 'qemu_img': f'{sys.argv[2]}', + 'image_name': f'{sys.argv[3]}' + }, + ] + + result = simplebench.bench(bench_func, test_envs, test_cases, count=3, + initial_run=False) + print(simplebench.ascii(result)) diff --git a/scsi/pr-manager-helper.c b/scsi/pr-manager-helper.c index 685ce7f92d..451c7631b7 100644 --- a/scsi/pr-manager-helper.c +++ b/scsi/pr-manager-helper.c @@ -27,9 +27,7 @@ #define TYPE_PR_MANAGER_HELPER "pr-manager-helper" -typedef struct PRManagerHelper PRManagerHelper; -DECLARE_INSTANCE_CHECKER(PRManagerHelper, PR_MANAGER_HELPER, - TYPE_PR_MANAGER_HELPER) +OBJECT_DECLARE_SIMPLE_TYPE(PRManagerHelper, PR_MANAGER_HELPER) struct PRManagerHelper { /* <private> */ diff --git a/stubs/fdset.c b/stubs/fdset.c index 67dd5e1d34..56b3663d58 100644 --- a/stubs/fdset.c +++ b/stubs/fdset.c @@ -1,8 +1,9 @@ #include "qemu/osdep.h" #include "monitor/monitor.h" -int monitor_fdset_dup_fd_add(int64_t fdset_id, int dup_fd) +int monitor_fdset_dup_fd_add(int64_t fdset_id, int flags) { + errno = ENOSYS; return -1; } @@ -11,11 +12,6 @@ int64_t monitor_fdset_dup_fd_find(int dup_fd) return -1; } -int monitor_fdset_get_fd(int64_t fdset_id, int flags) -{ - return -ENOENT; -} - void monitor_fdset_dup_fd_remove(int dupfd) { } diff --git a/target/alpha/cpu-qom.h b/target/alpha/cpu-qom.h index 568fe3fb77..7bb9173c57 100644 --- a/target/alpha/cpu-qom.h +++ b/target/alpha/cpu-qom.h @@ -26,7 +26,7 @@ #define TYPE_ALPHA_CPU "alpha-cpu" OBJECT_DECLARE_TYPE(AlphaCPU, AlphaCPUClass, - alpha_cpu, ALPHA_CPU) + ALPHA_CPU) /** * AlphaCPUClass: diff --git a/target/arm/cpu-qom.h b/target/arm/cpu-qom.h index 94bbbd4473..a22bd506d0 100644 --- a/target/arm/cpu-qom.h +++ b/target/arm/cpu-qom.h @@ -28,7 +28,7 @@ struct arm_boot_info; #define TYPE_ARM_CPU "arm-cpu" OBJECT_DECLARE_TYPE(ARMCPU, ARMCPUClass, - arm_cpu, ARM_CPU) + ARM_CPU) #define TYPE_ARM_MAX_CPU "max-" TYPE_ARM_CPU diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 7b5ea65fab..a7643deab4 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -2290,6 +2290,7 @@ void arm_cpu_register(const ARMCPUInfo *info) TypeInfo type_info = { .parent = TYPE_ARM_CPU, .instance_size = sizeof(ARMCPU), + .instance_align = __alignof__(ARMCPU), .instance_init = arm_cpu_instance_init, .class_size = sizeof(ARMCPUClass), .class_init = info->class_init ?: cpu_register_class_init, @@ -2305,6 +2306,7 @@ static const TypeInfo arm_cpu_type_info = { .name = TYPE_ARM_CPU, .parent = TYPE_CPU, .instance_size = sizeof(ARMCPU), + .instance_align = __alignof__(ARMCPU), .instance_init = arm_cpu_initfn, .instance_finalize = arm_cpu_finalizefn, .abstract = true, diff --git a/target/arm/kvm.c b/target/arm/kvm.c index 2eae73315d..0dcb9bfe13 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -71,7 +71,7 @@ bool kvm_arm_create_scratch_host_vcpu(const uint32_t *cpus_to_try, { int ret = 0, kvmfd = -1, vmfd = -1, cpufd = -1; - kvmfd = qemu_open("/dev/kvm", O_RDWR); + kvmfd = qemu_open_old("/dev/kvm", O_RDWR); if (kvmfd < 0) { goto err; } diff --git a/target/avr/cpu-qom.h b/target/avr/cpu-qom.h index 49d63faad2..9fa6989c18 100644 --- a/target/avr/cpu-qom.h +++ b/target/avr/cpu-qom.h @@ -27,7 +27,7 @@ #define TYPE_AVR_CPU "avr-cpu" OBJECT_DECLARE_TYPE(AVRCPU, AVRCPUClass, - avr_cpu, AVR_CPU) + AVR_CPU) /** * AVRCPUClass: diff --git a/target/cris/cpu-qom.h b/target/cris/cpu-qom.h index 2b0328113c..2596edc7e3 100644 --- a/target/cris/cpu-qom.h +++ b/target/cris/cpu-qom.h @@ -26,7 +26,7 @@ #define TYPE_CRIS_CPU "cris-cpu" OBJECT_DECLARE_TYPE(CRISCPU, CRISCPUClass, - cris_cpu, CRIS_CPU) + CRIS_CPU) /** * CRISCPUClass: diff --git a/target/hppa/cpu-qom.h b/target/hppa/cpu-qom.h index 58158f374b..d424f88370 100644 --- a/target/hppa/cpu-qom.h +++ b/target/hppa/cpu-qom.h @@ -26,7 +26,7 @@ #define TYPE_HPPA_CPU "hppa-cpu" OBJECT_DECLARE_TYPE(HPPACPU, HPPACPUClass, - hppa_cpu, HPPA_CPU) + HPPA_CPU) /** * HPPACPUClass: diff --git a/target/i386/cpu-qom.h b/target/i386/cpu-qom.h index 0505472e86..f9923cee04 100644 --- a/target/i386/cpu-qom.h +++ b/target/i386/cpu-qom.h @@ -31,7 +31,7 @@ #endif OBJECT_DECLARE_TYPE(X86CPU, X86CPUClass, - x86_cpu, X86_CPU) + X86_CPU) typedef struct X86CPUModel X86CPUModel; diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 49d8958528..1c58f764dc 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -338,68 +338,13 @@ static void encode_cache_cpuid80000006(CPUCacheInfo *l2, } } -/* - * Definitions used for building CPUID Leaf 0x8000001D and 0x8000001E - * Please refer to the AMD64 Architecture Programmer’s Manual Volume 3. - * Define the constants to build the cpu topology. Right now, TOPOEXT - * feature is enabled only on EPYC. So, these constants are based on - * EPYC supported configurations. We may need to handle the cases if - * these values change in future. - */ -/* Maximum core complexes in a node */ -#define MAX_CCX 2 -/* Maximum cores in a core complex */ -#define MAX_CORES_IN_CCX 4 -/* Maximum cores in a node */ -#define MAX_CORES_IN_NODE 8 -/* Maximum nodes in a socket */ -#define MAX_NODES_PER_SOCKET 4 - -/* - * Figure out the number of nodes required to build this config. - * Max cores in a node is 8 - */ -static int nodes_in_socket(int nr_cores) -{ - int nodes; - - nodes = DIV_ROUND_UP(nr_cores, MAX_CORES_IN_NODE); - - /* Hardware does not support config with 3 nodes, return 4 in that case */ - return (nodes == 3) ? 4 : nodes; -} - -/* - * Decide the number of cores in a core complex with the given nr_cores using - * following set constants MAX_CCX, MAX_CORES_IN_CCX, MAX_CORES_IN_NODE and - * MAX_NODES_PER_SOCKET. Maintain symmetry as much as possible - * L3 cache is shared across all cores in a core complex. So, this will also - * tell us how many cores are sharing the L3 cache. - */ -static int cores_in_core_complex(int nr_cores) -{ - int nodes; - - /* Check if we can fit all the cores in one core complex */ - if (nr_cores <= MAX_CORES_IN_CCX) { - return nr_cores; - } - /* Get the number of nodes required to build this config */ - nodes = nodes_in_socket(nr_cores); - - /* - * Divide the cores accros all the core complexes - * Return rounded up value - */ - return DIV_ROUND_UP(nr_cores, nodes * MAX_CCX); -} - /* Encode cache info for CPUID[8000001D] */ -static void encode_cache_cpuid8000001d(CPUCacheInfo *cache, CPUState *cs, - uint32_t *eax, uint32_t *ebx, - uint32_t *ecx, uint32_t *edx) +static void encode_cache_cpuid8000001d(CPUCacheInfo *cache, + X86CPUTopoInfo *topo_info, + uint32_t *eax, uint32_t *ebx, + uint32_t *ecx, uint32_t *edx) { - uint32_t l3_cores; + uint32_t l3_threads; assert(cache->size == cache->line_size * cache->associativity * cache->partitions * cache->sets); @@ -408,10 +353,10 @@ static void encode_cache_cpuid8000001d(CPUCacheInfo *cache, CPUState *cs, /* L3 is shared among multiple cores */ if (cache->level == 3) { - l3_cores = cores_in_core_complex(cs->nr_cores); - *eax |= ((l3_cores * cs->nr_threads) - 1) << 14; + l3_threads = topo_info->cores_per_die * topo_info->threads_per_core; + *eax |= (l3_threads - 1) << 14; } else { - *eax |= ((cs->nr_threads - 1) << 14); + *eax |= ((topo_info->threads_per_core - 1) << 14); } assert(cache->line_size > 0); @@ -431,107 +376,58 @@ static void encode_cache_cpuid8000001d(CPUCacheInfo *cache, CPUState *cs, (cache->complex_indexing ? CACHE_COMPLEX_IDX : 0); } -/* Data structure to hold the configuration info for a given core index */ -struct core_topology { - /* core complex id of the current core index */ - int ccx_id; - /* - * Adjusted core index for this core in the topology - * This can be 0,1,2,3 with max 4 cores in a core complex - */ - int core_id; - /* Node id for this core index */ - int node_id; - /* Number of nodes in this config */ - int num_nodes; -}; - -/* - * Build the configuration closely match the EPYC hardware. Using the EPYC - * hardware configuration values (MAX_CCX, MAX_CORES_IN_CCX, MAX_CORES_IN_NODE) - * right now. This could change in future. - * nr_cores : Total number of cores in the config - * core_id : Core index of the current CPU - * topo : Data structure to hold all the config info for this core index - */ -static void build_core_topology(int nr_cores, int core_id, - struct core_topology *topo) -{ - int nodes, cores_in_ccx; - - /* First get the number of nodes required */ - nodes = nodes_in_socket(nr_cores); - - cores_in_ccx = cores_in_core_complex(nr_cores); - - topo->node_id = core_id / (cores_in_ccx * MAX_CCX); - topo->ccx_id = (core_id % (cores_in_ccx * MAX_CCX)) / cores_in_ccx; - topo->core_id = core_id % cores_in_ccx; - topo->num_nodes = nodes; -} - /* Encode cache info for CPUID[8000001E] */ -static void encode_topo_cpuid8000001e(CPUState *cs, X86CPU *cpu, - uint32_t *eax, uint32_t *ebx, - uint32_t *ecx, uint32_t *edx) +static void encode_topo_cpuid8000001e(X86CPU *cpu, X86CPUTopoInfo *topo_info, + uint32_t *eax, uint32_t *ebx, + uint32_t *ecx, uint32_t *edx) { - struct core_topology topo = {0}; - unsigned long nodes; - int shift; + X86CPUTopoIDs topo_ids; + + x86_topo_ids_from_apicid(cpu->apic_id, topo_info, &topo_ids); - build_core_topology(cs->nr_cores, cpu->core_id, &topo); *eax = cpu->apic_id; + /* - * CPUID_Fn8000001E_EBX - * 31:16 Reserved - * 15:8 Threads per core (The number of threads per core is - * Threads per core + 1) - * 7:0 Core id (see bit decoding below) - * SMT: - * 4:3 node id - * 2 Core complex id - * 1:0 Core id - * Non SMT: - * 5:4 node id - * 3 Core complex id - * 1:0 Core id + * CPUID_Fn8000001E_EBX [Core Identifiers] (CoreId) + * Read-only. Reset: 0000_XXXXh. + * See Core::X86::Cpuid::ExtApicId. + * Core::X86::Cpuid::CoreId_lthree[1:0]_core[3:0]_thread[1:0]; + * Bits Description + * 31:16 Reserved. + * 15:8 ThreadsPerCore: threads per core. Read-only. Reset: XXh. + * The number of threads per core is ThreadsPerCore+1. + * 7:0 CoreId: core ID. Read-only. Reset: XXh. + * + * NOTE: CoreId is already part of apic_id. Just use it. We can + * use all the 8 bits to represent the core_id here. */ - if (cs->nr_threads - 1) { - *ebx = ((cs->nr_threads - 1) << 8) | (topo.node_id << 3) | - (topo.ccx_id << 2) | topo.core_id; - } else { - *ebx = (topo.node_id << 4) | (topo.ccx_id << 3) | topo.core_id; - } + *ebx = ((topo_info->threads_per_core - 1) << 8) | (topo_ids.core_id & 0xFF); + /* - * CPUID_Fn8000001E_ECX - * 31:11 Reserved - * 10:8 Nodes per processor (Nodes per processor is number of nodes + 1) - * 7:0 Node id (see bit decoding below) - * 2 Socket id - * 1:0 Node id + * CPUID_Fn8000001E_ECX [Node Identifiers] (NodeId) + * Read-only. Reset: 0000_0XXXh. + * Core::X86::Cpuid::NodeId_lthree[1:0]_core[3:0]_thread[1:0]; + * Bits Description + * 31:11 Reserved. + * 10:8 NodesPerProcessor: Node per processor. Read-only. Reset: XXXb. + * ValidValues: + * Value Description + * 000b 1 node per processor. + * 001b 2 nodes per processor. + * 010b Reserved. + * 011b 4 nodes per processor. + * 111b-100b Reserved. + * 7:0 NodeId: Node ID. Read-only. Reset: XXh. + * + * NOTE: Hardware reserves 3 bits for number of nodes per processor. + * But users can create more nodes than the actual hardware can + * support. To genaralize we can use all the upper 8 bits for nodes. + * NodeId is combination of node and socket_id which is already decoded + * in apic_id. Just use it by shifting. */ - if (topo.num_nodes <= 4) { - *ecx = ((topo.num_nodes - 1) << 8) | (cpu->socket_id << 2) | - topo.node_id; - } else { - /* - * Node id fix up. Actual hardware supports up to 4 nodes. But with - * more than 32 cores, we may end up with more than 4 nodes. - * Node id is a combination of socket id and node id. Only requirement - * here is that this number should be unique accross the system. - * Shift the socket id to accommodate more nodes. We dont expect both - * socket id and node id to be big number at the same time. This is not - * an ideal config but we need to to support it. Max nodes we can have - * is 32 (255/8) with 8 cores per node and 255 max cores. We only need - * 5 bits for nodes. Find the left most set bit to represent the total - * number of nodes. find_last_bit returns last set bit(0 based). Left - * shift(+1) the socket id to represent all the nodes. - */ - nodes = topo.num_nodes - 1; - shift = find_last_bit(&nodes, 8); - *ecx = ((topo.num_nodes - 1) << 8) | (cpu->socket_id << (shift + 1)) | - topo.node_id; - } + *ecx = ((topo_info->dies_per_pkg - 1) << 8) | + ((cpu->apic_id >> apicid_die_offset(topo_info)) & 0xFF); + *edx = 0; } @@ -5995,20 +5891,20 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, } switch (count) { case 0: /* L1 dcache info */ - encode_cache_cpuid8000001d(env->cache_info_amd.l1d_cache, cs, - eax, ebx, ecx, edx); + encode_cache_cpuid8000001d(env->cache_info_amd.l1d_cache, + &topo_info, eax, ebx, ecx, edx); break; case 1: /* L1 icache info */ - encode_cache_cpuid8000001d(env->cache_info_amd.l1i_cache, cs, - eax, ebx, ecx, edx); + encode_cache_cpuid8000001d(env->cache_info_amd.l1i_cache, + &topo_info, eax, ebx, ecx, edx); break; case 2: /* L2 cache info */ - encode_cache_cpuid8000001d(env->cache_info_amd.l2_cache, cs, - eax, ebx, ecx, edx); + encode_cache_cpuid8000001d(env->cache_info_amd.l2_cache, + &topo_info, eax, ebx, ecx, edx); break; case 3: /* L3 cache info */ - encode_cache_cpuid8000001d(env->cache_info_amd.l3_cache, cs, - eax, ebx, ecx, edx); + encode_cache_cpuid8000001d(env->cache_info_amd.l3_cache, + &topo_info, eax, ebx, ecx, edx); break; default: /* end of info */ *eax = *ebx = *ecx = *edx = 0; @@ -6017,7 +5913,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, break; case 0x8000001E: assert(cpu->core_id <= 255); - encode_topo_cpuid8000001e(cs, cpu, + encode_topo_cpuid8000001e(cpu, &topo_info, eax, ebx, ecx, edx); break; case 0xC0000000: @@ -7263,7 +7159,7 @@ static Property x86_cpu_properties[] = { DEFINE_PROP_BOOL("pmu", X86CPU, enable_pmu, false), DEFINE_PROP_UINT32("hv-spinlocks", X86CPU, hyperv_spinlock_attempts, - HYPERV_SPINLOCK_NEVER_RETRY), + HYPERV_SPINLOCK_NEVER_NOTIFY), DEFINE_PROP_BIT64("hv-relaxed", X86CPU, hyperv_features, HYPERV_FEAT_RELAXED, 0), DEFINE_PROP_BIT64("hv-vapic", X86CPU, hyperv_features, diff --git a/target/i386/cpu.h b/target/i386/cpu.h index d3097be6a5..f519d2bfd4 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -991,8 +991,8 @@ typedef uint64_t FeatureWordArray[FEATURE_WORDS]; #define HYPERV_FEAT_IPI 13 #define HYPERV_FEAT_STIMER_DIRECT 14 -#ifndef HYPERV_SPINLOCK_NEVER_RETRY -#define HYPERV_SPINLOCK_NEVER_RETRY 0xFFFFFFFF +#ifndef HYPERV_SPINLOCK_NEVER_NOTIFY +#define HYPERV_SPINLOCK_NEVER_NOTIFY 0xFFFFFFFF #endif #define EXCP00_DIVZ 0 diff --git a/target/i386/kvm.c b/target/i386/kvm.c index d87af57a23..9efb07e7c8 100644 --- a/target/i386/kvm.c +++ b/target/i386/kvm.c @@ -730,7 +730,7 @@ static bool hyperv_enabled(X86CPU *cpu) { CPUState *cs = CPU(cpu); return kvm_check_extension(cs->kvm_state, KVM_CAP_HYPERV) > 0 && - ((cpu->hyperv_spinlock_attempts != HYPERV_SPINLOCK_NEVER_RETRY) || + ((cpu->hyperv_spinlock_attempts != HYPERV_SPINLOCK_NEVER_NOTIFY) || cpu->hyperv_features || cpu->hyperv_passthrough); } @@ -1236,7 +1236,7 @@ static int hyperv_handle_properties(CPUState *cs, env->features[FEAT_HV_RECOMM_EAX] = c->eax; /* hv-spinlocks may have been overriden */ - if (cpu->hyperv_spinlock_attempts != HYPERV_SPINLOCK_NEVER_RETRY) { + if (cpu->hyperv_spinlock_attempts != HYPERV_SPINLOCK_NEVER_NOTIFY) { c->ebx = cpu->hyperv_spinlock_attempts; } } diff --git a/target/i386/sev.c b/target/i386/sev.c index d976634b8f..93c4d60b82 100644 --- a/target/i386/sev.c +++ b/target/i386/sev.c @@ -31,9 +31,7 @@ #include "qom/object.h" #define TYPE_SEV_GUEST "sev-guest" -typedef struct SevGuestState SevGuestState; -DECLARE_INSTANCE_CHECKER(SevGuestState, SEV_GUEST, - TYPE_SEV_GUEST) +OBJECT_DECLARE_SIMPLE_TYPE(SevGuestState, SEV_GUEST) /** diff --git a/target/lm32/cpu-qom.h b/target/lm32/cpu-qom.h index e9eb495bf0..245b35cd1d 100644 --- a/target/lm32/cpu-qom.h +++ b/target/lm32/cpu-qom.h @@ -26,7 +26,7 @@ #define TYPE_LM32_CPU "lm32-cpu" OBJECT_DECLARE_TYPE(LM32CPU, LM32CPUClass, - lm32_cpu, LM32_CPU) + LM32_CPU) /** * LM32CPUClass: diff --git a/target/m68k/cpu-qom.h b/target/m68k/cpu-qom.h index a10429cf67..1ceb160ecb 100644 --- a/target/m68k/cpu-qom.h +++ b/target/m68k/cpu-qom.h @@ -26,7 +26,7 @@ #define TYPE_M68K_CPU "m68k-cpu" OBJECT_DECLARE_TYPE(M68kCPU, M68kCPUClass, - m68k_cpu, M68K_CPU) + M68K_CPU) /* * M68kCPUClass: diff --git a/target/microblaze/cpu-qom.h b/target/microblaze/cpu-qom.h index 82734b9b2b..e520eefb12 100644 --- a/target/microblaze/cpu-qom.h +++ b/target/microblaze/cpu-qom.h @@ -26,7 +26,7 @@ #define TYPE_MICROBLAZE_CPU "microblaze-cpu" OBJECT_DECLARE_TYPE(MicroBlazeCPU, MicroBlazeCPUClass, - microblaze_cpu, MICROBLAZE_CPU) + MICROBLAZE_CPU) /** * MicroBlazeCPUClass: diff --git a/target/mips/cpu-qom.h b/target/mips/cpu-qom.h index 93fbbdca1b..826ab13019 100644 --- a/target/mips/cpu-qom.h +++ b/target/mips/cpu-qom.h @@ -30,7 +30,7 @@ #endif OBJECT_DECLARE_TYPE(MIPSCPU, MIPSCPUClass, - mips_cpu, MIPS_CPU) + MIPS_CPU) /** * MIPSCPUClass: diff --git a/target/moxie/cpu.h b/target/moxie/cpu.h index d58761ccb1..bd6ab66084 100644 --- a/target/moxie/cpu.h +++ b/target/moxie/cpu.h @@ -52,7 +52,7 @@ typedef struct CPUMoxieState { #define TYPE_MOXIE_CPU "moxie-cpu" OBJECT_DECLARE_TYPE(MoxieCPU, MoxieCPUClass, - moxie_cpu, MOXIE_CPU) + MOXIE_CPU) /** * MoxieCPUClass: diff --git a/target/nios2/cpu.h b/target/nios2/cpu.h index 1fa0fdaa35..86bbe1d867 100644 --- a/target/nios2/cpu.h +++ b/target/nios2/cpu.h @@ -33,7 +33,7 @@ typedef struct CPUNios2State CPUNios2State; #define TYPE_NIOS2_CPU "nios2-cpu" OBJECT_DECLARE_TYPE(Nios2CPU, Nios2CPUClass, - nios2_cpu, NIOS2_CPU) + NIOS2_CPU) /** * Nios2CPUClass: diff --git a/target/openrisc/cpu.h b/target/openrisc/cpu.h index d0a8ee657a..bd42faf144 100644 --- a/target/openrisc/cpu.h +++ b/target/openrisc/cpu.h @@ -30,7 +30,7 @@ struct OpenRISCCPU; #define TYPE_OPENRISC_CPU "or1k-cpu" OBJECT_DECLARE_TYPE(OpenRISCCPU, OpenRISCCPUClass, - openrisc_cpu, OPENRISC_CPU) + OPENRISC_CPU) /** * OpenRISCCPUClass: diff --git a/target/ppc/cpu-qom.h b/target/ppc/cpu-qom.h index 5cf806a3a6..5fdb96f04d 100644 --- a/target/ppc/cpu-qom.h +++ b/target/ppc/cpu-qom.h @@ -30,7 +30,7 @@ #endif OBJECT_DECLARE_TYPE(PowerPCCPU, PowerPCCPUClass, - powerpc_cpu, POWERPC_CPU) + POWERPC_CPU) typedef struct CPUPPCState CPUPPCState; typedef struct ppc_tb_t ppc_tb_t; diff --git a/target/ppc/translate_init.c.inc b/target/ppc/translate_init.c.inc index 230a062d29..accb4f2fae 100644 --- a/target/ppc/translate_init.c.inc +++ b/target/ppc/translate_init.c.inc @@ -10960,6 +10960,7 @@ static const TypeInfo ppc_cpu_type_info = { .name = TYPE_POWERPC_CPU, .parent = TYPE_CPU, .instance_size = sizeof(PowerPCCPU), + .instance_align = __alignof__(PowerPCCPU), .instance_init = ppc_cpu_instance_init, .instance_finalize = ppc_cpu_instance_finalize, .abstract = true, diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 57c006df5d..0bbfd7f457 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -628,6 +628,7 @@ static const TypeInfo riscv_cpu_type_infos[] = { .name = TYPE_RISCV_CPU, .parent = TYPE_CPU, .instance_size = sizeof(RISCVCPU), + .instance_align = __alignof__(RISCVCPU), .instance_init = riscv_cpu_init, .abstract = true, .class_size = sizeof(RISCVCPUClass), diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 4c00d35ccd..de275782e6 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -234,7 +234,7 @@ struct CPURISCVState { }; OBJECT_DECLARE_TYPE(RISCVCPU, RISCVCPUClass, - riscv_cpu, RISCV_CPU) + RISCV_CPU) /** * RISCVCPUClass: diff --git a/target/rx/cpu-qom.h b/target/rx/cpu-qom.h index 6c5321078d..7310558e0c 100644 --- a/target/rx/cpu-qom.h +++ b/target/rx/cpu-qom.h @@ -27,7 +27,7 @@ #define TYPE_RX62N_CPU RX_CPU_TYPE_NAME("rx62n") OBJECT_DECLARE_TYPE(RXCPU, RXCPUClass, - rx_cpu, RX_CPU) + RX_CPU) /* * RXCPUClass: diff --git a/target/s390x/cpu-qom.h b/target/s390x/cpu-qom.h index e2b2513711..9f3a0d86c5 100644 --- a/target/s390x/cpu-qom.h +++ b/target/s390x/cpu-qom.h @@ -26,7 +26,7 @@ #define TYPE_S390_CPU "s390x-cpu" OBJECT_DECLARE_TYPE(S390CPU, S390CPUClass, - s390_cpu, S390_CPU) + S390_CPU) typedef struct S390CPUModel S390CPUModel; typedef struct S390CPUDef S390CPUDef; diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c index 749cd548f0..e350edc9f5 100644 --- a/target/s390x/cpu.c +++ b/target/s390x/cpu.c @@ -517,6 +517,7 @@ static const TypeInfo s390_cpu_type_info = { .name = TYPE_S390_CPU, .parent = TYPE_CPU, .instance_size = sizeof(S390CPU), + .instance_align = __alignof__(S390CPU), .instance_init = s390_cpu_initfn, .instance_finalize = s390_cpu_finalize, .abstract = true, diff --git a/target/sh4/cpu-qom.h b/target/sh4/cpu-qom.h index 595814b8cb..8903b4b9c7 100644 --- a/target/sh4/cpu-qom.h +++ b/target/sh4/cpu-qom.h @@ -30,7 +30,7 @@ #define TYPE_SH7785_CPU SUPERH_CPU_TYPE_NAME("sh7785") OBJECT_DECLARE_TYPE(SuperHCPU, SuperHCPUClass, - superh_cpu, SUPERH_CPU) + SUPERH_CPU) /** * SuperHCPUClass: diff --git a/target/sparc/cpu-qom.h b/target/sparc/cpu-qom.h index 5d7fb727bc..f33949aaee 100644 --- a/target/sparc/cpu-qom.h +++ b/target/sparc/cpu-qom.h @@ -30,7 +30,7 @@ #endif OBJECT_DECLARE_TYPE(SPARCCPU, SPARCCPUClass, - sparc_cpu, SPARC_CPU) + SPARC_CPU) typedef struct sparc_def_t sparc_def_t; /** diff --git a/target/tilegx/cpu.h b/target/tilegx/cpu.h index d251ff80b8..c194c1a6fd 100644 --- a/target/tilegx/cpu.h +++ b/target/tilegx/cpu.h @@ -100,7 +100,7 @@ typedef struct CPUTLGState { #define TYPE_TILEGX_CPU "tilegx-cpu" OBJECT_DECLARE_TYPE(TileGXCPU, TileGXCPUClass, - tilegx_cpu, TILEGX_CPU) + TILEGX_CPU) /** * TileGXCPUClass: diff --git a/target/tricore/cpu-qom.h b/target/tricore/cpu-qom.h index 9e588c4c34..59bfd01bbc 100644 --- a/target/tricore/cpu-qom.h +++ b/target/tricore/cpu-qom.h @@ -25,7 +25,7 @@ #define TYPE_TRICORE_CPU "tricore-cpu" OBJECT_DECLARE_TYPE(TriCoreCPU, TriCoreCPUClass, - tricore_cpu, TRICORE_CPU) + TRICORE_CPU) struct TriCoreCPUClass { /*< private >*/ diff --git a/target/unicore32/cpu-qom.h b/target/unicore32/cpu-qom.h index c914273058..43621e7479 100644 --- a/target/unicore32/cpu-qom.h +++ b/target/unicore32/cpu-qom.h @@ -17,7 +17,7 @@ #define TYPE_UNICORE32_CPU "unicore32-cpu" OBJECT_DECLARE_TYPE(UniCore32CPU, UniCore32CPUClass, - unicore32_cpu, UNICORE32_CPU) + UNICORE32_CPU) /** * UniCore32CPUClass: diff --git a/target/xtensa/cpu-qom.h b/target/xtensa/cpu-qom.h index 299ce3e63c..41d9859673 100644 --- a/target/xtensa/cpu-qom.h +++ b/target/xtensa/cpu-qom.h @@ -35,7 +35,7 @@ #define TYPE_XTENSA_CPU "xtensa-cpu" OBJECT_DECLARE_TYPE(XtensaCPU, XtensaCPUClass, - xtensa_cpu, XTENSA_CPU) + XTENSA_CPU) typedef struct XtensaConfig XtensaConfig; diff --git a/tests/acceptance/boot_linux_console.py b/tests/acceptance/boot_linux_console.py index 4a366ce93e..0118ed5915 100644 --- a/tests/acceptance/boot_linux_console.py +++ b/tests/acceptance/boot_linux_console.py @@ -485,6 +485,8 @@ class BootLinuxConsole(LinuxKernelTest): self.wait_for_console_pattern('Boot successful.') # TODO user command, for now the uart is stuck + @skipUnless(os.getenv('ARMBIAN_ARTIFACTS_CACHED'), + 'Test artifacts fetched from unreliable apt.armbian.com') def test_arm_cubieboard_initrd(self): """ :avocado: tags=arch:arm @@ -525,6 +527,8 @@ class BootLinuxConsole(LinuxKernelTest): 'system-control@1c00000') # cubieboard's reboot is not functioning; omit reboot test. + @skipUnless(os.getenv('ARMBIAN_ARTIFACTS_CACHED'), + 'Test artifacts fetched from unreliable apt.armbian.com') def test_arm_cubieboard_sata(self): """ :avocado: tags=arch:arm @@ -568,6 +572,7 @@ class BootLinuxConsole(LinuxKernelTest): 'sda') # cubieboard's reboot is not functioning; omit reboot test. + @skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout') def test_arm_quanta_gsj(self): """ :avocado: tags=arch:arm @@ -651,6 +656,8 @@ class BootLinuxConsole(LinuxKernelTest): self.wait_for_console_pattern( 'Give root password for system maintenance') + @skipUnless(os.getenv('ARMBIAN_ARTIFACTS_CACHED'), + 'Test artifacts fetched from unreliable apt.armbian.com') def test_arm_orangepi(self): """ :avocado: tags=arch:arm @@ -676,6 +683,8 @@ class BootLinuxConsole(LinuxKernelTest): console_pattern = 'Kernel command line: %s' % kernel_command_line self.wait_for_console_pattern(console_pattern) + @skipUnless(os.getenv('ARMBIAN_ARTIFACTS_CACHED'), + 'Test artifacts fetched from unreliable apt.armbian.com') def test_arm_orangepi_initrd(self): """ :avocado: tags=arch:arm @@ -718,6 +727,8 @@ class BootLinuxConsole(LinuxKernelTest): # Wait for VM to shut down gracefully self.vm.wait() + @skipUnless(os.getenv('ARMBIAN_ARTIFACTS_CACHED'), + 'Test artifacts fetched from unreliable apt.armbian.com') def test_arm_orangepi_sd(self): """ :avocado: tags=arch:arm diff --git a/tests/acceptance/replay_kernel.py b/tests/acceptance/replay_kernel.py index b79fc8daf8..952f429cac 100644 --- a/tests/acceptance/replay_kernel.py +++ b/tests/acceptance/replay_kernel.py @@ -13,6 +13,7 @@ import logging import time from avocado import skipIf +from avocado import skipUnless from avocado_qemu import wait_for_console_pattern from avocado.utils import archive from avocado.utils import process @@ -127,6 +128,8 @@ class ReplayKernel(LinuxKernelTest): self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=1) @skipIf(os.getenv('GITLAB_CI'), 'Running on GitLab') + @skipUnless(os.getenv('ARMBIAN_ARTIFACTS_CACHED'), + 'Test artifacts fetched from unreliable apt.armbian.com') def test_arm_cubieboard_initrd(self): """ :avocado: tags=arch:arm diff --git a/tests/check-qom-proplist.c b/tests/check-qom-proplist.c index 1571606c1c..1b76581980 100644 --- a/tests/check-qom-proplist.c +++ b/tests/check-qom-proplist.c @@ -491,6 +491,7 @@ static void test_dummy_getenum(void) "av", "BadAnimal", &err); + g_assert(val == -1); error_free_or_abort(&err); /* A non-enum property name */ @@ -498,6 +499,7 @@ static void test_dummy_getenum(void) "iv", "DummyAnimal", &err); + g_assert(val == -1); error_free_or_abort(&err); object_unparent(OBJECT(dobj)); diff --git a/tests/data/acpi/microvm/APIC b/tests/data/acpi/microvm/APIC Binary files differnew file mode 100644 index 0000000000..7472c7e830 --- /dev/null +++ b/tests/data/acpi/microvm/APIC diff --git a/tests/data/acpi/microvm/DSDT b/tests/data/acpi/microvm/DSDT Binary files differnew file mode 100644 index 0000000000..b43f427a22 --- /dev/null +++ b/tests/data/acpi/microvm/DSDT diff --git a/tests/data/acpi/microvm/FACP b/tests/data/acpi/microvm/FACP Binary files differnew file mode 100644 index 0000000000..0ba5795d62 --- /dev/null +++ b/tests/data/acpi/microvm/FACP diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include index 3daabaa2fd..75704268ff 100644 --- a/tests/docker/Makefile.include +++ b/tests/docker/Makefile.include @@ -243,7 +243,6 @@ docker-run: docker-qemu-src $(DOCKER_SCRIPT) run \ $(if $(NOUSER),,--run-as-current-user) \ --security-opt seccomp=unconfined \ - $(if $V,,--rm) \ $(if $(DEBUG),-ti,) \ $(if $(NETWORK),$(if $(subst $(NETWORK),,1),--net=$(NETWORK)),--net=none) \ -e TARGET_LIST=$(subst $(SPACE),$(COMMA),$(TARGET_LIST)) \ diff --git a/tests/docker/docker.py b/tests/docker/docker.py index 356d7618f1..36b7868406 100755 --- a/tests/docker/docker.py +++ b/tests/docker/docker.py @@ -377,7 +377,7 @@ class Docker(object): if self._command[0] == "podman": cmd.insert(0, '--userns=keep-id') - ret = self._do_check(["run", "--label", + ret = self._do_check(["run", "--rm", "--label", "com.qemu.instance.uuid=" + label] + cmd, quiet=quiet) if not keep: @@ -616,7 +616,7 @@ class CcCommand(SubCommand): if argv and argv[0] == "--": argv = argv[1:] cwd = os.getcwd() - cmd = ["--rm", "-w", cwd, + cmd = ["-w", cwd, "-v", "%s:%s:rw" % (cwd, cwd)] if args.paths: for p in args.paths: diff --git a/tests/meson.build b/tests/meson.build index dae8a77df1..8c3e930687 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -145,7 +145,8 @@ if have_block 'test-crypto-block': [io], } if 'CONFIG_GNUTLS' in config_host and \ - 'CONFIG_TASN1' in config_host + 'CONFIG_TASN1' in config_host and \ + 'CONFIG_POSIX' in config_host tests += { 'test-crypto-tlscredsx509': ['crypto-tls-x509-helpers.c', 'pkix_asn1_tab.c', tasn1, crypto], @@ -195,8 +196,13 @@ if have_system # are not runnable under TSan due to a known issue. # https://github.com/google/sanitizers/issues/1116 if 'CONFIG_TSAN' not in config_host + if 'CONFIG_POSIX' in config_host + tests += { + 'test-char': ['socket-helpers.c', qom, io, chardev] + } + endif + tests += { - 'test-char': ['socket-helpers.c', qom, io, chardev], 'test-qdev-global-props': [qom, hwcore, testqapi] } endif diff --git a/tests/qapi-schema/meson.build b/tests/qapi-schema/meson.build index c87d141417..f1449298b0 100644 --- a/tests/qapi-schema/meson.build +++ b/tests/qapi-schema/meson.build @@ -220,6 +220,6 @@ qapi_doc = custom_target('QAPI doc', # "full_path()" needed here to work around # https://github.com/mesonbuild/meson/issues/7585 -test('QAPI doc', diff, args: ['-u', files('doc-good.texi'), qapi_doc[0].full_path()], +test('QAPI doc', diff, args: ['-b', '-u', files('doc-good.texi'), qapi_doc[0].full_path()], depends: qapi_doc, suite: ['qapi-schema', 'qapi-doc']) diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check index e14a1f354d..678b6e4910 100755 --- a/tests/qemu-iotests/check +++ b/tests/qemu-iotests/check @@ -44,7 +44,7 @@ then _init_error "failed to obtain source tree name from check symlink" fi source_iotests=$(cd "$source_iotests"; pwd) || _init_error "failed to enter source tree" - build_iotests=$(readlink -f $(dirname "$0")) + build_iotests=$(cd "$(dirname "$0")"; pwd) else # called from the source tree source_iotests=$PWD diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c index 504b810af5..a9c8d478ae 100644 --- a/tests/qtest/bios-tables-test.c +++ b/tests/qtest/bios-tables-test.c @@ -72,6 +72,7 @@ typedef struct { const char *variant; const char *uefi_fl1; const char *uefi_fl2; + const char *blkdev; const char *cd; const uint64_t ram_start; const uint64_t scan_len; @@ -666,9 +667,10 @@ static void test_acpi_one(const char *params, test_data *data) args = g_strdup_printf("-machine %s,kernel-irqchip=off %s -accel tcg " "-net none -display none %s " "-drive id=hd0,if=none,file=%s,format=raw " - "-device ide-hd,drive=hd0 ", + "-device %s,drive=hd0 ", data->machine, data->tcg_only ? "" : "-accel kvm", - params ? params : "", disk); + params ? params : "", disk, + data->blkdev ?: "ide-hd"); } data->qts = qtest_init(args); @@ -1042,6 +1044,20 @@ static void test_acpi_virt_tcg_memhp(void) } +static void test_acpi_microvm_tcg(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = "microvm"; + data.required_struct_types = NULL; /* no smbios */ + data.required_struct_types_len = 0; + data.blkdev = "virtio-blk-device"; + test_acpi_one(" -machine microvm,acpi=on,rtc=off", + &data); + free_test_data(&data); +} + static void test_acpi_virt_tcg_numamem(void) { test_data data = { @@ -1159,6 +1175,7 @@ int main(int argc, char *argv[]) qtest_add_func("acpi/q35/dimmpxm", test_acpi_q35_tcg_dimm_pxm); qtest_add_func("acpi/piix4/acpihmat", test_acpi_piix4_tcg_acpi_hmat); qtest_add_func("acpi/q35/acpihmat", test_acpi_q35_tcg_acpi_hmat); + qtest_add_func("acpi/microvm", test_acpi_microvm_tcg); } else if (strcmp(arch, "aarch64") == 0) { qtest_add_func("acpi/virt", test_acpi_virt_tcg); qtest_add_func("acpi/virt/numamem", test_acpi_virt_tcg_numamem); diff --git a/tests/qtest/fuzz/fuzz.c b/tests/qtest/fuzz/fuzz.c index 1ceea84702..7f266ffc63 100644 --- a/tests/qtest/fuzz/fuzz.c +++ b/tests/qtest/fuzz/fuzz.c @@ -202,9 +202,8 @@ int LLVMFuzzerInitialize(int *argc, char ***argv, char ***envp) /* Run QEMU's softmmu main with the fuzz-target dependent arguments */ GString *cmd_line = fuzz_target->get_init_cmdline(fuzz_target); - g_string_append_printf(cmd_line, - " -qtest /dev/null -qtest-log %s", - getenv("QTEST_LOG") ? "/dev/fd/2" : "/dev/null"); + g_string_append_printf(cmd_line, " %s -qtest /dev/null ", + getenv("QTEST_LOG") ? "" : "-qtest-log none"); /* Split the runcmd into an argv and argc */ wordexp_t result; diff --git a/tests/qtest/qmp-cmd-test.c b/tests/qtest/qmp-cmd-test.c index 3109a9fe96..8a4c570e83 100644 --- a/tests/qtest/qmp-cmd-test.c +++ b/tests/qtest/qmp-cmd-test.c @@ -82,9 +82,9 @@ static void test_query(const void *data) qtest_quit(qts); } -static bool query_is_blacklisted(const char *cmd) +static bool query_is_ignored(const char *cmd) { - const char *blacklist[] = { + const char *ignored[] = { /* Not actually queries: */ "add-fd", /* Success depends on target arch: */ @@ -101,8 +101,8 @@ static bool query_is_blacklisted(const char *cmd) }; int i; - for (i = 0; blacklist[i]; i++) { - if (!strcmp(cmd, blacklist[i])) { + for (i = 0; ignored[i]; i++) { + if (!strcmp(cmd, ignored[i])) { return true; } } @@ -179,7 +179,7 @@ static void add_query_tests(QmpSchema *schema) continue; } - if (query_is_blacklisted(si->name)) { + if (query_is_ignored(si->name)) { continue; } diff --git a/tests/socket-helpers.c b/tests/socket-helpers.c index 19a51e887e..f704fd1a69 100644 --- a/tests/socket-helpers.c +++ b/tests/socket-helpers.c @@ -59,8 +59,7 @@ static int socket_can_bind_connect(const char *hostname, int family) /* lookup */ rc = getaddrinfo(hostname, NULL, &ai, &res); if (rc != 0) { - if (rc == EAI_ADDRFAMILY || - rc == EAI_FAMILY) { + if (rc == EAI_ADDRFAMILY || rc == EAI_FAMILY || rc == EAI_NONAME) { errno = EADDRNOTAVAIL; } else { errno = EINVAL; diff --git a/tests/test-io-channel-file.c b/tests/test-io-channel-file.c index bac2b07562..0aa0477541 100644 --- a/tests/test-io-channel-file.c +++ b/tests/test-io-channel-file.c @@ -28,6 +28,16 @@ #define TEST_FILE "tests/test-io-channel-file.txt" #define TEST_MASK 0600 +/* + * On Windows the stat() function in the C library checks only + * the FAT-style READONLY attribute and does not look at the ACL at all. + */ +#ifdef _WIN32 +#define TEST_MASK_EXPECT 0700 +#else +#define TEST_MASK_EXPECT 0777 +#endif + static void test_io_channel_file_helper(int flags) { QIOChannel *src, *dst; @@ -56,7 +66,7 @@ static void test_io_channel_file_helper(int flags) umask(mask); ret = stat(TEST_FILE, &st); g_assert_cmpint(ret, >, -1); - g_assert_cmpuint(TEST_MASK & ~mask, ==, st.st_mode & 0777); + g_assert_cmpuint(TEST_MASK & ~mask, ==, st.st_mode & TEST_MASK_EXPECT); unlink(TEST_FILE); object_unref(OBJECT(src)); diff --git a/tests/test-io-channel-socket.c b/tests/test-io-channel-socket.c index d43083a766..743577d744 100644 --- a/tests/test-io-channel-socket.c +++ b/tests/test-io-channel-socket.c @@ -25,6 +25,7 @@ #include "socket-helpers.h" #include "qapi/error.h" #include "qemu/module.h" +#include "qemu/main-loop.h" static void test_io_channel_set_socket_bufs(QIOChannel *src, @@ -556,6 +557,7 @@ int main(int argc, char **argv) bool has_ipv4, has_ipv6; module_call_init(MODULE_INIT_QOM); + qemu_init_main_loop(&error_abort); socket_init(); g_test_init(&argc, &argv, NULL); diff --git a/tests/test-logging.c b/tests/test-logging.c index 8a1161de1d..8b1522cfed 100644 --- a/tests/test-logging.c +++ b/tests/test-logging.c @@ -196,7 +196,7 @@ static void rmdir_full(gchar const *root) int main(int argc, char **argv) { - gchar *tmp_path = g_dir_make_tmp("qemu-test-logging.XXXXXX", NULL); + g_autofree gchar *tmp_path = g_dir_make_tmp("qemu-test-logging.XXXXXX", NULL); int rc; g_test_init(&argc, &argv, NULL); @@ -210,8 +210,9 @@ int main(int argc, char **argv) tmp_path, test_logfile_lock); rc = g_test_run(); + qemu_log_close(); + drain_call_rcu(); rmdir_full(tmp_path); - g_free(tmp_path); return rc; } diff --git a/tests/test-qdev-global-props.c b/tests/test-qdev-global-props.c index 8a3c14d92c..c8862cac5f 100644 --- a/tests/test-qdev-global-props.c +++ b/tests/test-qdev-global-props.c @@ -251,10 +251,13 @@ static void test_dynamic_globalprop(void) g_test_trap_assert_passed(); g_test_trap_assert_stderr_unmatched("*prop1*"); g_test_trap_assert_stderr_unmatched("*prop2*"); - g_test_trap_assert_stderr("*warning: global dynamic-prop-type-bad.prop3 has invalid class name\n*"); + g_test_trap_assert_stderr( + "*warning: global dynamic-prop-type-bad.prop3 has invalid class name*"); g_test_trap_assert_stderr_unmatched("*prop4*"); - g_test_trap_assert_stderr("*warning: global nohotplug-type.prop5=105 not used\n*"); - g_test_trap_assert_stderr("*warning: global nondevice-type.prop6 has invalid class name\n*"); + g_test_trap_assert_stderr( + "*warning: global nohotplug-type.prop5=105 not used*"); + g_test_trap_assert_stderr( + "*warning: global nondevice-type.prop6 has invalid class name*"); g_test_trap_assert_stdout(""); } diff --git a/tests/test-replication.c b/tests/test-replication.c index 9ab3666a90..b067240add 100644 --- a/tests/test-replication.c +++ b/tests/test-replication.c @@ -23,14 +23,14 @@ /* primary */ #define P_ID "primary-id" -static char p_local_disk[] = "/tmp/p_local_disk.XXXXXX"; +static char *p_local_disk; /* secondary */ #define S_ID "secondary-id" #define S_LOCAL_DISK_ID "secondary-local-disk-id" -static char s_local_disk[] = "/tmp/s_local_disk.XXXXXX"; -static char s_active_disk[] = "/tmp/s_active_disk.XXXXXX"; -static char s_hidden_disk[] = "/tmp/s_hidden_disk.XXXXXX"; +static char *s_local_disk; +static char *s_active_disk; +static char *s_hidden_disk; /* FIXME: steal from blockdev.c */ QemuOptsList qemu_drive_opts = { @@ -392,6 +392,7 @@ static void test_secondary_write(void) teardown_secondary(); } +#ifndef _WIN32 static void test_secondary_start(void) { BlockBackend *top_blk, *local_blk; @@ -546,6 +547,7 @@ static void test_secondary_get_error_all(void) teardown_secondary(); } +#endif static void sigabrt_handler(int signo) { @@ -571,6 +573,11 @@ static void setup_sigabrt_handler(void) int main(int argc, char **argv) { int ret; + const char *tmpdir = g_get_tmp_dir(); + p_local_disk = g_strdup_printf("%s/p_local_disk.XXXXXX", tmpdir); + s_local_disk = g_strdup_printf("%s/s_local_disk.XXXXXX", tmpdir); + s_active_disk = g_strdup_printf("%s/s_active_disk.XXXXXX", tmpdir); + s_hidden_disk = g_strdup_printf("%s/s_hidden_disk.XXXXXX", tmpdir); qemu_init_main_loop(&error_fatal); bdrv_init(); @@ -592,6 +599,7 @@ int main(int argc, char **argv) /* Secondary */ g_test_add_func("/replication/secondary/read", test_secondary_read); g_test_add_func("/replication/secondary/write", test_secondary_write); +#ifndef _WIN32 g_test_add_func("/replication/secondary/start", test_secondary_start); g_test_add_func("/replication/secondary/stop", test_secondary_stop); g_test_add_func("/replication/secondary/continuous_replication", @@ -600,10 +608,16 @@ int main(int argc, char **argv) test_secondary_do_checkpoint); g_test_add_func("/replication/secondary/get_error_all", test_secondary_get_error_all); +#endif ret = g_test_run(); cleanup_imgs(); + g_free(p_local_disk); + g_free(s_local_disk); + g_free(s_active_disk); + g_free(s_hidden_disk); + return ret; } diff --git a/tests/test-util-sockets.c b/tests/test-util-sockets.c index af9f5c0c70..1bbb16d9b1 100644 --- a/tests/test-util-sockets.c +++ b/tests/test-util-sockets.c @@ -75,7 +75,7 @@ int monitor_vprintf(Monitor *mon, const char *fmt, va_list ap) { abort(); } void monitor_init_qmp(Chardev *chr, bool pretty, Error **errp) {} void monitor_init_hmp(Chardev *chr, bool use_readline, Error **errp) {} - +#ifndef _WIN32 static void test_socket_fd_pass_name_good(void) { SocketAddress addr; @@ -227,6 +227,7 @@ static void test_socket_fd_pass_num_nocli(void) g_free(addr.u.fd.str); } +#endif #ifdef __linux__ static gchar *abstract_sock_name; @@ -321,6 +322,7 @@ int main(int argc, char **argv) { bool has_ipv4, has_ipv6; + qemu_init_main_loop(&error_abort); socket_init(); g_test_init(&argc, &argv, NULL); @@ -340,6 +342,7 @@ int main(int argc, char **argv) test_fd_is_socket_bad); g_test_add_func("/util/socket/is-socket/good", test_fd_is_socket_good); +#ifndef _WIN32 g_test_add_func("/socket/fd-pass/name/good", test_socket_fd_pass_name_good); g_test_add_func("/socket/fd-pass/name/bad", @@ -352,6 +355,7 @@ int main(int argc, char **argv) test_socket_fd_pass_num_bad); g_test_add_func("/socket/fd-pass/num/nocli", test_socket_fd_pass_num_nocli); +#endif } #ifdef __linux__ diff --git a/tests/test-vmstate.c b/tests/test-vmstate.c index 1c763015d0..a001879585 100644 --- a/tests/test-vmstate.c +++ b/tests/test-vmstate.c @@ -34,7 +34,6 @@ #include "qemu/module.h" #include "io/channel-file.h" -static char temp_file[] = "/tmp/vmst.test.XXXXXX"; static int temp_fd; @@ -1484,6 +1483,8 @@ static void test_tmp_struct(void) int main(int argc, char **argv) { + g_autofree char *temp_file = g_strdup_printf("%s/vmst.test.XXXXXX", + g_get_tmp_dir()); temp_fd = mkstemp(temp_file); module_call_init(MODULE_INIT_QOM); diff --git a/ui/console.c b/ui/console.c index f8d7643fe4..7592c3c324 100644 --- a/ui/console.c +++ b/ui/console.c @@ -373,7 +373,7 @@ void qmp_screendump(const char *filename, bool has_device, const char *device, return; } - fd = qemu_open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666); + fd = qemu_open_old(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666); if (fd == -1) { error_setg(errp, "failed to open file '%s': %s", filename, strerror(errno)); diff --git a/ui/input-barrier.c b/ui/input-barrier.c index 87543a3399..a047919fde 100644 --- a/ui/input-barrier.c +++ b/ui/input-barrier.c @@ -20,8 +20,8 @@ #include "input-barrier.h" #define TYPE_INPUT_BARRIER "input-barrier" -OBJECT_DECLARE_SIMPLE_TYPE(InputBarrier, input_barrier, - INPUT_BARRIER, ObjectClass) +OBJECT_DECLARE_SIMPLE_TYPE(InputBarrier, + INPUT_BARRIER) #define MAX_HELLO_LENGTH 1024 @@ -723,7 +723,6 @@ static void input_barrier_class_init(ObjectClass *oc, void *data) static const TypeInfo input_barrier_info = { .name = TYPE_INPUT_BARRIER, .parent = TYPE_OBJECT, - .class_size = sizeof(InputBarrierClass), .class_init = input_barrier_class_init, .instance_size = sizeof(InputBarrier), .instance_init = input_barrier_instance_init, diff --git a/ui/input-linux.c b/ui/input-linux.c index 5d501c8360..ab351a4187 100644 --- a/ui/input-linux.c +++ b/ui/input-linux.c @@ -31,8 +31,8 @@ static bool linux_is_button(unsigned int lnx) } #define TYPE_INPUT_LINUX "input-linux" -OBJECT_DECLARE_SIMPLE_TYPE(InputLinux, input_linux, - INPUT_LINUX, ObjectClass) +OBJECT_DECLARE_SIMPLE_TYPE(InputLinux, + INPUT_LINUX) struct InputLinux { @@ -514,7 +514,6 @@ static void input_linux_class_init(ObjectClass *oc, void *data) static const TypeInfo input_linux_info = { .name = TYPE_INPUT_LINUX, .parent = TYPE_OBJECT, - .class_size = sizeof(InputLinuxClass), .class_init = input_linux_class_init, .instance_size = sizeof(InputLinux), .instance_init = input_linux_instance_init, diff --git a/util/aio-win32.c b/util/aio-win32.c index 953c56ab48..49bd90e62e 100644 --- a/util/aio-win32.c +++ b/util/aio-win32.c @@ -37,6 +37,16 @@ struct AioHandler { static void aio_remove_fd_handler(AioContext *ctx, AioHandler *node) { + /* + * If the GSource is in the process of being destroyed then + * g_source_remove_poll() causes an assertion failure. Skip + * removal in that case, because glib cleans up its state during + * destruction anyway. + */ + if (!g_source_is_destroyed(&ctx->source)) { + g_source_remove_poll(&ctx->source, &node->pfd); + } + /* If aio_poll is in progress, just mark the node as deleted */ if (qemu_lockcnt_count(&ctx->list_lock)) { node->deleted = 1; @@ -139,8 +149,6 @@ void aio_set_event_notifier(AioContext *ctx, /* Are we deleting the fd handler? */ if (!io_notify) { if (node) { - g_source_remove_poll(&ctx->source, &node->pfd); - aio_remove_fd_handler(ctx, node); } } else { diff --git a/util/osdep.c b/util/osdep.c index e50dc2214e..66d01b9160 100644 --- a/util/osdep.c +++ b/util/osdep.c @@ -22,6 +22,7 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" +#include "qapi/error.h" /* Needed early for CONFIG_BSD etc. */ @@ -122,7 +123,7 @@ static int fcntl_op_getlk = -1; /* * Dups an fd and sets the flags */ -static int qemu_dup_flags(int fd, int flags) +int qemu_dup_flags(int fd, int flags) { int ret; int serrno; @@ -279,13 +280,27 @@ int qemu_lock_fd_test(int fd, int64_t start, int64_t len, bool exclusive) } #endif +static int qemu_open_cloexec(const char *name, int flags, mode_t mode) +{ + int ret; +#ifdef O_CLOEXEC + ret = open(name, flags | O_CLOEXEC, mode); +#else + ret = open(name, flags, mode); + if (ret >= 0) { + qemu_set_cloexec(ret); + } +#endif + return ret; +} + /* * Opens a file with FD_CLOEXEC set */ -int qemu_open(const char *name, int flags, ...) +static int +qemu_open_internal(const char *name, int flags, mode_t mode, Error **errp) { int ret; - int mode = 0; #ifndef _WIN32 const char *fdset_id_str; @@ -293,29 +308,19 @@ int qemu_open(const char *name, int flags, ...) /* Attempt dup of fd from fd set */ if (strstart(name, "/dev/fdset/", &fdset_id_str)) { int64_t fdset_id; - int fd, dupfd; + int dupfd; fdset_id = qemu_parse_fdset(fdset_id_str); if (fdset_id == -1) { + error_setg(errp, "Could not parse fdset %s", name); errno = EINVAL; return -1; } - fd = monitor_fdset_get_fd(fdset_id, flags); - if (fd < 0) { - errno = -fd; - return -1; - } - - dupfd = qemu_dup_flags(fd, flags); + dupfd = monitor_fdset_dup_fd_add(fdset_id, flags); if (dupfd == -1) { - return -1; - } - - ret = monitor_fdset_dup_fd_add(fdset_id, dupfd); - if (ret == -1) { - close(dupfd); - errno = EINVAL; + error_setg_errno(errp, errno, "Could not dup FD for %s flags %x", + name, flags); return -1; } @@ -323,22 +328,61 @@ int qemu_open(const char *name, int flags, ...) } #endif - if (flags & O_CREAT) { - va_list ap; + ret = qemu_open_cloexec(name, flags, mode); - va_start(ap, flags); - mode = va_arg(ap, int); - va_end(ap); + if (ret == -1) { + const char *action = flags & O_CREAT ? "create" : "open"; +#ifdef O_DIRECT + /* Give more helpful error message for O_DIRECT */ + if (errno == EINVAL && (flags & O_DIRECT)) { + ret = open(name, flags & ~O_DIRECT, mode); + if (ret != -1) { + close(ret); + error_setg(errp, "Could not %s '%s': " + "filesystem does not support O_DIRECT", + action, name); + errno = EINVAL; /* restore first open()'s errno */ + return -1; + } + } +#endif /* O_DIRECT */ + error_setg_errno(errp, errno, "Could not %s '%s'", + action, name); } -#ifdef O_CLOEXEC - ret = open(name, flags | O_CLOEXEC, mode); -#else - ret = open(name, flags, mode); - if (ret >= 0) { - qemu_set_cloexec(ret); + return ret; +} + + +int qemu_open(const char *name, int flags, Error **errp) +{ + assert(!(flags & O_CREAT)); + + return qemu_open_internal(name, flags, 0, errp); +} + + +int qemu_create(const char *name, int flags, mode_t mode, Error **errp) +{ + assert(!(flags & O_CREAT)); + + return qemu_open_internal(name, flags | O_CREAT, mode, errp); +} + + +int qemu_open_old(const char *name, int flags, ...) +{ + va_list ap; + mode_t mode = 0; + int ret; + + va_start(ap, flags); + if (flags & O_CREAT) { + mode = va_arg(ap, int); } -#endif + va_end(ap); + + ret = qemu_open_internal(name, flags, mode, NULL); #ifdef O_DIRECT if (ret == -1 && errno == EINVAL && (flags & O_DIRECT)) { diff --git a/util/oslib-posix.c b/util/oslib-posix.c index ad8001a4ad..f5f676f079 100644 --- a/util/oslib-posix.c +++ b/util/oslib-posix.c @@ -125,7 +125,7 @@ bool qemu_write_pidfile(const char *path, Error **errp) .l_len = 0, }; - fd = qemu_open(path, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR); + fd = qemu_open_old(path, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR); if (fd == -1) { error_setg_errno(errp, errno, "Cannot open pid file"); return false; diff --git a/util/rcu.c b/util/rcu.c index 60a37f72c3..c4fefa9333 100644 --- a/util/rcu.c +++ b/util/rcu.c @@ -293,6 +293,61 @@ void call_rcu1(struct rcu_head *node, void (*func)(struct rcu_head *node)) qemu_event_set(&rcu_call_ready_event); } + +struct rcu_drain { + struct rcu_head rcu; + QemuEvent drain_complete_event; +}; + +static void drain_rcu_callback(struct rcu_head *node) +{ + struct rcu_drain *event = (struct rcu_drain *)node; + qemu_event_set(&event->drain_complete_event); +} + +/* + * This function ensures that all pending RCU callbacks + * on the current thread are done executing + + * drops big qemu lock during the wait to allow RCU thread + * to process the callbacks + * + */ + +void drain_call_rcu(void) +{ + struct rcu_drain rcu_drain; + bool locked = qemu_mutex_iothread_locked(); + + memset(&rcu_drain, 0, sizeof(struct rcu_drain)); + qemu_event_init(&rcu_drain.drain_complete_event, false); + + if (locked) { + qemu_mutex_unlock_iothread(); + } + + + /* + * RCU callbacks are invoked in the same order as in which they + * are registered, thus we can be sure that when 'drain_rcu_callback' + * is called, all RCU callbacks that were registered on this thread + * prior to calling this function are completed. + * + * Note that since we have only one global queue of the RCU callbacks, + * we also end up waiting for most of RCU callbacks that were registered + * on the other threads, but this is a side effect that shoudn't be + * assumed. + */ + + call_rcu1(&rcu_drain.rcu, drain_rcu_callback); + qemu_event_wait(&rcu_drain.drain_complete_event); + + if (locked) { + qemu_mutex_lock_iothread(); + } + +} + void rcu_register_thread(void) { assert(rcu_reader.ctr == 0); |