mirror of https://github.com/xqemu/xqemu.git
qdev: remove PropertyInfo.qtype field
Remove dependency on qapi qtype, replace a field by a few PropertyInfo
callbacks to set the default value type (introduced in commit 4f2d3d7
).
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20170607163635.17635-2-marcandre.lureau@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
edf8bc9842
commit
a2740ad584
|
@ -69,6 +69,12 @@ static void set_enum(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
visit_type_enum(v, prop->name, ptr, prop->info->enum_table, errp);
|
visit_type_enum(v, prop->name, ptr, prop->info->enum_table, errp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void set_default_value_enum(Object *obj, const Property *prop)
|
||||||
|
{
|
||||||
|
object_property_set_str(obj, prop->info->enum_table[prop->defval],
|
||||||
|
prop->name, &error_abort);
|
||||||
|
}
|
||||||
|
|
||||||
/* Bit */
|
/* Bit */
|
||||||
|
|
||||||
static uint32_t qdev_get_prop_mask(Property *prop)
|
static uint32_t qdev_get_prop_mask(Property *prop)
|
||||||
|
@ -120,11 +126,17 @@ static void prop_set_bit(Object *obj, Visitor *v, const char *name,
|
||||||
bit_prop_set(dev, prop, value);
|
bit_prop_set(dev, prop, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void set_default_value_bool(Object *obj, const Property *prop)
|
||||||
|
{
|
||||||
|
object_property_set_bool(obj, prop->defval, prop->name, &error_abort);
|
||||||
|
}
|
||||||
|
|
||||||
PropertyInfo qdev_prop_bit = {
|
PropertyInfo qdev_prop_bit = {
|
||||||
.name = "bool",
|
.name = "bool",
|
||||||
.description = "on/off",
|
.description = "on/off",
|
||||||
.get = prop_get_bit,
|
.get = prop_get_bit,
|
||||||
.set = prop_set_bit,
|
.set = prop_set_bit,
|
||||||
|
.set_default_value = set_default_value_bool,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Bit64 */
|
/* Bit64 */
|
||||||
|
@ -183,6 +195,7 @@ PropertyInfo qdev_prop_bit64 = {
|
||||||
.description = "on/off",
|
.description = "on/off",
|
||||||
.get = prop_get_bit64,
|
.get = prop_get_bit64,
|
||||||
.set = prop_set_bit64,
|
.set = prop_set_bit64,
|
||||||
|
.set_default_value = set_default_value_bool,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* --- bool --- */
|
/* --- bool --- */
|
||||||
|
@ -216,6 +229,7 @@ PropertyInfo qdev_prop_bool = {
|
||||||
.name = "bool",
|
.name = "bool",
|
||||||
.get = get_bool,
|
.get = get_bool,
|
||||||
.set = set_bool,
|
.set = set_bool,
|
||||||
|
.set_default_value = set_default_value_bool,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* --- 8bit integer --- */
|
/* --- 8bit integer --- */
|
||||||
|
@ -245,10 +259,16 @@ static void set_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
visit_type_uint8(v, name, ptr, errp);
|
visit_type_uint8(v, name, ptr, errp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void set_default_value_int(Object *obj, const Property *prop)
|
||||||
|
{
|
||||||
|
object_property_set_int(obj, prop->defval, prop->name, &error_abort);
|
||||||
|
}
|
||||||
|
|
||||||
PropertyInfo qdev_prop_uint8 = {
|
PropertyInfo qdev_prop_uint8 = {
|
||||||
.name = "uint8",
|
.name = "uint8",
|
||||||
.get = get_uint8,
|
.get = get_uint8,
|
||||||
.set = set_uint8,
|
.set = set_uint8,
|
||||||
|
.set_default_value = set_default_value_int,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* --- 16bit integer --- */
|
/* --- 16bit integer --- */
|
||||||
|
@ -282,6 +302,7 @@ PropertyInfo qdev_prop_uint16 = {
|
||||||
.name = "uint16",
|
.name = "uint16",
|
||||||
.get = get_uint16,
|
.get = get_uint16,
|
||||||
.set = set_uint16,
|
.set = set_uint16,
|
||||||
|
.set_default_value = set_default_value_int,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* --- 32bit integer --- */
|
/* --- 32bit integer --- */
|
||||||
|
@ -340,12 +361,14 @@ PropertyInfo qdev_prop_uint32 = {
|
||||||
.name = "uint32",
|
.name = "uint32",
|
||||||
.get = get_uint32,
|
.get = get_uint32,
|
||||||
.set = set_uint32,
|
.set = set_uint32,
|
||||||
|
.set_default_value = set_default_value_int,
|
||||||
};
|
};
|
||||||
|
|
||||||
PropertyInfo qdev_prop_int32 = {
|
PropertyInfo qdev_prop_int32 = {
|
||||||
.name = "int32",
|
.name = "int32",
|
||||||
.get = get_int32,
|
.get = get_int32,
|
||||||
.set = set_int32,
|
.set = set_int32,
|
||||||
|
.set_default_value = set_default_value_int,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* --- 64bit integer --- */
|
/* --- 64bit integer --- */
|
||||||
|
@ -379,6 +402,7 @@ PropertyInfo qdev_prop_uint64 = {
|
||||||
.name = "uint64",
|
.name = "uint64",
|
||||||
.get = get_uint64,
|
.get = get_uint64,
|
||||||
.set = set_uint64,
|
.set = set_uint64,
|
||||||
|
.set_default_value = set_default_value_int,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* --- string --- */
|
/* --- string --- */
|
||||||
|
@ -526,6 +550,7 @@ PropertyInfo qdev_prop_on_off_auto = {
|
||||||
.enum_table = OnOffAuto_lookup,
|
.enum_table = OnOffAuto_lookup,
|
||||||
.get = get_enum,
|
.get = get_enum,
|
||||||
.set = set_enum,
|
.set = set_enum,
|
||||||
|
.set_default_value = set_default_value_enum,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* --- lost tick policy --- */
|
/* --- lost tick policy --- */
|
||||||
|
@ -537,6 +562,7 @@ PropertyInfo qdev_prop_losttickpolicy = {
|
||||||
.enum_table = LostTickPolicy_lookup,
|
.enum_table = LostTickPolicy_lookup,
|
||||||
.get = get_enum,
|
.get = get_enum,
|
||||||
.set = set_enum,
|
.set = set_enum,
|
||||||
|
.set_default_value = set_default_value_enum,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* --- Block device error handling policy --- */
|
/* --- Block device error handling policy --- */
|
||||||
|
@ -550,6 +576,7 @@ PropertyInfo qdev_prop_blockdev_on_error = {
|
||||||
.enum_table = BlockdevOnError_lookup,
|
.enum_table = BlockdevOnError_lookup,
|
||||||
.get = get_enum,
|
.get = get_enum,
|
||||||
.set = set_enum,
|
.set = set_enum,
|
||||||
|
.set_default_value = set_default_value_enum,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* --- BIOS CHS translation */
|
/* --- BIOS CHS translation */
|
||||||
|
@ -563,6 +590,7 @@ PropertyInfo qdev_prop_bios_chs_trans = {
|
||||||
.enum_table = BiosAtaTranslation_lookup,
|
.enum_table = BiosAtaTranslation_lookup,
|
||||||
.get = get_enum,
|
.get = get_enum,
|
||||||
.set = set_enum,
|
.set = set_enum,
|
||||||
|
.set_default_value = set_default_value_enum,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* --- FDC default drive types */
|
/* --- FDC default drive types */
|
||||||
|
@ -573,7 +601,8 @@ PropertyInfo qdev_prop_fdc_drive_type = {
|
||||||
"144/288/120/none/auto",
|
"144/288/120/none/auto",
|
||||||
.enum_table = FloppyDriveType_lookup,
|
.enum_table = FloppyDriveType_lookup,
|
||||||
.get = get_enum,
|
.get = get_enum,
|
||||||
.set = set_enum
|
.set = set_enum,
|
||||||
|
.set_default_value = set_default_value_enum,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* --- pci address --- */
|
/* --- pci address --- */
|
||||||
|
@ -648,6 +677,7 @@ PropertyInfo qdev_prop_pci_devfn = {
|
||||||
.print = print_pci_devfn,
|
.print = print_pci_devfn,
|
||||||
.get = get_int32,
|
.get = get_int32,
|
||||||
.set = set_pci_devfn,
|
.set = set_pci_devfn,
|
||||||
|
.set_default_value = set_default_value_int,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* --- blocksize --- */
|
/* --- blocksize --- */
|
||||||
|
@ -695,6 +725,7 @@ PropertyInfo qdev_prop_blocksize = {
|
||||||
.description = "A power of two between 512 and 32768",
|
.description = "A power of two between 512 and 32768",
|
||||||
.get = get_uint16,
|
.get = get_uint16,
|
||||||
.set = set_blocksize,
|
.set = set_blocksize,
|
||||||
|
.set_default_value = set_default_value_int,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* --- pci host address --- */
|
/* --- pci host address --- */
|
||||||
|
@ -917,6 +948,7 @@ PropertyInfo qdev_prop_arraylen = {
|
||||||
.name = "uint32",
|
.name = "uint32",
|
||||||
.get = get_uint32,
|
.get = get_uint32,
|
||||||
.set = set_prop_arraylen,
|
.set = set_prop_arraylen,
|
||||||
|
.set_default_value = set_default_value_int,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* --- public helpers --- */
|
/* --- public helpers --- */
|
||||||
|
@ -1153,4 +1185,5 @@ PropertyInfo qdev_prop_size = {
|
||||||
.name = "size",
|
.name = "size",
|
||||||
.get = get_size,
|
.get = get_size,
|
||||||
.set = set_size,
|
.set = set_size,
|
||||||
|
.set_default_value = set_default_value_int,
|
||||||
};
|
};
|
||||||
|
|
|
@ -793,17 +793,8 @@ void qdev_property_add_static(DeviceState *dev, Property *prop,
|
||||||
prop->info->description,
|
prop->info->description,
|
||||||
&error_abort);
|
&error_abort);
|
||||||
|
|
||||||
if (prop->qtype == QTYPE_NONE) {
|
if (prop->info->set_default_value) {
|
||||||
return;
|
prop->info->set_default_value(obj, prop);
|
||||||
}
|
|
||||||
|
|
||||||
if (prop->qtype == QTYPE_QBOOL) {
|
|
||||||
object_property_set_bool(obj, prop->defval, prop->name, &error_abort);
|
|
||||||
} else if (prop->info->enum_table) {
|
|
||||||
object_property_set_str(obj, prop->info->enum_table[prop->defval],
|
|
||||||
prop->name, &error_abort);
|
|
||||||
} else if (prop->qtype == QTYPE_QINT) {
|
|
||||||
object_property_set_int(obj, prop->defval, prop->name, &error_abort);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -226,7 +226,6 @@ struct Property {
|
||||||
PropertyInfo *info;
|
PropertyInfo *info;
|
||||||
ptrdiff_t offset;
|
ptrdiff_t offset;
|
||||||
uint8_t bitnr;
|
uint8_t bitnr;
|
||||||
QType qtype;
|
|
||||||
int64_t defval;
|
int64_t defval;
|
||||||
int arrayoffset;
|
int arrayoffset;
|
||||||
PropertyInfo *arrayinfo;
|
PropertyInfo *arrayinfo;
|
||||||
|
@ -238,6 +237,7 @@ struct PropertyInfo {
|
||||||
const char *description;
|
const char *description;
|
||||||
const char * const *enum_table;
|
const char * const *enum_table;
|
||||||
int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len);
|
int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len);
|
||||||
|
void (*set_default_value)(Object *obj, const Property *prop);
|
||||||
ObjectPropertyAccessor *get;
|
ObjectPropertyAccessor *get;
|
||||||
ObjectPropertyAccessor *set;
|
ObjectPropertyAccessor *set;
|
||||||
ObjectPropertyRelease *release;
|
ObjectPropertyRelease *release;
|
||||||
|
|
|
@ -42,7 +42,6 @@ extern PropertyInfo qdev_prop_arraylen;
|
||||||
.info = &(_prop), \
|
.info = &(_prop), \
|
||||||
.offset = offsetof(_state, _field) \
|
.offset = offsetof(_state, _field) \
|
||||||
+ type_check(_type,typeof_field(_state, _field)), \
|
+ type_check(_type,typeof_field(_state, _field)), \
|
||||||
.qtype = QTYPE_QINT, \
|
|
||||||
.defval = (_type)_defval, \
|
.defval = (_type)_defval, \
|
||||||
}
|
}
|
||||||
#define DEFINE_PROP_BIT(_name, _state, _field, _bit, _defval) { \
|
#define DEFINE_PROP_BIT(_name, _state, _field, _bit, _defval) { \
|
||||||
|
@ -51,7 +50,6 @@ extern PropertyInfo qdev_prop_arraylen;
|
||||||
.bitnr = (_bit), \
|
.bitnr = (_bit), \
|
||||||
.offset = offsetof(_state, _field) \
|
.offset = offsetof(_state, _field) \
|
||||||
+ type_check(uint32_t,typeof_field(_state, _field)), \
|
+ type_check(uint32_t,typeof_field(_state, _field)), \
|
||||||
.qtype = QTYPE_QBOOL, \
|
|
||||||
.defval = (bool)_defval, \
|
.defval = (bool)_defval, \
|
||||||
}
|
}
|
||||||
#define DEFINE_PROP_BIT64(_name, _state, _field, _bit, _defval) { \
|
#define DEFINE_PROP_BIT64(_name, _state, _field, _bit, _defval) { \
|
||||||
|
@ -60,7 +58,6 @@ extern PropertyInfo qdev_prop_arraylen;
|
||||||
.bitnr = (_bit), \
|
.bitnr = (_bit), \
|
||||||
.offset = offsetof(_state, _field) \
|
.offset = offsetof(_state, _field) \
|
||||||
+ type_check(uint64_t, typeof_field(_state, _field)), \
|
+ type_check(uint64_t, typeof_field(_state, _field)), \
|
||||||
.qtype = QTYPE_QBOOL, \
|
|
||||||
.defval = (bool)_defval, \
|
.defval = (bool)_defval, \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,7 +66,6 @@ extern PropertyInfo qdev_prop_arraylen;
|
||||||
.info = &(qdev_prop_bool), \
|
.info = &(qdev_prop_bool), \
|
||||||
.offset = offsetof(_state, _field) \
|
.offset = offsetof(_state, _field) \
|
||||||
+ type_check(bool, typeof_field(_state, _field)), \
|
+ type_check(bool, typeof_field(_state, _field)), \
|
||||||
.qtype = QTYPE_QBOOL, \
|
|
||||||
.defval = (bool)_defval, \
|
.defval = (bool)_defval, \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,7 +101,6 @@ extern PropertyInfo qdev_prop_arraylen;
|
||||||
.info = &(qdev_prop_arraylen), \
|
.info = &(qdev_prop_arraylen), \
|
||||||
.offset = offsetof(_state, _field) \
|
.offset = offsetof(_state, _field) \
|
||||||
+ type_check(uint32_t, typeof_field(_state, _field)), \
|
+ type_check(uint32_t, typeof_field(_state, _field)), \
|
||||||
.qtype = QTYPE_QINT, \
|
|
||||||
.arrayinfo = &(_arrayprop), \
|
.arrayinfo = &(_arrayprop), \
|
||||||
.arrayfieldsize = sizeof(_arraytype), \
|
.arrayfieldsize = sizeof(_arraytype), \
|
||||||
.arrayoffset = offsetof(_state, _arrayfield), \
|
.arrayoffset = offsetof(_state, _arrayfield), \
|
||||||
|
|
Loading…
Reference in New Issue