mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 23:33:54 -06:00
qdev: Make qdev_get_prop_ptr() get Object* arg
Make the code more generic and not specific to TYPE_DEVICE. Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com> #s390 parts Acked-by: Paul Durrant <paul@xen.org> Message-Id: <20201211220529.2290218-10-ehabkost@redhat.com> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
parent
605d9fc0e3
commit
828ade86ee
8 changed files with 68 additions and 100 deletions
|
@ -38,9 +38,9 @@ void qdev_prop_allow_set_link_before_realize(const Object *obj,
|
|||
}
|
||||
}
|
||||
|
||||
void *qdev_get_prop_ptr(DeviceState *dev, Property *prop)
|
||||
void *qdev_get_prop_ptr(Object *obj, Property *prop)
|
||||
{
|
||||
void *ptr = dev;
|
||||
void *ptr = obj;
|
||||
ptr += prop->offset;
|
||||
return ptr;
|
||||
}
|
||||
|
@ -48,9 +48,8 @@ void *qdev_get_prop_ptr(DeviceState *dev, Property *prop)
|
|||
void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
int *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
int *ptr = qdev_get_prop_ptr(obj, prop);
|
||||
|
||||
visit_type_enum(v, prop->name, ptr, prop->info->enum_table, errp);
|
||||
}
|
||||
|
@ -60,7 +59,7 @@ void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
|
|||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
int *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
int *ptr = qdev_get_prop_ptr(obj, prop);
|
||||
|
||||
if (dev->realized) {
|
||||
qdev_prop_set_after_realize(dev, name, errp);
|
||||
|
@ -94,8 +93,7 @@ static uint32_t qdev_get_prop_mask(Property *prop)
|
|||
|
||||
static void bit_prop_set(Object *obj, Property *props, bool val)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
uint32_t *p = qdev_get_prop_ptr(dev, props);
|
||||
uint32_t *p = qdev_get_prop_ptr(obj, props);
|
||||
uint32_t mask = qdev_get_prop_mask(props);
|
||||
if (val) {
|
||||
*p |= mask;
|
||||
|
@ -107,9 +105,8 @@ static void bit_prop_set(Object *obj, Property *props, bool val)
|
|||
static void prop_get_bit(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint32_t *p = qdev_get_prop_ptr(dev, prop);
|
||||
uint32_t *p = qdev_get_prop_ptr(obj, prop);
|
||||
bool value = (*p & qdev_get_prop_mask(prop)) != 0;
|
||||
|
||||
visit_type_bool(v, name, &value, errp);
|
||||
|
@ -156,8 +153,7 @@ static uint64_t qdev_get_prop_mask64(Property *prop)
|
|||
|
||||
static void bit64_prop_set(Object *obj, Property *props, bool val)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
uint64_t *p = qdev_get_prop_ptr(dev, props);
|
||||
uint64_t *p = qdev_get_prop_ptr(obj, props);
|
||||
uint64_t mask = qdev_get_prop_mask64(props);
|
||||
if (val) {
|
||||
*p |= mask;
|
||||
|
@ -169,9 +165,8 @@ static void bit64_prop_set(Object *obj, Property *props, bool val)
|
|||
static void prop_get_bit64(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint64_t *p = qdev_get_prop_ptr(dev, prop);
|
||||
uint64_t *p = qdev_get_prop_ptr(obj, prop);
|
||||
bool value = (*p & qdev_get_prop_mask64(prop)) != 0;
|
||||
|
||||
visit_type_bool(v, name, &value, errp);
|
||||
|
@ -208,9 +203,8 @@ const PropertyInfo qdev_prop_bit64 = {
|
|||
static void get_bool(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
bool *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
bool *ptr = qdev_get_prop_ptr(obj, prop);
|
||||
|
||||
visit_type_bool(v, name, ptr, errp);
|
||||
}
|
||||
|
@ -220,7 +214,7 @@ static void set_bool(Object *obj, Visitor *v, const char *name, void *opaque,
|
|||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
bool *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
bool *ptr = qdev_get_prop_ptr(obj, prop);
|
||||
|
||||
if (dev->realized) {
|
||||
qdev_prop_set_after_realize(dev, name, errp);
|
||||
|
@ -242,9 +236,8 @@ const PropertyInfo qdev_prop_bool = {
|
|||
static void get_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint8_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
uint8_t *ptr = qdev_get_prop_ptr(obj, prop);
|
||||
|
||||
visit_type_uint8(v, name, ptr, errp);
|
||||
}
|
||||
|
@ -254,7 +247,7 @@ static void set_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
|
|||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint8_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
uint8_t *ptr = qdev_get_prop_ptr(obj, prop);
|
||||
|
||||
if (dev->realized) {
|
||||
qdev_prop_set_after_realize(dev, name, errp);
|
||||
|
@ -288,9 +281,8 @@ const PropertyInfo qdev_prop_uint8 = {
|
|||
void qdev_propinfo_get_uint16(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint16_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
uint16_t *ptr = qdev_get_prop_ptr(obj, prop);
|
||||
|
||||
visit_type_uint16(v, name, ptr, errp);
|
||||
}
|
||||
|
@ -300,7 +292,7 @@ static void set_uint16(Object *obj, Visitor *v, const char *name,
|
|||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint16_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
uint16_t *ptr = qdev_get_prop_ptr(obj, prop);
|
||||
|
||||
if (dev->realized) {
|
||||
qdev_prop_set_after_realize(dev, name, errp);
|
||||
|
@ -322,9 +314,8 @@ const PropertyInfo qdev_prop_uint16 = {
|
|||
static void get_uint32(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint32_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
|
||||
|
||||
visit_type_uint32(v, name, ptr, errp);
|
||||
}
|
||||
|
@ -334,7 +325,7 @@ static void set_uint32(Object *obj, Visitor *v, const char *name,
|
|||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint32_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
|
||||
|
||||
if (dev->realized) {
|
||||
qdev_prop_set_after_realize(dev, name, errp);
|
||||
|
@ -347,9 +338,8 @@ static void set_uint32(Object *obj, Visitor *v, const char *name,
|
|||
void qdev_propinfo_get_int32(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
int32_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
int32_t *ptr = qdev_get_prop_ptr(obj, prop);
|
||||
|
||||
visit_type_int32(v, name, ptr, errp);
|
||||
}
|
||||
|
@ -359,7 +349,7 @@ static void set_int32(Object *obj, Visitor *v, const char *name, void *opaque,
|
|||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
int32_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
int32_t *ptr = qdev_get_prop_ptr(obj, prop);
|
||||
|
||||
if (dev->realized) {
|
||||
qdev_prop_set_after_realize(dev, name, errp);
|
||||
|
@ -388,9 +378,8 @@ const PropertyInfo qdev_prop_int32 = {
|
|||
static void get_uint64(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint64_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
|
||||
|
||||
visit_type_uint64(v, name, ptr, errp);
|
||||
}
|
||||
|
@ -400,7 +389,7 @@ static void set_uint64(Object *obj, Visitor *v, const char *name,
|
|||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint64_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
|
||||
|
||||
if (dev->realized) {
|
||||
qdev_prop_set_after_realize(dev, name, errp);
|
||||
|
@ -413,9 +402,8 @@ static void set_uint64(Object *obj, Visitor *v, const char *name,
|
|||
static void get_int64(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
int64_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
int64_t *ptr = qdev_get_prop_ptr(obj, prop);
|
||||
|
||||
visit_type_int64(v, name, ptr, errp);
|
||||
}
|
||||
|
@ -425,7 +413,7 @@ static void set_int64(Object *obj, Visitor *v, const char *name,
|
|||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
int64_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
int64_t *ptr = qdev_get_prop_ptr(obj, prop);
|
||||
|
||||
if (dev->realized) {
|
||||
qdev_prop_set_after_realize(dev, name, errp);
|
||||
|
@ -454,15 +442,14 @@ const PropertyInfo qdev_prop_int64 = {
|
|||
static void release_string(Object *obj, const char *name, void *opaque)
|
||||
{
|
||||
Property *prop = opaque;
|
||||
g_free(*(char **)qdev_get_prop_ptr(DEVICE(obj), prop));
|
||||
g_free(*(char **)qdev_get_prop_ptr(obj, prop));
|
||||
}
|
||||
|
||||
static void get_string(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
char **ptr = qdev_get_prop_ptr(dev, prop);
|
||||
char **ptr = qdev_get_prop_ptr(obj, prop);
|
||||
|
||||
if (!*ptr) {
|
||||
char *str = (char *)"";
|
||||
|
@ -477,7 +464,7 @@ static void set_string(Object *obj, Visitor *v, const char *name,
|
|||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
char **ptr = qdev_get_prop_ptr(dev, prop);
|
||||
char **ptr = qdev_get_prop_ptr(obj, prop);
|
||||
char *str;
|
||||
|
||||
if (dev->realized) {
|
||||
|
@ -515,9 +502,8 @@ const PropertyInfo qdev_prop_on_off_auto = {
|
|||
void qdev_propinfo_get_size32(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint32_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
|
||||
uint64_t value = *ptr;
|
||||
|
||||
visit_type_size(v, name, &value, errp);
|
||||
|
@ -528,7 +514,7 @@ static void set_size32(Object *obj, Visitor *v, const char *name, void *opaque,
|
|||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint32_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
|
||||
uint64_t value;
|
||||
|
||||
if (dev->realized) {
|
||||
|
@ -563,9 +549,8 @@ const PropertyInfo qdev_prop_size32 = {
|
|||
static void get_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
QemuUUID *uuid = qdev_get_prop_ptr(dev, prop);
|
||||
QemuUUID *uuid = qdev_get_prop_ptr(obj, prop);
|
||||
char buffer[UUID_FMT_LEN + 1];
|
||||
char *p = buffer;
|
||||
|
||||
|
@ -581,7 +566,7 @@ static void set_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
|
|||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
QemuUUID *uuid = qdev_get_prop_ptr(dev, prop);
|
||||
QemuUUID *uuid = qdev_get_prop_ptr(obj, prop);
|
||||
char *str;
|
||||
|
||||
if (dev->realized) {
|
||||
|
@ -653,7 +638,7 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
|
|||
*/
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint32_t *alenptr = qdev_get_prop_ptr(dev, prop);
|
||||
uint32_t *alenptr = qdev_get_prop_ptr(obj, prop);
|
||||
void **arrayptr = (void *)dev + prop->arrayoffset;
|
||||
void *eltptr;
|
||||
const char *arrayname;
|
||||
|
@ -699,7 +684,7 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
|
|||
* being inside the device struct.
|
||||
*/
|
||||
arrayprop->prop.offset = eltptr - (void *)dev;
|
||||
assert(qdev_get_prop_ptr(dev, &arrayprop->prop) == eltptr);
|
||||
assert(qdev_get_prop_ptr(obj, &arrayprop->prop) == eltptr);
|
||||
object_property_add(obj, propname,
|
||||
arrayprop->prop.info->name,
|
||||
arrayprop->prop.info->get,
|
||||
|
@ -893,9 +878,8 @@ void qdev_prop_set_globals(DeviceState *dev)
|
|||
static void get_size(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint64_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
|
||||
|
||||
visit_type_size(v, name, ptr, errp);
|
||||
}
|
||||
|
@ -905,7 +889,7 @@ static void set_size(Object *obj, Visitor *v, const char *name, void *opaque,
|
|||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint64_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
|
||||
|
||||
if (dev->realized) {
|
||||
qdev_prop_set_after_realize(dev, name, errp);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue