[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 3/9] qom: Expose property helpers for get/set of
From: |
Alexander Graf |
Subject: |
[Qemu-devel] [PATCH v2 3/9] qom: Expose property helpers for get/set of integers |
Date: |
Wed, 2 Jul 2014 20:01:27 +0200 |
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 <address@hidden>
---
include/qom/property.h | 128 +++++++++++++++++++++++++++++++++++++++++++++++++
qom/property.c | 14 +++++-
2 files changed, 140 insertions(+), 2 deletions(-)
diff --git a/include/qom/property.h b/include/qom/property.h
index bb09523..470c722 100644
--- a/include/qom/property.h
+++ b/include/qom/property.h
@@ -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 */
diff --git a/qom/property.c b/qom/property.c
index 944daff..b4f27e9 100644
--- a/qom/property.c
+++ b/qom/property.c
@@ -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);
\
}
\
--
1.8.1.4
- [Qemu-devel] [PATCH v2 0/9] Dynamic sysbus device allocation support, Alexander Graf, 2014/07/02
- [Qemu-devel] [PATCH v2 2/9] qom: macroify integer property helpers, Alexander Graf, 2014/07/02
- [Qemu-devel] [PATCH v2 3/9] qom: Expose property helpers for get/set of integers,
Alexander Graf <=
- [Qemu-devel] [PATCH v2 4/9] qom: Add generic object property g_free helper, Alexander Graf, 2014/07/02
- [Qemu-devel] [PATCH v2 7/9] PPC: e500: Support dynamically spawned sysbus devices, Alexander Graf, 2014/07/02
- [Qemu-devel] [PATCH v2 8/9] e500: Add support for eTSEC in device tree, Alexander Graf, 2014/07/02
- [Qemu-devel] [PATCH v2 6/9] sysbus: Make devices spawnable via -device, Alexander Graf, 2014/07/02
- [Qemu-devel] [PATCH v2 9/9] PPC: Fix default config ordering and add eTSEC for ppc64, Alexander Graf, 2014/07/02
- [Qemu-devel] [PATCH v2 1/9] qom: Move property helpers to own file, Alexander Graf, 2014/07/02