qdev: add function qdev_set_id()
In order to have an easy way to add a new qdev with a specific id carve out the needed functionality from qdev_device_add() into a new function qdev_set_id(). Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> Signed-off-by: Stefano Stabellini <sstabellini@kernel.org>
This commit is contained in:
parent
873d57abba
commit
ce49b734b4
@ -12,5 +12,6 @@ void qmp_device_add(QDict *qdict, QObject **ret_data, Error **errp);
|
|||||||
|
|
||||||
int qdev_device_help(QemuOpts *opts);
|
int qdev_device_help(QemuOpts *opts);
|
||||||
DeviceState *qdev_device_add(QemuOpts *opts, Error **errp);
|
DeviceState *qdev_device_add(QemuOpts *opts, Error **errp);
|
||||||
|
void qdev_set_id(DeviceState *dev, const char *id);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -539,10 +539,28 @@ static BusState *qbus_find(const char *path, Error **errp)
|
|||||||
return bus;
|
return bus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void qdev_set_id(DeviceState *dev, const char *id)
|
||||||
|
{
|
||||||
|
if (id) {
|
||||||
|
dev->id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dev->id) {
|
||||||
|
object_property_add_child(qdev_get_peripheral(), dev->id,
|
||||||
|
OBJECT(dev), NULL);
|
||||||
|
} else {
|
||||||
|
static int anon_count;
|
||||||
|
gchar *name = g_strdup_printf("device[%d]", anon_count++);
|
||||||
|
object_property_add_child(qdev_get_peripheral_anon(), name,
|
||||||
|
OBJECT(dev), NULL);
|
||||||
|
g_free(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DeviceState *qdev_device_add(QemuOpts *opts, Error **errp)
|
DeviceState *qdev_device_add(QemuOpts *opts, Error **errp)
|
||||||
{
|
{
|
||||||
DeviceClass *dc;
|
DeviceClass *dc;
|
||||||
const char *driver, *path, *id;
|
const char *driver, *path;
|
||||||
DeviceState *dev;
|
DeviceState *dev;
|
||||||
BusState *bus = NULL;
|
BusState *bus = NULL;
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
@ -591,21 +609,7 @@ DeviceState *qdev_device_add(QemuOpts *opts, Error **errp)
|
|||||||
qdev_set_parent_bus(dev, bus);
|
qdev_set_parent_bus(dev, bus);
|
||||||
}
|
}
|
||||||
|
|
||||||
id = qemu_opts_id(opts);
|
qdev_set_id(dev, qemu_opts_id(opts));
|
||||||
if (id) {
|
|
||||||
dev->id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dev->id) {
|
|
||||||
object_property_add_child(qdev_get_peripheral(), dev->id,
|
|
||||||
OBJECT(dev), NULL);
|
|
||||||
} else {
|
|
||||||
static int anon_count;
|
|
||||||
gchar *name = g_strdup_printf("device[%d]", anon_count++);
|
|
||||||
object_property_add_child(qdev_get_peripheral_anon(), name,
|
|
||||||
OBJECT(dev), NULL);
|
|
||||||
g_free(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* set properties */
|
/* set properties */
|
||||||
if (qemu_opt_foreach(opts, set_property, dev, &err)) {
|
if (qemu_opt_foreach(opts, set_property, dev, &err)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user