[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH v2 1/9] qom: Move property helpers to own file
From: |
Alexander Graf |
Subject: |
[Qemu-ppc] [PATCH v2 1/9] qom: Move property helpers to own file |
Date: |
Wed, 2 Jul 2014 20:01:25 +0200 |
We have accumulated a number of friendly helpers that make registration
of properties easier. However, their number is only increasing and they
start to clutter the core object.c file.
So let's move them into a separate C file and thus ensure that we have
room to grow :).
Signed-off-by: Alexander Graf <address@hidden>
---
backends/hostmem-file.c | 1 +
backends/hostmem.c | 1 +
backends/rng-egd.c | 1 +
backends/rng-random.c | 1 +
backends/rng.c | 1 +
backends/tpm.c | 1 +
hw/acpi/ich9.c | 1 +
hw/acpi/pcihp.c | 1 +
hw/acpi/piix4.c | 1 +
hw/core/machine.c | 1 +
hw/core/qdev.c | 1 +
hw/i386/acpi-build.c | 1 +
hw/isa/lpc_ich9.c | 1 +
hw/ppc/spapr.c | 1 +
include/qom/object.h | 85 -------------------
include/qom/property.h | 104 ++++++++++++++++++++++++
memory.c | 1 +
qom/Makefile.objs | 2 +-
qom/object.c | 197 ++------------------------------------------
qom/property.c | 212 ++++++++++++++++++++++++++++++++++++++++++++++++
target-i386/cpu.c | 1 +
ui/console.c | 1 +
22 files changed, 340 insertions(+), 277 deletions(-)
create mode 100644 include/qom/property.h
create mode 100644 qom/property.c
diff --git a/backends/hostmem-file.c b/backends/hostmem-file.c
index 5179994..5a944a3 100644
--- a/backends/hostmem-file.c
+++ b/backends/hostmem-file.c
@@ -13,6 +13,7 @@
#include "sysemu/hostmem.h"
#include "sysemu/sysemu.h"
#include "qom/object_interfaces.h"
+#include "qom/property.h"
/* hostmem-file.c */
/**
diff --git a/backends/hostmem.c b/backends/hostmem.c
index ca10c51..18fc8ba 100644
--- a/backends/hostmem.c
+++ b/backends/hostmem.c
@@ -16,6 +16,7 @@
#include "qapi/qmp/qerror.h"
#include "qemu/config-file.h"
#include "qom/object_interfaces.h"
+#include "qom/property.h"
#ifdef CONFIG_NUMA
#include <numaif.h>
diff --git a/backends/rng-egd.c b/backends/rng-egd.c
index 25bb3b4..f055ac1 100644
--- a/backends/rng-egd.c
+++ b/backends/rng-egd.c
@@ -14,6 +14,7 @@
#include "sysemu/char.h"
#include "qapi/qmp/qerror.h"
#include "hw/qdev.h" /* just for DEFINE_PROP_CHR */
+#include "qom/property.h"
#define TYPE_RNG_EGD "rng-egd"
#define RNG_EGD(obj) OBJECT_CHECK(RngEgd, (obj), TYPE_RNG_EGD)
diff --git a/backends/rng-random.c b/backends/rng-random.c
index 601d9dc..c7f3ff7 100644
--- a/backends/rng-random.c
+++ b/backends/rng-random.c
@@ -14,6 +14,7 @@
#include "sysemu/rng.h"
#include "qapi/qmp/qerror.h"
#include "qemu/main-loop.h"
+#include "qom/property.h"
struct RndRandom
{
diff --git a/backends/rng.c b/backends/rng.c
index 0f2fc11..7b82894 100644
--- a/backends/rng.c
+++ b/backends/rng.c
@@ -13,6 +13,7 @@
#include "sysemu/rng.h"
#include "qapi/qmp/qerror.h"
#include "qom/object_interfaces.h"
+#include "qom/property.h"
void rng_backend_request_entropy(RngBackend *s, size_t size,
EntropyReceiveFunc *receive_entropy,
diff --git a/backends/tpm.c b/backends/tpm.c
index 01860c4..769a9b8 100644
--- a/backends/tpm.c
+++ b/backends/tpm.c
@@ -17,6 +17,7 @@
#include "sysemu/tpm.h"
#include "qemu/thread.h"
#include "sysemu/tpm_backend_int.h"
+#include "qom/property.h"
enum TpmType tpm_backend_get_type(TPMBackend *s)
{
diff --git a/hw/acpi/ich9.c b/hw/acpi/ich9.c
index e7d6c77..2c1eb13 100644
--- a/hw/acpi/ich9.c
+++ b/hw/acpi/ich9.c
@@ -32,6 +32,7 @@
#include "hw/acpi/acpi.h"
#include "sysemu/kvm.h"
#include "exec/address-spaces.h"
+#include "qom/property.h"
#include "hw/i386/ich9.h"
#include "hw/mem/pc-dimm.h"
diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c
index fae663a..641378b 100644
--- a/hw/acpi/pcihp.c
+++ b/hw/acpi/pcihp.c
@@ -36,6 +36,7 @@
#include "exec/address-spaces.h"
#include "hw/pci/pci_bus.h"
#include "qom/qom-qobject.h"
+#include "qom/property.h"
#include "qapi/qmp/qint.h"
//#define DEBUG
diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c
index b72b34e..fc7d5b3 100644
--- a/hw/acpi/piix4.c
+++ b/hw/acpi/piix4.c
@@ -36,6 +36,7 @@
#include "hw/mem/pc-dimm.h"
#include "hw/acpi/memory_hotplug.h"
#include "hw/acpi/acpi_dev_interface.h"
+#include "qom/property.h"
//#define DEBUG
diff --git a/hw/core/machine.c b/hw/core/machine.c
index cbba679..c25cc07 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -12,6 +12,7 @@
#include "hw/boards.h"
#include "qapi/visitor.h"
+#include "qom/property.h"
static char *machine_get_accel(Object *obj, Error **errp)
{
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 3bdda8e..a4dca33 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -35,6 +35,7 @@
#include "hw/hotplug.h"
#include "hw/boards.h"
#include "qapi-event.h"
+#include "qom/property.h"
int qdev_hotplug = 0;
static bool qdev_hot_added = false;
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index ebc5f03..f95464c 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -51,6 +51,7 @@
#include "qapi/qmp/qint.h"
#include "qom/qom-qobject.h"
+#include "qom/property.h"
typedef struct AcpiCpuInfo {
DECLARE_BITMAP(found_cpus, ACPI_CPU_HOTPLUG_ID_LIMIT);
diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c
index b846d81..5682234 100644
--- a/hw/isa/lpc_ich9.c
+++ b/hw/isa/lpc_ich9.c
@@ -45,6 +45,7 @@
#include "hw/pci/pci_bus.h"
#include "exec/address-spaces.h"
#include "sysemu/sysemu.h"
+#include "qom/property.h"
static int ich9_lpc_sci_irq(ICH9LPCState *lpc);
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index a23c0f0..071ae14 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -35,6 +35,7 @@
#include "kvm_ppc.h"
#include "mmu-hash64.h"
#include "qom/cpu.h"
+#include "qom/property.h"
#include "hw/boards.h"
#include "hw/ppc/ppc.h"
diff --git a/include/qom/object.h b/include/qom/object.h
index 8a05a81..4216b07 100644
--- a/include/qom/object.h
+++ b/include/qom/object.h
@@ -1170,91 +1170,6 @@ void object_property_add_link(Object *obj, const char
*name,
Error **errp);
/**
- * object_property_add_str:
- * @obj: the object to add a property to
- * @name: the name of the property
- * @get: the getter or NULL if the property is write-only. This function must
- * return a string to be freed by g_free().
- * @set: the setter or NULL if the property is read-only
- * @errp: if an error occurs, a pointer to an area to store the error
- *
- * Add a string property using getters/setters. This function will add a
- * property of type 'string'.
- */
-void object_property_add_str(Object *obj, const char *name,
- char *(*get)(Object *, Error **),
- void (*set)(Object *, const char *, Error **),
- Error **errp);
-
-/**
- * object_property_add_bool:
- * @obj: the object to add a property to
- * @name: the name of the property
- * @get: the getter or NULL if the property is write-only.
- * @set: the setter or NULL if the property is read-only
- * @errp: if an error occurs, a pointer to an area to store the error
- *
- * Add a bool property using getters/setters. This function will add a
- * property of type 'bool'.
- */
-void object_property_add_bool(Object *obj, const char *name,
- bool (*get)(Object *, Error **),
- void (*set)(Object *, bool, Error **),
- Error **errp);
-
-/**
- * object_property_add_uint8_ptr:
- * @obj: the object to add a property to
- * @name: the name of the property
- * @v: pointer to value
- * @errp: if an error occurs, a pointer to an area to store the error
- *
- * Add an integer property in memory. This function will add a
- * property of type 'uint8'.
- */
-void object_property_add_uint8_ptr(Object *obj, const char *name,
- const uint8_t *v, Error **errp);
-
-/**
- * object_property_add_uint16_ptr:
- * @obj: the object to add a property to
- * @name: the name of the property
- * @v: pointer to value
- * @errp: if an error occurs, a pointer to an area to store the error
- *
- * Add an integer property in memory. This function will add a
- * property of type 'uint16'.
- */
-void object_property_add_uint16_ptr(Object *obj, const char *name,
- const uint16_t *v, Error **errp);
-
-/**
- * object_property_add_uint32_ptr:
- * @obj: the object to add a property to
- * @name: the name of the property
- * @v: pointer to value
- * @errp: if an error occurs, a pointer to an area to store the error
- *
- * Add an integer property in memory. This function will add a
- * property of type 'uint32'.
- */
-void object_property_add_uint32_ptr(Object *obj, const char *name,
- const uint32_t *v, Error **errp);
-
-/**
- * object_property_add_uint64_ptr:
- * @obj: the object to add a property to
- * @name: the name of the property
- * @v: pointer to value
- * @errp: if an error occurs, a pointer to an area to store the error
- *
- * Add an integer property in memory. This function will add a
- * property of type 'uint64'.
- */
-void object_property_add_uint64_ptr(Object *obj, const char *name,
- const uint64_t *v, Error **Errp);
-
-/**
* object_property_add_alias:
* @obj: the object to add a property to
* @name: the name of the property
diff --git a/include/qom/property.h b/include/qom/property.h
new file mode 100644
index 0000000..bb09523
--- /dev/null
+++ b/include/qom/property.h
@@ -0,0 +1,104 @@
+/*
+ * QEMU Object Model, property helpers
+ *
+ * Copyright IBM, Corp. 2011
+ *
+ * Authors:
+ * Anthony Liguori <address@hidden>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ *
+ */
+
+#ifndef QEMU_PROPERTY_H
+#define QEMU_PROPERTY_H
+
+#include "qom/object.h"
+
+/**
+ * object_property_add_str:
+ * @obj: the object to add a property to
+ * @name: the name of the property
+ * @get: the getter or NULL if the property is write-only. This function must
+ * return a string to be freed by g_free().
+ * @set: the setter or NULL if the property is read-only
+ * @errp: if an error occurs, a pointer to an area to store the error
+ *
+ * Add a string property using getters/setters. This function will add a
+ * property of type 'string'.
+ */
+void object_property_add_str(Object *obj, const char *name,
+ char *(*get)(Object *, Error **),
+ void (*set)(Object *, const char *, Error **),
+ Error **errp);
+
+/**
+ * object_property_add_bool:
+ * @obj: the object to add a property to
+ * @name: the name of the property
+ * @get: the getter or NULL if the property is write-only.
+ * @set: the setter or NULL if the property is read-only
+ * @errp: if an error occurs, a pointer to an area to store the error
+ *
+ * Add a bool property using getters/setters. This function will add a
+ * property of type 'bool'.
+ */
+void object_property_add_bool(Object *obj, const char *name,
+ bool (*get)(Object *, Error **),
+ void (*set)(Object *, bool, Error **),
+ Error **errp);
+
+/**
+ * object_property_add_uint8_ptr:
+ * @obj: the object to add a property to
+ * @name: the name of the property
+ * @v: pointer to value
+ * @errp: if an error occurs, a pointer to an area to store the error
+ *
+ * Add an integer property in memory. This function will add a
+ * property of type 'uint8'.
+ */
+void object_property_add_uint8_ptr(Object *obj, const char *name,
+ const uint8_t *v, Error **errp);
+
+/**
+ * object_property_add_uint16_ptr:
+ * @obj: the object to add a property to
+ * @name: the name of the property
+ * @v: pointer to value
+ * @errp: if an error occurs, a pointer to an area to store the error
+ *
+ * Add an integer property in memory. This function will add a
+ * property of type 'uint16'.
+ */
+void object_property_add_uint16_ptr(Object *obj, const char *name,
+ const uint16_t *v, Error **errp);
+
+/**
+ * object_property_add_uint32_ptr:
+ * @obj: the object to add a property to
+ * @name: the name of the property
+ * @v: pointer to value
+ * @errp: if an error occurs, a pointer to an area to store the error
+ *
+ * Add an integer property in memory. This function will add a
+ * property of type 'uint32'.
+ */
+void object_property_add_uint32_ptr(Object *obj, const char *name,
+ const uint32_t *v, Error **errp);
+
+/**
+ * object_property_add_uint64_ptr:
+ * @obj: the object to add a property to
+ * @name: the name of the property
+ * @v: pointer to value
+ * @errp: if an error occurs, a pointer to an area to store the error
+ *
+ * Add an integer property in memory. This function will add a
+ * property of type 'uint64'.
+ */
+void object_property_add_uint64_ptr(Object *obj, const char *name,
+ const uint64_t *v, Error **Errp);
+
+#endif /* !QEMU_PROPERTY_H */
diff --git a/memory.c b/memory.c
index 64d7176..ab1471b 100644
--- a/memory.c
+++ b/memory.c
@@ -19,6 +19,7 @@
#include "qapi/visitor.h"
#include "qemu/bitops.h"
#include "qom/object.h"
+#include "qom/property.h"
#include "trace.h"
#include <assert.h>
diff --git a/qom/Makefile.objs b/qom/Makefile.objs
index 985003b..bbd5359 100644
--- a/qom/Makefile.objs
+++ b/qom/Makefile.objs
@@ -1,3 +1,3 @@
-common-obj-y = object.o container.o qom-qobject.o
+common-obj-y = object.o container.o qom-qobject.o property.o
common-obj-y += cpu.o
common-obj-y += object_interfaces.o
diff --git a/qom/object.c b/qom/object.c
index 0e8267b..94a19ce 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -11,6 +11,7 @@
*/
#include "qom/object.h"
+#include "qom/property.h"
#include "qemu-common.h"
#include "qapi/visitor.h"
#include "qapi-visit.h"
@@ -1376,197 +1377,6 @@ Object *object_resolve_path(const char *path, bool
*ambiguous)
return object_resolve_path_type(path, TYPE_OBJECT, ambiguous);
}
-typedef struct StringProperty
-{
- char *(*get)(Object *, Error **);
- void (*set)(Object *, const char *, Error **);
-} StringProperty;
-
-static void property_get_str(Object *obj, Visitor *v, void *opaque,
- const char *name, Error **errp)
-{
- StringProperty *prop = opaque;
- char *value;
-
- value = prop->get(obj, errp);
- if (value) {
- visit_type_str(v, &value, name, errp);
- g_free(value);
- }
-}
-
-static void property_set_str(Object *obj, Visitor *v, void *opaque,
- const char *name, Error **errp)
-{
- StringProperty *prop = opaque;
- char *value;
- Error *local_err = NULL;
-
- visit_type_str(v, &value, name, &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
- return;
- }
-
- prop->set(obj, value, errp);
- g_free(value);
-}
-
-static void property_release_str(Object *obj, const char *name,
- void *opaque)
-{
- StringProperty *prop = opaque;
- g_free(prop);
-}
-
-void object_property_add_str(Object *obj, const char *name,
- char *(*get)(Object *, Error **),
- void (*set)(Object *, const char *, Error **),
- Error **errp)
-{
- Error *local_err = NULL;
- StringProperty *prop = g_malloc0(sizeof(*prop));
-
- prop->get = get;
- prop->set = set;
-
- object_property_add(obj, name, "string",
- get ? property_get_str : NULL,
- set ? property_set_str : NULL,
- property_release_str,
- prop, &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
- g_free(prop);
- }
-}
-
-typedef struct BoolProperty
-{
- bool (*get)(Object *, Error **);
- void (*set)(Object *, bool, Error **);
-} BoolProperty;
-
-static void property_get_bool(Object *obj, Visitor *v, void *opaque,
- const char *name, Error **errp)
-{
- BoolProperty *prop = opaque;
- bool value;
-
- value = prop->get(obj, errp);
- visit_type_bool(v, &value, name, errp);
-}
-
-static void property_set_bool(Object *obj, Visitor *v, void *opaque,
- const char *name, Error **errp)
-{
- BoolProperty *prop = opaque;
- bool value;
- Error *local_err = NULL;
-
- visit_type_bool(v, &value, name, &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
- return;
- }
-
- prop->set(obj, value, errp);
-}
-
-static void property_release_bool(Object *obj, const char *name,
- void *opaque)
-{
- BoolProperty *prop = opaque;
- g_free(prop);
-}
-
-void object_property_add_bool(Object *obj, const char *name,
- bool (*get)(Object *, Error **),
- void (*set)(Object *, bool, Error **),
- Error **errp)
-{
- Error *local_err = NULL;
- BoolProperty *prop = g_malloc0(sizeof(*prop));
-
- prop->get = get;
- prop->set = set;
-
- object_property_add(obj, name, "bool",
- get ? property_get_bool : NULL,
- set ? property_set_bool : NULL,
- property_release_bool,
- prop, &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
- g_free(prop);
- }
-}
-
-static char *qdev_get_type(Object *obj, Error **errp)
-{
- return g_strdup(object_get_typename(obj));
-}
-
-static void property_get_uint8_ptr(Object *obj, Visitor *v,
- void *opaque, const char *name,
- Error **errp)
-{
- uint8_t value = *(uint8_t *)opaque;
- visit_type_uint8(v, &value, name, errp);
-}
-
-static void property_get_uint16_ptr(Object *obj, Visitor *v,
- void *opaque, const char *name,
- Error **errp)
-{
- uint16_t value = *(uint16_t *)opaque;
- visit_type_uint16(v, &value, name, errp);
-}
-
-static void property_get_uint32_ptr(Object *obj, Visitor *v,
- void *opaque, const char *name,
- Error **errp)
-{
- uint32_t value = *(uint32_t *)opaque;
- visit_type_uint32(v, &value, name, errp);
-}
-
-static void property_get_uint64_ptr(Object *obj, Visitor *v,
- void *opaque, const char *name,
- Error **errp)
-{
- uint64_t value = *(uint64_t *)opaque;
- visit_type_uint64(v, &value, name, errp);
-}
-
-void object_property_add_uint8_ptr(Object *obj, const char *name,
- const uint8_t *v, Error **errp)
-{
- object_property_add(obj, name, "uint8", property_get_uint8_ptr,
- NULL, NULL, (void *)v, errp);
-}
-
-void object_property_add_uint16_ptr(Object *obj, const char *name,
- const uint16_t *v, Error **errp)
-{
- object_property_add(obj, name, "uint16", property_get_uint16_ptr,
- NULL, NULL, (void *)v, errp);
-}
-
-void object_property_add_uint32_ptr(Object *obj, const char *name,
- const uint32_t *v, Error **errp)
-{
- object_property_add(obj, name, "uint32", property_get_uint32_ptr,
- NULL, NULL, (void *)v, errp);
-}
-
-void object_property_add_uint64_ptr(Object *obj, const char *name,
- const uint64_t *v, Error **errp)
-{
- object_property_add(obj, name, "uint64", property_get_uint64_ptr,
- NULL, NULL, (void *)v, errp);
-}
-
typedef struct {
Object *target_obj;
const char *target_name;
@@ -1638,6 +1448,11 @@ void object_property_add_alias(Object *obj, const char
*name,
g_free(prop_type);
}
+static char *qdev_get_type(Object *obj, Error **errp)
+{
+ return g_strdup(object_get_typename(obj));
+}
+
static void object_instance_init(Object *obj)
{
object_property_add_str(obj, "type", qdev_get_type, NULL, NULL);
diff --git a/qom/property.c b/qom/property.c
new file mode 100644
index 0000000..9e7c92a
--- /dev/null
+++ b/qom/property.c
@@ -0,0 +1,212 @@
+/*
+ * QEMU Object Model, property helpers
+ *
+ * Copyright IBM, Corp. 2011
+ *
+ * Authors:
+ * Anthony Liguori <address@hidden>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#include "qom/property.h"
+#include "qemu-common.h"
+#include "qapi/visitor.h"
+#include "qapi-visit.h"
+#include "qapi/string-input-visitor.h"
+#include "qapi/string-output-visitor.h"
+#include "qapi/qmp/qerror.h"
+#include "trace.h"
+
+#include "qom/qom-qobject.h"
+#include "qapi/qmp/qobject.h"
+#include "qapi/qmp/qbool.h"
+#include "qapi/qmp/qint.h"
+#include "qapi/qmp/qstring.h"
+
+typedef struct StringProperty
+{
+ char *(*get)(Object *, Error **);
+ void (*set)(Object *, const char *, Error **);
+} StringProperty;
+
+static void property_get_str(Object *obj, Visitor *v, void *opaque,
+ const char *name, Error **errp)
+{
+ StringProperty *prop = opaque;
+ char *value;
+
+ value = prop->get(obj, errp);
+ if (value) {
+ visit_type_str(v, &value, name, errp);
+ g_free(value);
+ }
+}
+
+static void property_set_str(Object *obj, Visitor *v, void *opaque,
+ const char *name, Error **errp)
+{
+ StringProperty *prop = opaque;
+ char *value;
+ Error *local_err = NULL;
+
+ visit_type_str(v, &value, name, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
+ }
+
+ prop->set(obj, value, errp);
+ g_free(value);
+}
+
+static void property_release_str(Object *obj, const char *name,
+ void *opaque)
+{
+ StringProperty *prop = opaque;
+ g_free(prop);
+}
+
+void object_property_add_str(Object *obj, const char *name,
+ char *(*get)(Object *, Error **),
+ void (*set)(Object *, const char *, Error **),
+ Error **errp)
+{
+ Error *local_err = NULL;
+ StringProperty *prop = g_malloc0(sizeof(*prop));
+
+ prop->get = get;
+ prop->set = set;
+
+ object_property_add(obj, name, "string",
+ get ? property_get_str : NULL,
+ set ? property_set_str : NULL,
+ property_release_str,
+ prop, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ g_free(prop);
+ }
+}
+
+typedef struct BoolProperty
+{
+ bool (*get)(Object *, Error **);
+ void (*set)(Object *, bool, Error **);
+} BoolProperty;
+
+static void property_get_bool(Object *obj, Visitor *v, void *opaque,
+ const char *name, Error **errp)
+{
+ BoolProperty *prop = opaque;
+ bool value;
+
+ value = prop->get(obj, errp);
+ visit_type_bool(v, &value, name, errp);
+}
+
+static void property_set_bool(Object *obj, Visitor *v, void *opaque,
+ const char *name, Error **errp)
+{
+ BoolProperty *prop = opaque;
+ bool value;
+ Error *local_err = NULL;
+
+ visit_type_bool(v, &value, name, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
+ }
+
+ prop->set(obj, value, errp);
+}
+
+static void property_release_bool(Object *obj, const char *name,
+ void *opaque)
+{
+ BoolProperty *prop = opaque;
+ g_free(prop);
+}
+
+void object_property_add_bool(Object *obj, const char *name,
+ bool (*get)(Object *, Error **),
+ void (*set)(Object *, bool, Error **),
+ Error **errp)
+{
+ Error *local_err = NULL;
+ BoolProperty *prop = g_malloc0(sizeof(*prop));
+
+ prop->get = get;
+ prop->set = set;
+
+ object_property_add(obj, name, "bool",
+ get ? property_get_bool : NULL,
+ set ? property_set_bool : NULL,
+ property_release_bool,
+ prop, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ g_free(prop);
+ }
+}
+
+static void property_get_uint8_ptr(Object *obj, Visitor *v,
+ void *opaque, const char *name,
+ Error **errp)
+{
+ uint8_t value = *(uint8_t *)opaque;
+ visit_type_uint8(v, &value, name, errp);
+}
+
+static void property_get_uint16_ptr(Object *obj, Visitor *v,
+ void *opaque, const char *name,
+ Error **errp)
+{
+ uint16_t value = *(uint16_t *)opaque;
+ visit_type_uint16(v, &value, name, errp);
+}
+
+static void property_get_uint32_ptr(Object *obj, Visitor *v,
+ void *opaque, const char *name,
+ Error **errp)
+{
+ uint32_t value = *(uint32_t *)opaque;
+ visit_type_uint32(v, &value, name, errp);
+}
+
+static void property_get_uint64_ptr(Object *obj, Visitor *v,
+ void *opaque, const char *name,
+ Error **errp)
+{
+ uint64_t value = *(uint64_t *)opaque;
+ visit_type_uint64(v, &value, name, errp);
+}
+
+void object_property_add_uint8_ptr(Object *obj, const char *name,
+ const uint8_t *v, Error **errp)
+{
+ object_property_add(obj, name, "uint8", property_get_uint8_ptr,
+ NULL, NULL, (void *)v, errp);
+}
+
+void object_property_add_uint16_ptr(Object *obj, const char *name,
+ const uint16_t *v, Error **errp)
+{
+ object_property_add(obj, name, "uint16", property_get_uint16_ptr,
+ NULL, NULL, (void *)v, errp);
+}
+
+void object_property_add_uint32_ptr(Object *obj, const char *name,
+ const uint32_t *v, Error **errp)
+{
+ object_property_add(obj, name, "uint32", property_get_uint32_ptr,
+ NULL, NULL, (void *)v, errp);
+}
+
+void object_property_add_uint64_ptr(Object *obj, const char *name,
+ const uint64_t *v, Error **errp)
+{
+ object_property_add(obj, name, "uint64", property_get_uint64_ptr,
+ NULL, NULL, (void *)v, errp);
+}
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index 45c662d..1ae6fe5 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -43,6 +43,7 @@
#include "sysemu/sysemu.h"
#include "hw/qdev-properties.h"
+#include "qom/property.h"
#include "hw/cpu/icc_bus.h"
#ifndef CONFIG_USER_ONLY
#include "hw/xen/xen.h"
diff --git a/ui/console.c b/ui/console.c
index ab84549..25ac4ff 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -28,6 +28,7 @@
#include "qmp-commands.h"
#include "sysemu/char.h"
#include "trace.h"
+#include "qom/property.h"
#define DEFAULT_BACKSCROLL 512
#define CONSOLE_CURSOR_PERIOD 500
--
1.8.1.4
- [Qemu-ppc] [PATCH v2 0/9] Dynamic sysbus device allocation support, Alexander Graf, 2014/07/02
- [Qemu-ppc] [PATCH v2 2/9] qom: macroify integer property helpers, Alexander Graf, 2014/07/02
- [Qemu-ppc] [PATCH v2 4/9] qom: Add generic object property g_free helper, Alexander Graf, 2014/07/02
- [Qemu-ppc] [PATCH v2 7/9] PPC: e500: Support dynamically spawned sysbus devices, Alexander Graf, 2014/07/02
- [Qemu-ppc] [PATCH v2 8/9] e500: Add support for eTSEC in device tree, Alexander Graf, 2014/07/02
- [Qemu-ppc] [PATCH v2 6/9] sysbus: Make devices spawnable via -device, Alexander Graf, 2014/07/02
- [Qemu-ppc] [PATCH v2 9/9] PPC: Fix default config ordering and add eTSEC for ppc64, Alexander Graf, 2014/07/02
- [Qemu-ppc] [PATCH v2 1/9] qom: Move property helpers to own file,
Alexander Graf <=
- [Qemu-ppc] [PATCH v2 5/9] sysbus: Add user map hints, Alexander Graf, 2014/07/02
- [Qemu-ppc] [PATCH v2 3/9] qom: Expose property helpers for get/set of integers, Alexander Graf, 2014/07/02