Message ID | 1334179842-6061-19-git-send-email-pbonzini@redhat.com |
---|---|
State | New |
Headers | show |
On Thu, Apr 12, 2012 at 5:30 AM, Paolo Bonzini <pbonzini@redhat.com> wrote: > The property machinery uses DeviceState arguments in a few places. > Replace this with Object so that we can push properties up. > > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > hw/qdev-addr.c | 19 +++--- > hw/qdev-properties.c | 173 +++++++++++++++++++++----------------------------- > hw/qdev.c | 8 +-- > hw/qdev.h | 10 +-- > 4 files changed, 90 insertions(+), 120 deletions(-) > > diff --git a/hw/qdev-addr.c b/hw/qdev-addr.c > index a3796bd..99ca116 100644 > --- a/hw/qdev-addr.c > +++ b/hw/qdev-addr.c > @@ -5,26 +5,25 @@ > > /* --- target physical address --- */ > > -static int parse_taddr(DeviceState *dev, Property *prop, const char *str) > +static int parse_taddr(Object *obj, Property *prop, const char *str) > { > - target_phys_addr_t *ptr = qdev_get_prop_ptr(dev, prop); > + target_phys_addr_t *ptr = object_get_prop_ptr(obj, prop); > > *ptr = strtoull(str, NULL, 16); > return 0; > } > > -static int print_taddr(DeviceState *dev, Property *prop, char *dest, size_t len) > +static int print_taddr(Object *obj, Property *prop, char *dest, size_t len) > { > - target_phys_addr_t *ptr = qdev_get_prop_ptr(dev, prop); > + target_phys_addr_t *ptr = object_get_prop_ptr(obj, prop); > return snprintf(dest, len, "0x" TARGET_FMT_plx, *ptr); > } > > static void get_taddr(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - target_phys_addr_t *ptr = qdev_get_prop_ptr(dev, prop); > + target_phys_addr_t *ptr = object_get_prop_ptr(obj, prop); > int64_t value; > > value = *ptr; > @@ -34,9 +33,8 @@ static void get_taddr(Object *obj, Visitor *v, void *opaque, > static void set_taddr(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - target_phys_addr_t *ptr = qdev_get_prop_ptr(dev, prop); > + target_phys_addr_t *ptr = object_get_prop_ptr(obj, prop); > Error *local_err = NULL; > int64_t value; > > @@ -53,9 +51,8 @@ static void set_taddr(Object *obj, Visitor *v, void *opaque, > if ((uint64_t)value <= (uint64_t) ~(target_phys_addr_t)0) { > *ptr = value; > } else { > - error_set(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE, > - dev->id?:"", name, value, (uint64_t) 0, > - (uint64_t) ~(target_phys_addr_t)0); > + error_set(errp, QERR_INVALID_PARAMETER_VALUE, > + name, "target_phys_addr_t"); > } > } > > diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c > index 282cf68..59b9615 100644 > --- a/hw/qdev-properties.c > +++ b/hw/qdev-properties.c > @@ -3,23 +3,23 @@ > #include "qerror.h" > #include "blockdev.h" > > -void *qdev_get_prop_ptr(DeviceState *dev, Property *prop) > +void *object_get_prop_ptr(Object *obj, Property *prop) > { > - void *ptr = dev; > + void *ptr = obj; > ptr += prop->offset; > return ptr; > } > > -static uint32_t qdev_get_prop_mask(Property *prop) > +static uint32_t get_prop_mask(Property *prop) > { > assert(prop->info == &qdev_prop_bit); > return 0x1 << prop->bitnr; > } > > -static void bit_prop_set(DeviceState *dev, Property *props, bool val) > +static void bit_prop_set(Object *obj, Property *props, bool val) > { > - uint32_t *p = qdev_get_prop_ptr(dev, props); > - uint32_t mask = qdev_get_prop_mask(props); > + uint32_t *p = object_get_prop_ptr(obj, props); > + uint32_t mask = get_prop_mask(props); > if (val) > *p |= mask; > else > @@ -28,19 +28,18 @@ static void bit_prop_set(DeviceState *dev, Property *props, bool val) > > /* Bit */ > > -static int print_bit(DeviceState *dev, Property *prop, char *dest, size_t len) > +static int print_bit(Object *obj, Property *prop, char *dest, size_t len) > { > - uint32_t *p = qdev_get_prop_ptr(dev, prop); > - return snprintf(dest, len, (*p & qdev_get_prop_mask(prop)) ? "on" : "off"); > + uint32_t *p = object_get_prop_ptr(obj, prop); > + return snprintf(dest, len, (*p & get_prop_mask(prop)) ? "on" : "off"); > } > > static void get_bit(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - uint32_t *p = qdev_get_prop_ptr(dev, prop); > - bool value = (*p & qdev_get_prop_mask(prop)) != 0; > + uint32_t *p = object_get_prop_ptr(obj, prop); > + bool value = (*p & get_prop_mask(prop)) != 0; > > visit_type_bool(v, &value, name, errp); > } > @@ -48,7 +47,6 @@ static void get_bit(Object *obj, Visitor *v, void *opaque, > static void set_bit(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > Error *local_err = NULL; > bool value; > @@ -63,7 +61,7 @@ static void set_bit(Object *obj, Visitor *v, void *opaque, > error_propagate(errp, local_err); > return; > } > - bit_prop_set(dev, prop, value); > + bit_prop_set(obj, prop, value); > } > > PropertyInfo qdev_prop_bit = { > @@ -79,9 +77,8 @@ PropertyInfo qdev_prop_bit = { > static void get_uint8(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - uint8_t *ptr = qdev_get_prop_ptr(dev, prop); > + uint8_t *ptr = object_get_prop_ptr(obj, prop); > > visit_type_uint8(v, ptr, name, errp); > } > @@ -89,9 +86,8 @@ static void get_uint8(Object *obj, Visitor *v, void *opaque, > static void set_uint8(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - uint8_t *ptr = qdev_get_prop_ptr(dev, prop); > + uint8_t *ptr = object_get_prop_ptr(obj, prop); > > if (object_is_realized(obj)) { > error_set(errp, QERR_PERMISSION_DENIED); > @@ -109,9 +105,9 @@ PropertyInfo qdev_prop_uint8 = { > > /* --- 8bit hex value --- */ > > -static int parse_hex8(DeviceState *dev, Property *prop, const char *str) > +static int parse_hex8(Object *obj, Property *prop, const char *str) > { > - uint8_t *ptr = qdev_get_prop_ptr(dev, prop); > + uint8_t *ptr = object_get_prop_ptr(obj, prop); > char *end; > > if (str[0] != '0' || str[1] != 'x') { > @@ -126,9 +122,9 @@ static int parse_hex8(DeviceState *dev, Property *prop, const char *str) > return 0; > } > > -static int print_hex8(DeviceState *dev, Property *prop, char *dest, size_t len) > +static int print_hex8(Object *obj, Property *prop, char *dest, size_t len) > { > - uint8_t *ptr = qdev_get_prop_ptr(dev, prop); > + uint8_t *ptr = object_get_prop_ptr(obj, prop); > return snprintf(dest, len, "0x%" PRIx8, *ptr); > } > > @@ -146,9 +142,8 @@ PropertyInfo qdev_prop_hex8 = { > static void get_uint16(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - uint16_t *ptr = qdev_get_prop_ptr(dev, prop); > + uint16_t *ptr = object_get_prop_ptr(obj, prop); > > visit_type_uint16(v, ptr, name, errp); > } > @@ -156,9 +151,8 @@ static void get_uint16(Object *obj, Visitor *v, void *opaque, > static void set_uint16(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - uint16_t *ptr = qdev_get_prop_ptr(dev, prop); > + uint16_t *ptr = object_get_prop_ptr(obj, prop); > > if (object_is_realized(obj)) { > error_set(errp, QERR_PERMISSION_DENIED); > @@ -179,9 +173,8 @@ PropertyInfo qdev_prop_uint16 = { > static void get_uint32(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - uint32_t *ptr = qdev_get_prop_ptr(dev, prop); > + uint32_t *ptr = object_get_prop_ptr(obj, prop); > > visit_type_uint32(v, ptr, name, errp); > } > @@ -189,9 +182,8 @@ static void get_uint32(Object *obj, Visitor *v, void *opaque, > static void set_uint32(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - uint32_t *ptr = qdev_get_prop_ptr(dev, prop); > + uint32_t *ptr = object_get_prop_ptr(obj, prop); > > if (object_is_realized(obj)) { > error_set(errp, QERR_PERMISSION_DENIED); > @@ -204,9 +196,8 @@ static void set_uint32(Object *obj, Visitor *v, void *opaque, > static void get_int32(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - int32_t *ptr = qdev_get_prop_ptr(dev, prop); > + int32_t *ptr = object_get_prop_ptr(obj, prop); > > visit_type_int32(v, ptr, name, errp); > } > @@ -214,9 +205,8 @@ static void get_int32(Object *obj, Visitor *v, void *opaque, > static void set_int32(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - int32_t *ptr = qdev_get_prop_ptr(dev, prop); > + int32_t *ptr = object_get_prop_ptr(obj, prop); > > if (object_is_realized(obj)) { > error_set(errp, QERR_PERMISSION_DENIED); > @@ -240,9 +230,9 @@ PropertyInfo qdev_prop_int32 = { > > /* --- 32bit hex value --- */ > > -static int parse_hex32(DeviceState *dev, Property *prop, const char *str) > +static int parse_hex32(Object *obj, Property *prop, const char *str) > { > - uint32_t *ptr = qdev_get_prop_ptr(dev, prop); > + uint32_t *ptr = object_get_prop_ptr(obj, prop); > char *end; > > if (str[0] != '0' || str[1] != 'x') { > @@ -257,9 +247,9 @@ static int parse_hex32(DeviceState *dev, Property *prop, const char *str) > return 0; > } > > -static int print_hex32(DeviceState *dev, Property *prop, char *dest, size_t len) > +static int print_hex32(Object *obj, Property *prop, char *dest, size_t len) > { > - uint32_t *ptr = qdev_get_prop_ptr(dev, prop); > + uint32_t *ptr = object_get_prop_ptr(obj, prop); > return snprintf(dest, len, "0x%" PRIx32, *ptr); > } > > @@ -277,9 +267,8 @@ PropertyInfo qdev_prop_hex32 = { > static void get_uint64(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - uint64_t *ptr = qdev_get_prop_ptr(dev, prop); > + uint64_t *ptr = object_get_prop_ptr(obj, prop); > > visit_type_uint64(v, ptr, name, errp); > } > @@ -287,9 +276,8 @@ static void get_uint64(Object *obj, Visitor *v, void *opaque, > static void set_uint64(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - uint64_t *ptr = qdev_get_prop_ptr(dev, prop); > + uint64_t *ptr = object_get_prop_ptr(obj, prop); > > if (object_is_realized(obj)) { > error_set(errp, QERR_PERMISSION_DENIED); > @@ -307,9 +295,9 @@ PropertyInfo qdev_prop_uint64 = { > > /* --- 64bit hex value --- */ > > -static int parse_hex64(DeviceState *dev, Property *prop, const char *str) > +static int parse_hex64(Object *obj, Property *prop, const char *str) > { > - uint64_t *ptr = qdev_get_prop_ptr(dev, prop); > + uint64_t *ptr = object_get_prop_ptr(obj, prop); > char *end; > > if (str[0] != '0' || str[1] != 'x') { > @@ -324,9 +312,9 @@ static int parse_hex64(DeviceState *dev, Property *prop, const char *str) > return 0; > } > > -static int print_hex64(DeviceState *dev, Property *prop, char *dest, size_t len) > +static int print_hex64(Object *obj, Property *prop, char *dest, size_t len) > { > - uint64_t *ptr = qdev_get_prop_ptr(dev, prop); > + uint64_t *ptr = object_get_prop_ptr(obj, prop); > return snprintf(dest, len, "0x%" PRIx64, *ptr); > } > > @@ -344,12 +332,12 @@ PropertyInfo qdev_prop_hex64 = { > 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 **)object_get_prop_ptr(obj, prop)); > } > > -static int print_string(DeviceState *dev, Property *prop, char *dest, size_t len) > +static int print_string(Object *obj, Property *prop, char *dest, size_t len) > { > - char **ptr = qdev_get_prop_ptr(dev, prop); > + char **ptr = object_get_prop_ptr(obj, prop); > if (!*ptr) > return snprintf(dest, len, "<null>"); > return snprintf(dest, len, "\"%s\"", *ptr); > @@ -358,9 +346,8 @@ static int print_string(DeviceState *dev, Property *prop, char *dest, size_t len > static void get_string(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - char **ptr = qdev_get_prop_ptr(dev, prop); > + char **ptr = object_get_prop_ptr(obj, prop); > > if (!*ptr) { > char *str = (char *)""; > @@ -373,9 +360,8 @@ static void get_string(Object *obj, Visitor *v, void *opaque, > static void set_string(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - char **ptr = qdev_get_prop_ptr(dev, prop); > + char **ptr = object_get_prop_ptr(obj, prop); > Error *local_err = NULL; > char *str; > > @@ -405,14 +391,14 @@ PropertyInfo qdev_prop_string = { > > /* --- drive --- */ > > -static int parse_drive(DeviceState *dev, const char *str, void **ptr) > +static int parse_drive(Object *obj, const char *str, void **ptr) > { > BlockDriverState *bs; > > bs = bdrv_find(str); > if (bs == NULL) > return -ENOENT; > - if (bdrv_attach_dev(bs, dev) < 0) > + if (bdrv_attach_dev(bs, obj) < 0) > return -EEXIST; > *ptr = bs; > return 0; > @@ -420,12 +406,11 @@ static int parse_drive(DeviceState *dev, const char *str, void **ptr) > > static void release_drive(Object *obj, const char *name, void *opaque) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - BlockDriverState **ptr = qdev_get_prop_ptr(dev, prop); > + BlockDriverState **ptr = object_get_prop_ptr(obj, prop); > > if (*ptr) { > - bdrv_detach_dev(*ptr, dev); > + bdrv_detach_dev(*ptr, obj); > blockdev_auto_del(*ptr); > } > } > @@ -439,8 +424,7 @@ static void get_pointer(Object *obj, Visitor *v, Property *prop, > const char *(*print)(void *ptr), > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > - void **ptr = qdev_get_prop_ptr(dev, prop); > + void **ptr = object_get_prop_ptr(obj, prop); > char *p; > > p = (char *) (*ptr ? print(*ptr) : ""); > @@ -448,12 +432,11 @@ static void get_pointer(Object *obj, Visitor *v, Property *prop, > } > > static void set_pointer(Object *obj, Visitor *v, Property *prop, > - int (*parse)(DeviceState *dev, const char *str, void **ptr), > + int (*parse)(Object *obj, const char *str, void **ptr), > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Error *local_err = NULL; > - void **ptr = qdev_get_prop_ptr(dev, prop); > + void **ptr = object_get_prop_ptr(obj, prop); > char *str; > int ret; > > @@ -472,8 +455,8 @@ static void set_pointer(Object *obj, Visitor *v, Property *prop, > *ptr = NULL; > return; > } > - ret = parse(dev, str, ptr); > - error_set_from_qdev_prop_error(errp, ret, dev, prop, str); > + ret = parse(obj, str, ptr); > + error_set_from_prop_error(errp, ret, obj, prop, str); > g_free(str); > } > > @@ -498,7 +481,7 @@ PropertyInfo qdev_prop_drive = { > > /* --- character device --- */ > > -static int parse_chr(DeviceState *dev, const char *str, void **ptr) > +static int parse_chr(Object *obj, const char *str, void **ptr) > { > CharDriverState *chr = qemu_chr_find(str); > if (chr == NULL) { > @@ -514,9 +497,8 @@ static int parse_chr(DeviceState *dev, const char *str, void **ptr) > > static void release_chr(Object *obj, const char *name, void *opaque) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - CharDriverState **ptr = qdev_get_prop_ptr(dev, prop); > + CharDriverState **ptr = object_get_prop_ptr(obj, prop); > > if (*ptr) { > qemu_chr_add_handlers(*ptr, NULL, NULL, NULL, NULL); > @@ -552,7 +534,7 @@ PropertyInfo qdev_prop_chr = { > > /* --- netdev device --- */ > > -static int parse_netdev(DeviceState *dev, const char *str, void **ptr) > +static int parse_netdev(Object *obj, const char *str, void **ptr) > { > VLANClientState *netdev = qemu_find_netdev(str); > > @@ -593,9 +575,9 @@ PropertyInfo qdev_prop_netdev = { > > /* --- vlan --- */ > > -static int print_vlan(DeviceState *dev, Property *prop, char *dest, size_t len) > +static int print_vlan(Object *obj, Property *prop, char *dest, size_t len) > { > - VLANState **ptr = qdev_get_prop_ptr(dev, prop); > + VLANState **ptr = object_get_prop_ptr(obj, prop); > > if (*ptr) { > return snprintf(dest, len, "%d", (*ptr)->id); > @@ -607,9 +589,8 @@ static int print_vlan(DeviceState *dev, Property *prop, char *dest, size_t len) > static void get_vlan(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - VLANState **ptr = qdev_get_prop_ptr(dev, prop); > + VLANState **ptr = object_get_prop_ptr(obj, prop); > int64_t id; > > id = *ptr ? (*ptr)->id : -1; > @@ -619,9 +600,8 @@ static void get_vlan(Object *obj, Visitor *v, void *opaque, > static void set_vlan(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - VLANState **ptr = qdev_get_prop_ptr(dev, prop); > + VLANState **ptr = object_get_prop_ptr(obj, prop); > Error *local_err = NULL; > int64_t id; > VLANState *vlan; > @@ -673,9 +653,8 @@ PropertyInfo qdev_prop_ptr = { > static void get_mac(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - MACAddr *mac = qdev_get_prop_ptr(dev, prop); > + MACAddr *mac = object_get_prop_ptr(obj, prop); > char buffer[2 * 6 + 5 + 1]; > char *p = buffer; > > @@ -689,9 +668,8 @@ static void get_mac(Object *obj, Visitor *v, void *opaque, > static void set_mac(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - MACAddr *mac = qdev_get_prop_ptr(dev, prop); > + MACAddr *mac = object_get_prop_ptr(obj, prop); > Error *local_err = NULL; > int i, pos; > char *str, *p; > @@ -724,7 +702,7 @@ static void set_mac(Object *obj, Visitor *v, void *opaque, > return; > > inval: > - error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str); > + error_set_from_prop_error(errp, EINVAL, obj, prop, str); > } > > PropertyInfo qdev_prop_macaddr = { > @@ -749,9 +727,8 @@ QEMU_BUILD_BUG_ON(sizeof(LostTickPolicy) != sizeof(int)); > static void get_enum(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - int *ptr = qdev_get_prop_ptr(dev, prop); > + int *ptr = object_get_prop_ptr(obj, prop); > > visit_type_enum(v, ptr, prop->info->enum_table, > prop->info->name, prop->name, errp); > @@ -760,9 +737,8 @@ static void get_enum(Object *obj, Visitor *v, void *opaque, > static void set_enum(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - int *ptr = qdev_get_prop_ptr(dev, prop); > + int *ptr = object_get_prop_ptr(obj, prop); > > if (object_is_realized(obj)) { > error_set(errp, QERR_PERMISSION_DENIED); > @@ -788,9 +764,8 @@ PropertyInfo qdev_prop_losttickpolicy = { > static void set_pci_devfn(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > - int32_t value, *ptr = qdev_get_prop_ptr(dev, prop); > + int32_t value, *ptr = object_get_prop_ptr(obj, prop); > unsigned int slot, fn, n; > Error *local_err = NULL; > char *str = (char *)""; > @@ -828,12 +803,12 @@ static void set_pci_devfn(Object *obj, Visitor *v, void *opaque, > return; > > invalid: > - error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str); > + error_set_from_prop_error(errp, EINVAL, obj, prop, str); > } > > -static int print_pci_devfn(DeviceState *dev, Property *prop, char *dest, size_t len) > +static int print_pci_devfn(Object *obj, Property *prop, char *dest, size_t len) > { > - int32_t *ptr = qdev_get_prop_ptr(dev, prop); > + int32_t *ptr = object_get_prop_ptr(obj, prop); > > if (*ptr == -1) { > return snprintf(dest, len, "<unset>"); > @@ -864,13 +839,13 @@ static Property *qdev_prop_walk(Property *props, const char *name) > return NULL; > } > > -static Property *qdev_prop_find(DeviceState *dev, const char *name) > +static Property *qdev_prop_find(Object *obj, const char *name) > { > ObjectClass *class; > Property *prop; > > /* device properties */ > - class = object_get_class(OBJECT(dev)); > + class = object_get_class(obj); > do { > prop = qdev_prop_walk(DEVICE_CLASS(class)->props, name); > if (prop) { > @@ -882,22 +857,22 @@ static Property *qdev_prop_find(DeviceState *dev, const char *name) > return NULL; > } > > -void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev, > - Property *prop, const char *value) > +void error_set_from_prop_error(Error **errp, int ret, Object *obj, > + Property *prop, const char *value) > { > switch (ret) { > case -EEXIST: > error_set(errp, QERR_PROPERTY_VALUE_IN_USE, > - object_get_typename(OBJECT(dev)), prop->name, value); > + object_get_typename(obj), prop->name, value); > break; > default: > case -EINVAL: > error_set(errp, QERR_PROPERTY_VALUE_BAD, > - object_get_typename(OBJECT(dev)), prop->name, value); > + object_get_typename(obj), prop->name, value); > break; > case -ENOENT: > error_set(errp, QERR_PROPERTY_VALUE_NOT_FOUND, > - object_get_typename(OBJECT(dev)), prop->name, value); > + object_get_typename(obj), prop->name, value); > break; > case 0: > break; > @@ -1035,7 +1010,7 @@ void qdev_prop_set_enum(DeviceState *dev, const char *name, int value) > Property *prop; > Error *errp = NULL; > > - prop = qdev_prop_find(dev, name); > + prop = qdev_prop_find(OBJECT(dev), name); > object_property_set_str(OBJECT(dev), prop->info->enum_table[value], > name, &errp); > assert_no_error(errp); > @@ -1046,9 +1021,9 @@ void qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value) > Property *prop; > void **ptr; > > - prop = qdev_prop_find(dev, name); > + prop = qdev_prop_find(OBJECT(dev), name); > assert(prop && prop->info == &qdev_prop_ptr); > - ptr = qdev_get_prop_ptr(dev, prop); > + ptr = object_get_prop_ptr(OBJECT(dev), prop); > *ptr = value; > } > > diff --git a/hw/qdev.c b/hw/qdev.c > index f82574a..b80368b 100644 > --- a/hw/qdev.c > +++ b/hw/qdev.c > @@ -496,20 +496,18 @@ char* qdev_get_fw_dev_path(DeviceState *dev) > static void qdev_get_legacy_property(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > > char buffer[1024]; > char *ptr = buffer; > > - prop->info->print(dev, prop, buffer, sizeof(buffer)); > + prop->info->print(obj, prop, buffer, sizeof(buffer)); > visit_type_str(v, &ptr, name, errp); > } > > static void qdev_set_legacy_property(Object *obj, Visitor *v, void *opaque, > const char *name, Error **errp) > { > - DeviceState *dev = DEVICE(obj); > Property *prop = opaque; > Error *local_err = NULL; > char *ptr = NULL; > @@ -526,8 +524,8 @@ static void qdev_set_legacy_property(Object *obj, Visitor *v, void *opaque, > return; > } > > - ret = prop->info->parse(dev, prop, ptr); > - error_set_from_qdev_prop_error(errp, ret, dev, prop, ptr); > + ret = prop->info->parse(obj, prop, ptr); > + error_set_from_prop_error(errp, ret, obj, prop, ptr); > g_free(ptr); > } > > diff --git a/hw/qdev.h b/hw/qdev.h > index a21633b..eb421af 100644 > --- a/hw/qdev.h > +++ b/hw/qdev.h > @@ -114,8 +114,8 @@ struct PropertyInfo { > const char *name; > const char *legacy_name; > const char **enum_table; > - int (*parse)(DeviceState *dev, Property *prop, const char *str); > - int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len); > + int (*parse)(Object *obj, Property *prop, const char *str); > + int (*print)(Object *obj, Property *prop, char *dest, size_t len); > ObjectPropertyAccessor *get; > ObjectPropertyAccessor *set; > ObjectPropertyRelease *release; > @@ -280,7 +280,7 @@ extern PropertyInfo qdev_prop_pci_devfn; > {} > > /* Set properties between creation and init. */ > -void *qdev_get_prop_ptr(DeviceState *dev, Property *prop); > +void *object_get_prop_ptr(Object *obj, Property *prop); > int qdev_prop_parse(DeviceState *dev, const char *name, const char *value); > void qdev_prop_set_bit(DeviceState *dev, const char *name, bool value); > void qdev_prop_set_uint8(DeviceState *dev, const char *name, uint8_t value); > @@ -301,8 +301,8 @@ void qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value); > > void qdev_prop_register_global_list(GlobalProperty *props); > void qdev_prop_set_globals(DeviceState *dev); > -void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev, > - Property *prop, const char *value); > +void error_set_from_prop_error(Error **errp, int ret, Object *obj, > + Property *prop, const char *value); > > char *qdev_get_fw_dev_path(DeviceState *dev); > > -- > 1.7.9.3 > > > Reviewed-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
diff --git a/hw/qdev-addr.c b/hw/qdev-addr.c index a3796bd..99ca116 100644 --- a/hw/qdev-addr.c +++ b/hw/qdev-addr.c @@ -5,26 +5,25 @@ /* --- target physical address --- */ -static int parse_taddr(DeviceState *dev, Property *prop, const char *str) +static int parse_taddr(Object *obj, Property *prop, const char *str) { - target_phys_addr_t *ptr = qdev_get_prop_ptr(dev, prop); + target_phys_addr_t *ptr = object_get_prop_ptr(obj, prop); *ptr = strtoull(str, NULL, 16); return 0; } -static int print_taddr(DeviceState *dev, Property *prop, char *dest, size_t len) +static int print_taddr(Object *obj, Property *prop, char *dest, size_t len) { - target_phys_addr_t *ptr = qdev_get_prop_ptr(dev, prop); + target_phys_addr_t *ptr = object_get_prop_ptr(obj, prop); return snprintf(dest, len, "0x" TARGET_FMT_plx, *ptr); } static void get_taddr(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - target_phys_addr_t *ptr = qdev_get_prop_ptr(dev, prop); + target_phys_addr_t *ptr = object_get_prop_ptr(obj, prop); int64_t value; value = *ptr; @@ -34,9 +33,8 @@ static void get_taddr(Object *obj, Visitor *v, void *opaque, static void set_taddr(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - target_phys_addr_t *ptr = qdev_get_prop_ptr(dev, prop); + target_phys_addr_t *ptr = object_get_prop_ptr(obj, prop); Error *local_err = NULL; int64_t value; @@ -53,9 +51,8 @@ static void set_taddr(Object *obj, Visitor *v, void *opaque, if ((uint64_t)value <= (uint64_t) ~(target_phys_addr_t)0) { *ptr = value; } else { - error_set(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE, - dev->id?:"", name, value, (uint64_t) 0, - (uint64_t) ~(target_phys_addr_t)0); + error_set(errp, QERR_INVALID_PARAMETER_VALUE, + name, "target_phys_addr_t"); } } diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c index 282cf68..59b9615 100644 --- a/hw/qdev-properties.c +++ b/hw/qdev-properties.c @@ -3,23 +3,23 @@ #include "qerror.h" #include "blockdev.h" -void *qdev_get_prop_ptr(DeviceState *dev, Property *prop) +void *object_get_prop_ptr(Object *obj, Property *prop) { - void *ptr = dev; + void *ptr = obj; ptr += prop->offset; return ptr; } -static uint32_t qdev_get_prop_mask(Property *prop) +static uint32_t get_prop_mask(Property *prop) { assert(prop->info == &qdev_prop_bit); return 0x1 << prop->bitnr; } -static void bit_prop_set(DeviceState *dev, Property *props, bool val) +static void bit_prop_set(Object *obj, Property *props, bool val) { - uint32_t *p = qdev_get_prop_ptr(dev, props); - uint32_t mask = qdev_get_prop_mask(props); + uint32_t *p = object_get_prop_ptr(obj, props); + uint32_t mask = get_prop_mask(props); if (val) *p |= mask; else @@ -28,19 +28,18 @@ static void bit_prop_set(DeviceState *dev, Property *props, bool val) /* Bit */ -static int print_bit(DeviceState *dev, Property *prop, char *dest, size_t len) +static int print_bit(Object *obj, Property *prop, char *dest, size_t len) { - uint32_t *p = qdev_get_prop_ptr(dev, prop); - return snprintf(dest, len, (*p & qdev_get_prop_mask(prop)) ? "on" : "off"); + uint32_t *p = object_get_prop_ptr(obj, prop); + return snprintf(dest, len, (*p & get_prop_mask(prop)) ? "on" : "off"); } static void get_bit(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - uint32_t *p = qdev_get_prop_ptr(dev, prop); - bool value = (*p & qdev_get_prop_mask(prop)) != 0; + uint32_t *p = object_get_prop_ptr(obj, prop); + bool value = (*p & get_prop_mask(prop)) != 0; visit_type_bool(v, &value, name, errp); } @@ -48,7 +47,6 @@ static void get_bit(Object *obj, Visitor *v, void *opaque, static void set_bit(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; Error *local_err = NULL; bool value; @@ -63,7 +61,7 @@ static void set_bit(Object *obj, Visitor *v, void *opaque, error_propagate(errp, local_err); return; } - bit_prop_set(dev, prop, value); + bit_prop_set(obj, prop, value); } PropertyInfo qdev_prop_bit = { @@ -79,9 +77,8 @@ PropertyInfo qdev_prop_bit = { static void get_uint8(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - uint8_t *ptr = qdev_get_prop_ptr(dev, prop); + uint8_t *ptr = object_get_prop_ptr(obj, prop); visit_type_uint8(v, ptr, name, errp); } @@ -89,9 +86,8 @@ static void get_uint8(Object *obj, Visitor *v, void *opaque, static void set_uint8(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - uint8_t *ptr = qdev_get_prop_ptr(dev, prop); + uint8_t *ptr = object_get_prop_ptr(obj, prop); if (object_is_realized(obj)) { error_set(errp, QERR_PERMISSION_DENIED); @@ -109,9 +105,9 @@ PropertyInfo qdev_prop_uint8 = { /* --- 8bit hex value --- */ -static int parse_hex8(DeviceState *dev, Property *prop, const char *str) +static int parse_hex8(Object *obj, Property *prop, const char *str) { - uint8_t *ptr = qdev_get_prop_ptr(dev, prop); + uint8_t *ptr = object_get_prop_ptr(obj, prop); char *end; if (str[0] != '0' || str[1] != 'x') { @@ -126,9 +122,9 @@ static int parse_hex8(DeviceState *dev, Property *prop, const char *str) return 0; } -static int print_hex8(DeviceState *dev, Property *prop, char *dest, size_t len) +static int print_hex8(Object *obj, Property *prop, char *dest, size_t len) { - uint8_t *ptr = qdev_get_prop_ptr(dev, prop); + uint8_t *ptr = object_get_prop_ptr(obj, prop); return snprintf(dest, len, "0x%" PRIx8, *ptr); } @@ -146,9 +142,8 @@ PropertyInfo qdev_prop_hex8 = { static void get_uint16(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - uint16_t *ptr = qdev_get_prop_ptr(dev, prop); + uint16_t *ptr = object_get_prop_ptr(obj, prop); visit_type_uint16(v, ptr, name, errp); } @@ -156,9 +151,8 @@ static void get_uint16(Object *obj, Visitor *v, void *opaque, static void set_uint16(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - uint16_t *ptr = qdev_get_prop_ptr(dev, prop); + uint16_t *ptr = object_get_prop_ptr(obj, prop); if (object_is_realized(obj)) { error_set(errp, QERR_PERMISSION_DENIED); @@ -179,9 +173,8 @@ PropertyInfo qdev_prop_uint16 = { static void get_uint32(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - uint32_t *ptr = qdev_get_prop_ptr(dev, prop); + uint32_t *ptr = object_get_prop_ptr(obj, prop); visit_type_uint32(v, ptr, name, errp); } @@ -189,9 +182,8 @@ static void get_uint32(Object *obj, Visitor *v, void *opaque, static void set_uint32(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - uint32_t *ptr = qdev_get_prop_ptr(dev, prop); + uint32_t *ptr = object_get_prop_ptr(obj, prop); if (object_is_realized(obj)) { error_set(errp, QERR_PERMISSION_DENIED); @@ -204,9 +196,8 @@ static void set_uint32(Object *obj, Visitor *v, void *opaque, static void get_int32(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - int32_t *ptr = qdev_get_prop_ptr(dev, prop); + int32_t *ptr = object_get_prop_ptr(obj, prop); visit_type_int32(v, ptr, name, errp); } @@ -214,9 +205,8 @@ static void get_int32(Object *obj, Visitor *v, void *opaque, static void set_int32(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - int32_t *ptr = qdev_get_prop_ptr(dev, prop); + int32_t *ptr = object_get_prop_ptr(obj, prop); if (object_is_realized(obj)) { error_set(errp, QERR_PERMISSION_DENIED); @@ -240,9 +230,9 @@ PropertyInfo qdev_prop_int32 = { /* --- 32bit hex value --- */ -static int parse_hex32(DeviceState *dev, Property *prop, const char *str) +static int parse_hex32(Object *obj, Property *prop, const char *str) { - uint32_t *ptr = qdev_get_prop_ptr(dev, prop); + uint32_t *ptr = object_get_prop_ptr(obj, prop); char *end; if (str[0] != '0' || str[1] != 'x') { @@ -257,9 +247,9 @@ static int parse_hex32(DeviceState *dev, Property *prop, const char *str) return 0; } -static int print_hex32(DeviceState *dev, Property *prop, char *dest, size_t len) +static int print_hex32(Object *obj, Property *prop, char *dest, size_t len) { - uint32_t *ptr = qdev_get_prop_ptr(dev, prop); + uint32_t *ptr = object_get_prop_ptr(obj, prop); return snprintf(dest, len, "0x%" PRIx32, *ptr); } @@ -277,9 +267,8 @@ PropertyInfo qdev_prop_hex32 = { static void get_uint64(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - uint64_t *ptr = qdev_get_prop_ptr(dev, prop); + uint64_t *ptr = object_get_prop_ptr(obj, prop); visit_type_uint64(v, ptr, name, errp); } @@ -287,9 +276,8 @@ static void get_uint64(Object *obj, Visitor *v, void *opaque, static void set_uint64(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - uint64_t *ptr = qdev_get_prop_ptr(dev, prop); + uint64_t *ptr = object_get_prop_ptr(obj, prop); if (object_is_realized(obj)) { error_set(errp, QERR_PERMISSION_DENIED); @@ -307,9 +295,9 @@ PropertyInfo qdev_prop_uint64 = { /* --- 64bit hex value --- */ -static int parse_hex64(DeviceState *dev, Property *prop, const char *str) +static int parse_hex64(Object *obj, Property *prop, const char *str) { - uint64_t *ptr = qdev_get_prop_ptr(dev, prop); + uint64_t *ptr = object_get_prop_ptr(obj, prop); char *end; if (str[0] != '0' || str[1] != 'x') { @@ -324,9 +312,9 @@ static int parse_hex64(DeviceState *dev, Property *prop, const char *str) return 0; } -static int print_hex64(DeviceState *dev, Property *prop, char *dest, size_t len) +static int print_hex64(Object *obj, Property *prop, char *dest, size_t len) { - uint64_t *ptr = qdev_get_prop_ptr(dev, prop); + uint64_t *ptr = object_get_prop_ptr(obj, prop); return snprintf(dest, len, "0x%" PRIx64, *ptr); } @@ -344,12 +332,12 @@ PropertyInfo qdev_prop_hex64 = { 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 **)object_get_prop_ptr(obj, prop)); } -static int print_string(DeviceState *dev, Property *prop, char *dest, size_t len) +static int print_string(Object *obj, Property *prop, char *dest, size_t len) { - char **ptr = qdev_get_prop_ptr(dev, prop); + char **ptr = object_get_prop_ptr(obj, prop); if (!*ptr) return snprintf(dest, len, "<null>"); return snprintf(dest, len, "\"%s\"", *ptr); @@ -358,9 +346,8 @@ static int print_string(DeviceState *dev, Property *prop, char *dest, size_t len static void get_string(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - char **ptr = qdev_get_prop_ptr(dev, prop); + char **ptr = object_get_prop_ptr(obj, prop); if (!*ptr) { char *str = (char *)""; @@ -373,9 +360,8 @@ static void get_string(Object *obj, Visitor *v, void *opaque, static void set_string(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - char **ptr = qdev_get_prop_ptr(dev, prop); + char **ptr = object_get_prop_ptr(obj, prop); Error *local_err = NULL; char *str; @@ -405,14 +391,14 @@ PropertyInfo qdev_prop_string = { /* --- drive --- */ -static int parse_drive(DeviceState *dev, const char *str, void **ptr) +static int parse_drive(Object *obj, const char *str, void **ptr) { BlockDriverState *bs; bs = bdrv_find(str); if (bs == NULL) return -ENOENT; - if (bdrv_attach_dev(bs, dev) < 0) + if (bdrv_attach_dev(bs, obj) < 0) return -EEXIST; *ptr = bs; return 0; @@ -420,12 +406,11 @@ static int parse_drive(DeviceState *dev, const char *str, void **ptr) static void release_drive(Object *obj, const char *name, void *opaque) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - BlockDriverState **ptr = qdev_get_prop_ptr(dev, prop); + BlockDriverState **ptr = object_get_prop_ptr(obj, prop); if (*ptr) { - bdrv_detach_dev(*ptr, dev); + bdrv_detach_dev(*ptr, obj); blockdev_auto_del(*ptr); } } @@ -439,8 +424,7 @@ static void get_pointer(Object *obj, Visitor *v, Property *prop, const char *(*print)(void *ptr), const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); - void **ptr = qdev_get_prop_ptr(dev, prop); + void **ptr = object_get_prop_ptr(obj, prop); char *p; p = (char *) (*ptr ? print(*ptr) : ""); @@ -448,12 +432,11 @@ static void get_pointer(Object *obj, Visitor *v, Property *prop, } static void set_pointer(Object *obj, Visitor *v, Property *prop, - int (*parse)(DeviceState *dev, const char *str, void **ptr), + int (*parse)(Object *obj, const char *str, void **ptr), const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Error *local_err = NULL; - void **ptr = qdev_get_prop_ptr(dev, prop); + void **ptr = object_get_prop_ptr(obj, prop); char *str; int ret; @@ -472,8 +455,8 @@ static void set_pointer(Object *obj, Visitor *v, Property *prop, *ptr = NULL; return; } - ret = parse(dev, str, ptr); - error_set_from_qdev_prop_error(errp, ret, dev, prop, str); + ret = parse(obj, str, ptr); + error_set_from_prop_error(errp, ret, obj, prop, str); g_free(str); } @@ -498,7 +481,7 @@ PropertyInfo qdev_prop_drive = { /* --- character device --- */ -static int parse_chr(DeviceState *dev, const char *str, void **ptr) +static int parse_chr(Object *obj, const char *str, void **ptr) { CharDriverState *chr = qemu_chr_find(str); if (chr == NULL) { @@ -514,9 +497,8 @@ static int parse_chr(DeviceState *dev, const char *str, void **ptr) static void release_chr(Object *obj, const char *name, void *opaque) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - CharDriverState **ptr = qdev_get_prop_ptr(dev, prop); + CharDriverState **ptr = object_get_prop_ptr(obj, prop); if (*ptr) { qemu_chr_add_handlers(*ptr, NULL, NULL, NULL, NULL); @@ -552,7 +534,7 @@ PropertyInfo qdev_prop_chr = { /* --- netdev device --- */ -static int parse_netdev(DeviceState *dev, const char *str, void **ptr) +static int parse_netdev(Object *obj, const char *str, void **ptr) { VLANClientState *netdev = qemu_find_netdev(str); @@ -593,9 +575,9 @@ PropertyInfo qdev_prop_netdev = { /* --- vlan --- */ -static int print_vlan(DeviceState *dev, Property *prop, char *dest, size_t len) +static int print_vlan(Object *obj, Property *prop, char *dest, size_t len) { - VLANState **ptr = qdev_get_prop_ptr(dev, prop); + VLANState **ptr = object_get_prop_ptr(obj, prop); if (*ptr) { return snprintf(dest, len, "%d", (*ptr)->id); @@ -607,9 +589,8 @@ static int print_vlan(DeviceState *dev, Property *prop, char *dest, size_t len) static void get_vlan(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - VLANState **ptr = qdev_get_prop_ptr(dev, prop); + VLANState **ptr = object_get_prop_ptr(obj, prop); int64_t id; id = *ptr ? (*ptr)->id : -1; @@ -619,9 +600,8 @@ static void get_vlan(Object *obj, Visitor *v, void *opaque, static void set_vlan(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - VLANState **ptr = qdev_get_prop_ptr(dev, prop); + VLANState **ptr = object_get_prop_ptr(obj, prop); Error *local_err = NULL; int64_t id; VLANState *vlan; @@ -673,9 +653,8 @@ PropertyInfo qdev_prop_ptr = { static void get_mac(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - MACAddr *mac = qdev_get_prop_ptr(dev, prop); + MACAddr *mac = object_get_prop_ptr(obj, prop); char buffer[2 * 6 + 5 + 1]; char *p = buffer; @@ -689,9 +668,8 @@ static void get_mac(Object *obj, Visitor *v, void *opaque, static void set_mac(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - MACAddr *mac = qdev_get_prop_ptr(dev, prop); + MACAddr *mac = object_get_prop_ptr(obj, prop); Error *local_err = NULL; int i, pos; char *str, *p; @@ -724,7 +702,7 @@ static void set_mac(Object *obj, Visitor *v, void *opaque, return; inval: - error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str); + error_set_from_prop_error(errp, EINVAL, obj, prop, str); } PropertyInfo qdev_prop_macaddr = { @@ -749,9 +727,8 @@ QEMU_BUILD_BUG_ON(sizeof(LostTickPolicy) != sizeof(int)); static void get_enum(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - int *ptr = qdev_get_prop_ptr(dev, prop); + int *ptr = object_get_prop_ptr(obj, prop); visit_type_enum(v, ptr, prop->info->enum_table, prop->info->name, prop->name, errp); @@ -760,9 +737,8 @@ static void get_enum(Object *obj, Visitor *v, void *opaque, static void set_enum(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - int *ptr = qdev_get_prop_ptr(dev, prop); + int *ptr = object_get_prop_ptr(obj, prop); if (object_is_realized(obj)) { error_set(errp, QERR_PERMISSION_DENIED); @@ -788,9 +764,8 @@ PropertyInfo qdev_prop_losttickpolicy = { static void set_pci_devfn(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; - int32_t value, *ptr = qdev_get_prop_ptr(dev, prop); + int32_t value, *ptr = object_get_prop_ptr(obj, prop); unsigned int slot, fn, n; Error *local_err = NULL; char *str = (char *)""; @@ -828,12 +803,12 @@ static void set_pci_devfn(Object *obj, Visitor *v, void *opaque, return; invalid: - error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str); + error_set_from_prop_error(errp, EINVAL, obj, prop, str); } -static int print_pci_devfn(DeviceState *dev, Property *prop, char *dest, size_t len) +static int print_pci_devfn(Object *obj, Property *prop, char *dest, size_t len) { - int32_t *ptr = qdev_get_prop_ptr(dev, prop); + int32_t *ptr = object_get_prop_ptr(obj, prop); if (*ptr == -1) { return snprintf(dest, len, "<unset>"); @@ -864,13 +839,13 @@ static Property *qdev_prop_walk(Property *props, const char *name) return NULL; } -static Property *qdev_prop_find(DeviceState *dev, const char *name) +static Property *qdev_prop_find(Object *obj, const char *name) { ObjectClass *class; Property *prop; /* device properties */ - class = object_get_class(OBJECT(dev)); + class = object_get_class(obj); do { prop = qdev_prop_walk(DEVICE_CLASS(class)->props, name); if (prop) { @@ -882,22 +857,22 @@ static Property *qdev_prop_find(DeviceState *dev, const char *name) return NULL; } -void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev, - Property *prop, const char *value) +void error_set_from_prop_error(Error **errp, int ret, Object *obj, + Property *prop, const char *value) { switch (ret) { case -EEXIST: error_set(errp, QERR_PROPERTY_VALUE_IN_USE, - object_get_typename(OBJECT(dev)), prop->name, value); + object_get_typename(obj), prop->name, value); break; default: case -EINVAL: error_set(errp, QERR_PROPERTY_VALUE_BAD, - object_get_typename(OBJECT(dev)), prop->name, value); + object_get_typename(obj), prop->name, value); break; case -ENOENT: error_set(errp, QERR_PROPERTY_VALUE_NOT_FOUND, - object_get_typename(OBJECT(dev)), prop->name, value); + object_get_typename(obj), prop->name, value); break; case 0: break; @@ -1035,7 +1010,7 @@ void qdev_prop_set_enum(DeviceState *dev, const char *name, int value) Property *prop; Error *errp = NULL; - prop = qdev_prop_find(dev, name); + prop = qdev_prop_find(OBJECT(dev), name); object_property_set_str(OBJECT(dev), prop->info->enum_table[value], name, &errp); assert_no_error(errp); @@ -1046,9 +1021,9 @@ void qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value) Property *prop; void **ptr; - prop = qdev_prop_find(dev, name); + prop = qdev_prop_find(OBJECT(dev), name); assert(prop && prop->info == &qdev_prop_ptr); - ptr = qdev_get_prop_ptr(dev, prop); + ptr = object_get_prop_ptr(OBJECT(dev), prop); *ptr = value; } diff --git a/hw/qdev.c b/hw/qdev.c index f82574a..b80368b 100644 --- a/hw/qdev.c +++ b/hw/qdev.c @@ -496,20 +496,18 @@ char* qdev_get_fw_dev_path(DeviceState *dev) static void qdev_get_legacy_property(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; char buffer[1024]; char *ptr = buffer; - prop->info->print(dev, prop, buffer, sizeof(buffer)); + prop->info->print(obj, prop, buffer, sizeof(buffer)); visit_type_str(v, &ptr, name, errp); } static void qdev_set_legacy_property(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { - DeviceState *dev = DEVICE(obj); Property *prop = opaque; Error *local_err = NULL; char *ptr = NULL; @@ -526,8 +524,8 @@ static void qdev_set_legacy_property(Object *obj, Visitor *v, void *opaque, return; } - ret = prop->info->parse(dev, prop, ptr); - error_set_from_qdev_prop_error(errp, ret, dev, prop, ptr); + ret = prop->info->parse(obj, prop, ptr); + error_set_from_prop_error(errp, ret, obj, prop, ptr); g_free(ptr); } diff --git a/hw/qdev.h b/hw/qdev.h index a21633b..eb421af 100644 --- a/hw/qdev.h +++ b/hw/qdev.h @@ -114,8 +114,8 @@ struct PropertyInfo { const char *name; const char *legacy_name; const char **enum_table; - int (*parse)(DeviceState *dev, Property *prop, const char *str); - int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len); + int (*parse)(Object *obj, Property *prop, const char *str); + int (*print)(Object *obj, Property *prop, char *dest, size_t len); ObjectPropertyAccessor *get; ObjectPropertyAccessor *set; ObjectPropertyRelease *release; @@ -280,7 +280,7 @@ extern PropertyInfo qdev_prop_pci_devfn; {} /* Set properties between creation and init. */ -void *qdev_get_prop_ptr(DeviceState *dev, Property *prop); +void *object_get_prop_ptr(Object *obj, Property *prop); int qdev_prop_parse(DeviceState *dev, const char *name, const char *value); void qdev_prop_set_bit(DeviceState *dev, const char *name, bool value); void qdev_prop_set_uint8(DeviceState *dev, const char *name, uint8_t value); @@ -301,8 +301,8 @@ void qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value); void qdev_prop_register_global_list(GlobalProperty *props); void qdev_prop_set_globals(DeviceState *dev); -void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev, - Property *prop, const char *value); +void error_set_from_prop_error(Error **errp, int ret, Object *obj, + Property *prop, const char *value); char *qdev_get_fw_dev_path(DeviceState *dev);
The property machinery uses DeviceState arguments in a few places. Replace this with Object so that we can push properties up. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- hw/qdev-addr.c | 19 +++--- hw/qdev-properties.c | 173 +++++++++++++++++++++----------------------------- hw/qdev.c | 8 +-- hw/qdev.h | 10 +-- 4 files changed, 90 insertions(+), 120 deletions(-)