@@ -63,6 +63,38 @@ void object_property_add_uint8_ptr(Object *obj, const char *name,
const uint8_t *v, Error **errp);
/**
+ * object_property_get_uint8_ptr:
+ * @obj: the object to get the property from
+ * @v: visitor to the property
+ * @opaque: pointer to the integer value we write the result to
+ * @name: name of the property
+ * @errp: if an error occurs, a pointer to an area to store the error
+ *
+ * Visitor function to read an integer value of type 'uint8' into the visitor.
+ * Use this as the 'get' argument in object_property_add if your field is a
+ * uint8_t value.
+ */
+void object_property_get_uint8_ptr(Object *obj, struct Visitor *v,
+ void *opaque, const char *name,
+ Error **errp);
+
+/**
+ * object_property_set_uint8_ptr:
+ * @obj: the object to set the property in
+ * @v: visitor to the property
+ * @opaque: pointer to the integer value
+ * @name: name of the property
+ * @errp: if an error occurs, a pointer to an area to store the error
+ *
+ * Visitor function to set an integer value of type 'uint8' to a given value.
+ * Use this as the 'set' argument in object_property_add if your field is a
+ * uint8_t value.
+ */
+void object_property_set_uint8_ptr(Object *obj, struct Visitor *v,
+ void *opaque, const char *name,
+ Error **errp);
+
+/**
* object_property_add_uint16_ptr:
* @obj: the object to add a property to
* @name: the name of the property
@@ -76,6 +108,38 @@ void object_property_add_uint16_ptr(Object *obj, const char *name,
const uint16_t *v, Error **errp);
/**
+ * object_property_get_uint16_ptr:
+ * @obj: the object to get the property from
+ * @v: visitor to the property
+ * @opaque: pointer to the integer value we write the result to
+ * @name: name of the property
+ * @errp: if an error occurs, a pointer to an area to store the error
+ *
+ * Visitor function to read an integer value of type 'uint16' into the visitor.
+ * Use this as the 'get' argument in object_property_add if your field is a
+ * uint16_t value.
+ */
+void object_property_get_uint16_ptr(Object *obj, struct Visitor *v,
+ void *opaque, const char *name,
+ Error **errp);
+
+/**
+ * object_property_set_uint16_ptr:
+ * @obj: the object to set the property in
+ * @v: visitor to the property
+ * @opaque: pointer to the integer value
+ * @name: name of the property
+ * @errp: if an error occurs, a pointer to an area to store the error
+ *
+ * Visitor function to set an integer value of type 'uint16' to a given value.
+ * Use this as the 'set' argument in object_property_add if your field is a
+ * uint16_t value.
+ */
+void object_property_set_uint16_ptr(Object *obj, struct Visitor *v,
+ void *opaque, const char *name,
+ Error **errp);
+
+/**
* object_property_add_uint32_ptr:
* @obj: the object to add a property to
* @name: the name of the property
@@ -89,6 +153,38 @@ void object_property_add_uint32_ptr(Object *obj, const char *name,
const uint32_t *v, Error **errp);
/**
+ * object_property_get_uint32_ptr:
+ * @obj: the object to get the property from
+ * @v: visitor to the property
+ * @opaque: pointer to the integer value we write the result to
+ * @name: name of the property
+ * @errp: if an error occurs, a pointer to an area to store the error
+ *
+ * Visitor function to read an integer value of type 'uint32' into the visitor.
+ * Use this as the 'get' argument in object_property_add if your field is a
+ * uint32_t value.
+ */
+void object_property_get_uint32_ptr(Object *obj, struct Visitor *v,
+ void *opaque, const char *name,
+ Error **errp);
+
+/**
+ * object_property_set_uint32_ptr:
+ * @obj: the object to set the property in
+ * @v: visitor to the property
+ * @opaque: pointer to the integer value
+ * @name: name of the property
+ * @errp: if an error occurs, a pointer to an area to store the error
+ *
+ * Visitor function to set an integer value of type 'uint32' to a given value.
+ * Use this as the 'set' argument in object_property_add if your field is a
+ * uint32_t value.
+ */
+void object_property_set_uint32_ptr(Object *obj, struct Visitor *v,
+ void *opaque, const char *name,
+ Error **errp);
+
+/**
* object_property_add_uint64_ptr:
* @obj: the object to add a property to
* @name: the name of the property
@@ -101,4 +197,36 @@ void object_property_add_uint32_ptr(Object *obj, const char *name,
void object_property_add_uint64_ptr(Object *obj, const char *name,
const uint64_t *v, Error **Errp);
+/**
+ * object_property_get_uint64_ptr:
+ * @obj: the object to get the property from
+ * @v: visitor to the property
+ * @opaque: pointer to the integer value we write the result to
+ * @name: name of the property
+ * @errp: if an error occurs, a pointer to an area to store the error
+ *
+ * Visitor function to read an integer value of type 'uint64' into the visitor.
+ * Use this as the 'get' argument in object_property_add if your field is a
+ * uint64_t value.
+ */
+void object_property_get_uint64_ptr(Object *obj, struct Visitor *v,
+ void *opaque, const char *name,
+ Error **errp);
+
+/**
+ * object_property_set_uint64_ptr:
+ * @obj: the object to set the property in
+ * @v: visitor to the property
+ * @opaque: pointer to the integer value
+ * @name: name of the property
+ * @errp: if an error occurs, a pointer to an area to store the error
+ *
+ * Visitor function to set an integer value of type 'uint64' to a given value.
+ * Use this as the 'set' argument in object_property_add if your field is a
+ * uint64_t value.
+ */
+void object_property_set_uint64_ptr(Object *obj, struct Visitor *v,
+ void *opaque, const char *name,
+ Error **errp);
+
#endif /* !QEMU_PROPERTY_H */
@@ -153,7 +153,7 @@ void object_property_add_bool(Object *obj, const char *name,
#define DECLARE_PROP_SET_GET(name, valtype) \
\
-static void glue(glue(property_get_,name),_ptr)(Object *obj, Visitor *v, \
+void glue(glue(object_property_get_,name),_ptr)(Object *obj, Visitor *v, \
void *opaque, \
const char *name, \
Error **errp) \
@@ -162,11 +162,21 @@ static void glue(glue(property_get_,name),_ptr)(Object *obj, Visitor *v, \
glue(visit_type_,name)(v, &value, name, errp); \
} \
\
+void glue(glue(object_property_set_,name),_ptr)(Object *obj, Visitor *v, \
+ void *opaque, \
+ const char *name, \
+ Error **errp) \
+{ \
+ valtype value; \
+ glue(visit_type_,name)(v, &value, name, errp); \
+ *(valtype *)opaque = value; \
+} \
+ \
void glue(glue(object_property_add_,name),_ptr)(Object *obj, const char *name, \
const valtype *v, \
Error **errp) \
{ \
- ObjectPropertyAccessor *get = glue(glue(property_get_,name),_ptr); \
+ ObjectPropertyAccessor *get = glue(glue(object_property_get_,name),_ptr); \
object_property_add(obj, name, stringify(name), get, NULL, NULL, (void *)v,\
errp); \
} \
We have helper functions to easily expose integers as QOM object properties. However, these are read only. This patch makes the getter function world accessible and adds a generic setter for integer properties. We can use these later with the generic object_property_add to not dupliate simple logic all over the place. Signed-off-by: Alexander Graf <agraf@suse.de> --- include/qom/property.h | 128 +++++++++++++++++++++++++++++++++++++++++++++++++ qom/property.c | 14 +++++- 2 files changed, 140 insertions(+), 2 deletions(-)