qdev: add qdev_find_default_bus()
This helper is used next by -audio code. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
This commit is contained in:
parent
e090e0312d
commit
faa5c9ac3f
2 changed files with 24 additions and 4 deletions
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef MONITOR_QDEV_H
|
||||
#define MONITOR_QDEV_H
|
||||
|
||||
#include "hw/qdev-core.h"
|
||||
|
||||
/*** monitor commands ***/
|
||||
|
||||
void hmp_info_qtree(Monitor *mon, const QDict *qdict);
|
||||
|
|
@ -11,6 +13,7 @@ int qdev_device_help(QemuOpts *opts);
|
|||
DeviceState *qdev_device_add(QemuOpts *opts, Error **errp);
|
||||
DeviceState *qdev_device_add_from_qdict(const QDict *opts,
|
||||
bool from_json, Error **errp);
|
||||
BusState *qdev_find_default_bus(DeviceClass *dc, Error **errp);
|
||||
|
||||
/**
|
||||
* qdev_set_id: parent the device and set its id if provided.
|
||||
|
|
|
|||
|
|
@ -621,6 +621,25 @@ const char *qdev_set_id(DeviceState *dev, char *id, Error **errp)
|
|||
return prop->name;
|
||||
}
|
||||
|
||||
BusState *qdev_find_default_bus(DeviceClass *dc, Error **errp)
|
||||
{
|
||||
BusState *bus = NULL;
|
||||
|
||||
assert(dc->bus_type != NULL);
|
||||
bus = qbus_find_recursive(sysbus_get_default(), NULL, dc->bus_type);
|
||||
if (!bus) {
|
||||
error_setg(errp, "No '%s' bus found for device '%s'",
|
||||
dc->bus_type, object_class_get_name(OBJECT_CLASS(dc)));
|
||||
return NULL;
|
||||
}
|
||||
if (qbus_is_full(bus)) {
|
||||
error_setg(errp, "A '%s' bus was found but is full", dc->bus_type);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return bus;
|
||||
}
|
||||
|
||||
DeviceState *qdev_device_add_from_qdict(const QDict *opts,
|
||||
bool from_json, Error **errp)
|
||||
{
|
||||
|
|
@ -657,10 +676,8 @@ DeviceState *qdev_device_add_from_qdict(const QDict *opts,
|
|||
return NULL;
|
||||
}
|
||||
} else if (dc->bus_type != NULL) {
|
||||
bus = qbus_find_recursive(sysbus_get_default(), NULL, dc->bus_type);
|
||||
if (!bus || qbus_is_full(bus)) {
|
||||
error_setg(errp, "No '%s' bus found for device '%s'",
|
||||
dc->bus_type, driver);
|
||||
bus = qdev_find_default_bus(dc, errp);
|
||||
if (!bus) {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue