qdev: make compat stuff more generic
This patch renames the compat properties into global properties and makes them more generic. The compatibility stuff is only one of multiple possible users now. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
4d6e3ac5d4
commit
458fb6792d
@ -20,7 +20,7 @@ typedef struct QEMUMachine {
|
||||
int use_scsi;
|
||||
int max_cpus;
|
||||
int is_default;
|
||||
CompatProperty *compat_props;
|
||||
GlobalProperty *compat_props;
|
||||
struct QEMUMachine *next;
|
||||
} QEMUMachine;
|
||||
|
||||
|
2
hw/pc.c
2
hw/pc.c
@ -1298,7 +1298,7 @@ static QEMUMachine pc_machine_v0_10 = {
|
||||
.desc = "Standard PC, qemu 0.10",
|
||||
.init = pc_init_pci,
|
||||
.max_cpus = 255,
|
||||
.compat_props = (CompatProperty[]) {
|
||||
.compat_props = (GlobalProperty[]) {
|
||||
{
|
||||
.driver = "virtio-blk-pci",
|
||||
.property = "class",
|
||||
|
@ -593,21 +593,27 @@ void qdev_prop_set_defaults(DeviceState *dev, Property *props)
|
||||
}
|
||||
}
|
||||
|
||||
static CompatProperty *compat_props;
|
||||
static QTAILQ_HEAD(, GlobalProperty) global_props = QTAILQ_HEAD_INITIALIZER(global_props);
|
||||
|
||||
void qdev_prop_register_compat(CompatProperty *props)
|
||||
void qdev_prop_register_global(GlobalProperty *prop)
|
||||
{
|
||||
compat_props = props;
|
||||
QTAILQ_INSERT_TAIL(&global_props, prop, next);
|
||||
}
|
||||
|
||||
void qdev_prop_set_compat(DeviceState *dev)
|
||||
void qdev_prop_register_global_list(GlobalProperty *props)
|
||||
{
|
||||
CompatProperty *prop;
|
||||
int i;
|
||||
|
||||
if (!compat_props) {
|
||||
return;
|
||||
for (i = 0; props[i].driver != NULL; i++) {
|
||||
qdev_prop_register_global(props+i);
|
||||
}
|
||||
for (prop = compat_props; prop->driver != NULL; prop++) {
|
||||
}
|
||||
|
||||
void qdev_prop_set_globals(DeviceState *dev)
|
||||
{
|
||||
GlobalProperty *prop;
|
||||
|
||||
QTAILQ_FOREACH(prop, &global_props, next) {
|
||||
if (strcmp(dev->info->name, prop->driver) != 0) {
|
||||
continue;
|
||||
}
|
||||
|
@ -103,7 +103,7 @@ DeviceState *qdev_create(BusState *bus, const char *name)
|
||||
dev->parent_bus = bus;
|
||||
qdev_prop_set_defaults(dev, dev->info->props);
|
||||
qdev_prop_set_defaults(dev, dev->parent_bus->info->props);
|
||||
qdev_prop_set_compat(dev);
|
||||
qdev_prop_set_globals(dev);
|
||||
QLIST_INSERT_HEAD(&bus->children, dev, sibling);
|
||||
if (qdev_hotplug) {
|
||||
assert(bus->allow_hotplug);
|
||||
|
10
hw/qdev.h
10
hw/qdev.h
@ -92,11 +92,12 @@ struct PropertyInfo {
|
||||
int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len);
|
||||
};
|
||||
|
||||
struct CompatProperty {
|
||||
typedef struct GlobalProperty {
|
||||
const char *driver;
|
||||
const char *property;
|
||||
const char *value;
|
||||
};
|
||||
QTAILQ_ENTRY(GlobalProperty) next;
|
||||
} GlobalProperty;
|
||||
|
||||
/*** Board API. This should go away once we have a machine config file. ***/
|
||||
|
||||
@ -256,8 +257,9 @@ void qdev_prop_set_macaddr(DeviceState *dev, const char *name, uint8_t *value);
|
||||
void qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value);
|
||||
void qdev_prop_set_defaults(DeviceState *dev, Property *props);
|
||||
|
||||
void qdev_prop_register_compat(CompatProperty *props);
|
||||
void qdev_prop_set_compat(DeviceState *dev);
|
||||
void qdev_prop_register_global(GlobalProperty *prop);
|
||||
void qdev_prop_register_global_list(GlobalProperty *props);
|
||||
void qdev_prop_set_globals(DeviceState *dev);
|
||||
|
||||
/* This is a nasty hack to allow passing a NULL bus to qdev_create. */
|
||||
extern struct BusInfo system_bus_info;
|
||||
|
2
vl.c
2
vl.c
@ -5779,7 +5779,7 @@ int main(int argc, char **argv, char **envp)
|
||||
}
|
||||
|
||||
if (machine->compat_props) {
|
||||
qdev_prop_register_compat(machine->compat_props);
|
||||
qdev_prop_register_global_list(machine->compat_props);
|
||||
}
|
||||
machine->init(ram_size, boot_devices,
|
||||
kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
|
||||
|
Loading…
Reference in New Issue
Block a user