From: Marc-André Lureau Date: Wed, 8 Oct 2025 11:16:29 +0000 (+0400) Subject: hw/audio: look up the default bus from the device class X-Git-Tag: v10.2.0-rc1~29^2~34 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5c7b8a6d61a0af15d531f82eef8ddd97e40c1ce7;p=thirdparty%2Fqemu.git hw/audio: look up the default bus from the device class Generalize and simplify the device model creation. Signed-off-by: Marc-André Lureau Reviewed-by: Philippe Mathieu-Daudé --- diff --git a/hw/audio/soundhw.c b/hw/audio/soundhw.c index 63a6855635..29158c115c 100644 --- a/hw/audio/soundhw.c +++ b/hw/audio/soundhw.c @@ -22,6 +22,8 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" +#include "hw/qdev-core.h" +#include "monitor/qdev.h" #include "qemu/option.h" #include "qemu/help_option.h" #include "qemu/error-report.h" @@ -110,33 +112,19 @@ void select_soundhw(const char *name, const char *audiodev) void soundhw_init(void) { struct soundhw *c = selected; - ISABus *isa_bus = (ISABus *) object_resolve_path_type("", TYPE_ISA_BUS, NULL); - PCIBus *pci_bus = (PCIBus *) object_resolve_path_type("", TYPE_PCI_BUS, NULL); - BusState *bus; if (!c) { return; } - if (c->isa) { - if (!isa_bus) { - error_report("ISA bus not available for %s", c->name); - exit(1); - } - bus = BUS(isa_bus); - } else { - if (!pci_bus) { - error_report("PCI bus not available for %s", c->name); - exit(1); - } - bus = BUS(pci_bus); - } if (c->typename) { DeviceState *dev = qdev_new(c->typename); + BusState *bus = qdev_find_default_bus(DEVICE_GET_CLASS(dev), &error_fatal); qdev_prop_set_string(dev, "audiodev", audiodev_id); qdev_realize_and_unref(dev, bus, &error_fatal); } else { assert(!c->isa); + PCIBus *pci_bus = (PCIBus *) object_resolve_path_type("", TYPE_PCI_BUS, NULL); c->init_pci(pci_bus, audiodev_id); } }