Message ID | 1401448669-4655-5-git-send-email-stefanha@redhat.com |
---|---|
State | New |
Headers | show |
On Fri, May 30, 2014 at 9:17 PM, Stefan Hajnoczi <stefanha@redhat.com> wrote: > The qdev_alias_all_properties() function creates QOM alias properties > for each qdev property on a DeviceState. This is useful for parent > objects that wish to forward property accesses to their children. > > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> > --- > v3: > * Split qdev_alias_all_properties() into its own patch [Peter Crosthwaite] > * Do not dereference DEVICE_CLASS(class) inline [Peter Crosthwaite] > --- > hw/core/qdev.c | 21 +++++++++++++++++++++ > include/hw/qdev-properties.h | 2 ++ > 2 files changed, 23 insertions(+) > > diff --git a/hw/core/qdev.c b/hw/core/qdev.c > index e65a5aa..850cd9e 100644 > --- a/hw/core/qdev.c > +++ b/hw/core/qdev.c > @@ -776,6 +776,27 @@ void qdev_property_add_static(DeviceState *dev, Property *prop, > } > } > > +/* @qdev_alias_all_properties - Add alias properties to the source object for > + * all qdev properties on the target DeviceState. > + */ > +void qdev_alias_all_properties(DeviceState *target, Object *source) > +{ > + ObjectClass *class; > + Property *prop; > + > + class = object_get_class(OBJECT(target)); > + do { > + DeviceClass *dc = DEVICE_CLASS(class); > + > + for (prop = dc->props; prop && prop->name; prop++) { > + object_property_add_alias(source, prop->name, > + OBJECT(target), prop->name, > + &error_abort); > + } > + class = object_class_get_parent(class); > + } while (class != object_class_by_name(TYPE_DEVICE)); > +} > + > static bool device_get_realized(Object *obj, Error **errp) > { > DeviceState *dev = DEVICE(obj); > diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h > index c46e908..ffef425 100644 > --- a/include/hw/qdev-properties.h > +++ b/include/hw/qdev-properties.h > @@ -192,6 +192,8 @@ void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev, > */ > void qdev_property_add_static(DeviceState *dev, Property *prop, Error **errp); > > +void qdev_alias_all_properties(DeviceState *target, Object *source); > + > /** > * @qdev_prop_set_after_realize: > * @dev: device > -- > 1.9.3 > >
diff --git a/hw/core/qdev.c b/hw/core/qdev.c index e65a5aa..850cd9e 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -776,6 +776,27 @@ void qdev_property_add_static(DeviceState *dev, Property *prop, } } +/* @qdev_alias_all_properties - Add alias properties to the source object for + * all qdev properties on the target DeviceState. + */ +void qdev_alias_all_properties(DeviceState *target, Object *source) +{ + ObjectClass *class; + Property *prop; + + class = object_get_class(OBJECT(target)); + do { + DeviceClass *dc = DEVICE_CLASS(class); + + for (prop = dc->props; prop && prop->name; prop++) { + object_property_add_alias(source, prop->name, + OBJECT(target), prop->name, + &error_abort); + } + class = object_class_get_parent(class); + } while (class != object_class_by_name(TYPE_DEVICE)); +} + static bool device_get_realized(Object *obj, Error **errp) { DeviceState *dev = DEVICE(obj); diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h index c46e908..ffef425 100644 --- a/include/hw/qdev-properties.h +++ b/include/hw/qdev-properties.h @@ -192,6 +192,8 @@ void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev, */ void qdev_property_add_static(DeviceState *dev, Property *prop, Error **errp); +void qdev_alias_all_properties(DeviceState *target, Object *source); + /** * @qdev_prop_set_after_realize: * @dev: device
The qdev_alias_all_properties() function creates QOM alias properties for each qdev property on a DeviceState. This is useful for parent objects that wish to forward property accesses to their children. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> --- v3: * Split qdev_alias_all_properties() into its own patch [Peter Crosthwaite] * Do not dereference DEVICE_CLASS(class) inline [Peter Crosthwaite] --- hw/core/qdev.c | 21 +++++++++++++++++++++ include/hw/qdev-properties.h | 2 ++ 2 files changed, 23 insertions(+)