All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Marc-André Lureau" <marcandre.lureau@redhat.com>
To: qemu-devel@nongnu.org
Cc: armbru@redhat.com, "Marc-André Lureau" <marcandre.lureau@redhat.com>
Subject: [Qemu-devel] [PATCH v2 05/45] qdev: remove PropertyInfo.qtype field
Date: Wed, 31 May 2017 17:56:29 +0400	[thread overview]
Message-ID: <20170531135709.345-6-marcandre.lureau@redhat.com> (raw)
In-Reply-To: <20170531135709.345-1-marcandre.lureau@redhat.com>

Remove dependency on qapi qtype, replace a field by a few PropertyInfo
callbacks to set the default value type (introduced in commit 4f2d3d7).

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/qdev-core.h       |  2 +-
 include/hw/qdev-properties.h |  5 -----
 hw/core/qdev-properties.c    | 35 ++++++++++++++++++++++++++++++++++-
 hw/core/qdev.c               | 13 ++-----------
 4 files changed, 37 insertions(+), 18 deletions(-)

diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index e69489ec6c..9523339762 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -226,7 +226,6 @@ struct Property {
     PropertyInfo *info;
     ptrdiff_t    offset;
     uint8_t      bitnr;
-    QType        qtype;
     int64_t      defval;
     int          arrayoffset;
     PropertyInfo *arrayinfo;
@@ -238,6 +237,7 @@ struct PropertyInfo {
     const char *description;
     const char * const *enum_table;
     int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len);
+    void (*set_default_value)(Object *obj, const Property *prop);
     ObjectPropertyAccessor *get;
     ObjectPropertyAccessor *set;
     ObjectPropertyRelease *release;
diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
index d206fc93dd..85e68998a9 100644
--- a/include/hw/qdev-properties.h
+++ b/include/hw/qdev-properties.h
@@ -42,7 +42,6 @@ extern PropertyInfo qdev_prop_arraylen;
         .info      = &(_prop),                                          \
         .offset    = offsetof(_state, _field)                           \
             + type_check(_type,typeof_field(_state, _field)),           \
-        .qtype     = QTYPE_QINT,                                        \
         .defval    = (_type)_defval,                                    \
         }
 #define DEFINE_PROP_BIT(_name, _state, _field, _bit, _defval) {  \
@@ -51,7 +50,6 @@ extern PropertyInfo qdev_prop_arraylen;
         .bitnr    = (_bit),                                      \
         .offset    = offsetof(_state, _field)                    \
             + type_check(uint32_t,typeof_field(_state, _field)), \
-        .qtype     = QTYPE_QBOOL,                                \
         .defval    = (bool)_defval,                              \
         }
 #define DEFINE_PROP_BIT64(_name, _state, _field, _bit, _defval) {       \
@@ -60,7 +58,6 @@ extern PropertyInfo qdev_prop_arraylen;
         .bitnr    = (_bit),                                             \
         .offset    = offsetof(_state, _field)                           \
             + type_check(uint64_t, typeof_field(_state, _field)),       \
-        .qtype     = QTYPE_QBOOL,                                       \
         .defval    = (bool)_defval,                                     \
         }
 
@@ -69,7 +66,6 @@ extern PropertyInfo qdev_prop_arraylen;
         .info      = &(qdev_prop_bool),                          \
         .offset    = offsetof(_state, _field)                    \
             + type_check(bool, typeof_field(_state, _field)),    \
-        .qtype     = QTYPE_QBOOL,                                \
         .defval    = (bool)_defval,                              \
         }
 
@@ -105,7 +101,6 @@ extern PropertyInfo qdev_prop_arraylen;
         .info = &(qdev_prop_arraylen),                                  \
         .offset = offsetof(_state, _field)                              \
             + type_check(uint32_t, typeof_field(_state, _field)),       \
-        .qtype = QTYPE_QINT,                                            \
         .arrayinfo = &(_arrayprop),                                     \
         .arrayfieldsize = sizeof(_arraytype),                           \
         .arrayoffset = offsetof(_state, _arrayfield),                   \
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index fa3617db2d..482efb2683 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -69,6 +69,12 @@ static void set_enum(Object *obj, Visitor *v, const char *name, void *opaque,
     visit_type_enum(v, prop->name, ptr, prop->info->enum_table, errp);
 }
 
+static void set_default_value_enum(Object *obj, const Property *prop)
+{
+    object_property_set_str(obj, prop->info->enum_table[prop->defval],
+                            prop->name, &error_abort);
+}
+
 /* Bit */
 
 static uint32_t qdev_get_prop_mask(Property *prop)
@@ -120,11 +126,17 @@ static void prop_set_bit(Object *obj, Visitor *v, const char *name,
     bit_prop_set(dev, prop, value);
 }
 
+static void set_default_value_bool(Object *obj, const Property *prop)
+{
+    object_property_set_bool(obj, prop->defval, prop->name, &error_abort);
+}
+
 PropertyInfo qdev_prop_bit = {
     .name  = "bool",
     .description = "on/off",
     .get   = prop_get_bit,
     .set   = prop_set_bit,
+    .set_default_value = set_default_value_bool,
 };
 
 /* Bit64 */
@@ -183,6 +195,7 @@ PropertyInfo qdev_prop_bit64 = {
     .description = "on/off",
     .get   = prop_get_bit64,
     .set   = prop_set_bit64,
+    .set_default_value = set_default_value_bool,
 };
 
 /* --- bool --- */
@@ -216,6 +229,7 @@ PropertyInfo qdev_prop_bool = {
     .name  = "bool",
     .get   = get_bool,
     .set   = set_bool,
+    .set_default_value = set_default_value_bool,
 };
 
 /* --- 8bit integer --- */
@@ -245,10 +259,16 @@ static void set_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
     visit_type_uint8(v, name, ptr, errp);
 }
 
+static void set_default_value_int(Object *obj, const Property *prop)
+{
+    object_property_set_int(obj, prop->defval, prop->name, &error_abort);
+}
+
 PropertyInfo qdev_prop_uint8 = {
     .name  = "uint8",
     .get   = get_uint8,
     .set   = set_uint8,
+    .set_default_value = set_default_value_int,
 };
 
 /* --- 16bit integer --- */
@@ -282,6 +302,7 @@ PropertyInfo qdev_prop_uint16 = {
     .name  = "uint16",
     .get   = get_uint16,
     .set   = set_uint16,
+    .set_default_value = set_default_value_int,
 };
 
 /* --- 32bit integer --- */
@@ -340,12 +361,14 @@ PropertyInfo qdev_prop_uint32 = {
     .name  = "uint32",
     .get   = get_uint32,
     .set   = set_uint32,
+    .set_default_value = set_default_value_int,
 };
 
 PropertyInfo qdev_prop_int32 = {
     .name  = "int32",
     .get   = get_int32,
     .set   = set_int32,
+    .set_default_value = set_default_value_int,
 };
 
 /* --- 64bit integer --- */
@@ -379,6 +402,7 @@ PropertyInfo qdev_prop_uint64 = {
     .name  = "uint64",
     .get   = get_uint64,
     .set   = set_uint64,
+    .set_default_value = set_default_value_int,
 };
 
 /* --- string --- */
@@ -526,6 +550,7 @@ PropertyInfo qdev_prop_on_off_auto = {
     .enum_table = OnOffAuto_lookup,
     .get = get_enum,
     .set = set_enum,
+    .set_default_value = set_default_value_enum,
 };
 
 /* --- lost tick policy --- */
@@ -537,6 +562,7 @@ PropertyInfo qdev_prop_losttickpolicy = {
     .enum_table  = LostTickPolicy_lookup,
     .get   = get_enum,
     .set   = set_enum,
+    .set_default_value = set_default_value_enum,
 };
 
 /* --- Block device error handling policy --- */
@@ -550,6 +576,7 @@ PropertyInfo qdev_prop_blockdev_on_error = {
     .enum_table = BlockdevOnError_lookup,
     .get = get_enum,
     .set = set_enum,
+    .set_default_value = set_default_value_enum,
 };
 
 /* --- BIOS CHS translation */
@@ -563,6 +590,7 @@ PropertyInfo qdev_prop_bios_chs_trans = {
     .enum_table = BiosAtaTranslation_lookup,
     .get = get_enum,
     .set = set_enum,
+    .set_default_value = set_default_value_enum,
 };
 
 /* --- FDC default drive types */
@@ -573,7 +601,8 @@ PropertyInfo qdev_prop_fdc_drive_type = {
                    "144/288/120/none/auto",
     .enum_table = FloppyDriveType_lookup,
     .get = get_enum,
-    .set = set_enum
+    .set = set_enum,
+    .set_default_value = set_default_value_enum,
 };
 
 /* --- pci address --- */
@@ -648,6 +677,7 @@ PropertyInfo qdev_prop_pci_devfn = {
     .print = print_pci_devfn,
     .get   = get_int32,
     .set   = set_pci_devfn,
+    .set_default_value = set_default_value_int,
 };
 
 /* --- blocksize --- */
@@ -695,6 +725,7 @@ PropertyInfo qdev_prop_blocksize = {
     .description = "A power of two between 512 and 32768",
     .get   = get_uint16,
     .set   = set_blocksize,
+    .set_default_value = set_default_value_int,
 };
 
 /* --- pci host address --- */
@@ -917,6 +948,7 @@ PropertyInfo qdev_prop_arraylen = {
     .name = "uint32",
     .get = get_uint32,
     .set = set_prop_arraylen,
+    .set_default_value = set_default_value_int,
 };
 
 /* --- public helpers --- */
@@ -1153,4 +1185,5 @@ PropertyInfo qdev_prop_size = {
     .name  = "size",
     .get = get_size,
     .set = set_size,
+    .set_default_value = set_default_value_int,
 };
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 71ff95fd71..6674e11840 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -794,17 +794,8 @@ void qdev_property_add_static(DeviceState *dev, Property *prop,
                                     prop->info->description,
                                     &error_abort);
 
-    if (prop->qtype == QTYPE_NONE) {
-        return;
-    }
-
-    if (prop->qtype == QTYPE_QBOOL) {
-        object_property_set_bool(obj, prop->defval, prop->name, &error_abort);
-    } else if (prop->info->enum_table) {
-        object_property_set_str(obj, prop->info->enum_table[prop->defval],
-                                prop->name, &error_abort);
-    } else if (prop->qtype == QTYPE_QINT) {
-        object_property_set_int(obj, prop->defval, prop->name, &error_abort);
+    if (prop->info->set_default_value) {
+        prop->info->set_default_value(obj, prop);
     }
 }
 
-- 
2.13.0.91.g00982b8dd

  parent reply	other threads:[~2017-05-31 13:57 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-31 13:56 [Qemu-devel] [PATCH v2 00/45] qobject/qapi: add uint type Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 01/45] qobject-input-visitor: Reject non-finite numbers with keyval Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 02/45] qapi: Document visit_type_any() issues with keyval input Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 03/45] tests/qapi-schema: Avoid 'str' in alternate test cases Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 04/45] qapi: Reject alternates that can't work with keyval_parse() Marc-André Lureau
2017-05-31 13:56 ` Marc-André Lureau [this message]
2017-06-01 11:19   ` [Qemu-devel] [PATCH v2 05/45] qdev: remove PropertyInfo.qtype field Markus Armbruster
2017-06-07 12:31     ` Peter Maydell
2017-06-07 13:09       ` Markus Armbruster
2017-06-07 13:44         ` Peter Maydell
2017-06-07 17:37           ` Markus Armbruster
2017-06-09 14:04             ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 06/45] object: fix potential leak in getters Marc-André Lureau
2017-06-01 11:32   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 07/45] tests: remove alt num-int cases Marc-André Lureau
2017-06-01 11:58   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 08/45] tests: add more int/number ranges checks Marc-André Lureau
2017-06-01 14:09   ` Markus Armbruster
2017-06-06 16:14     ` Marc-André Lureau
2017-06-06 19:08       ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 09/45] qapi: merge QInt and QFloat in QNum Marc-André Lureau
2017-06-02  7:03   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 10/45] qapi: Remove visit_start_alternate() parameter promote_int Marc-André Lureau
2017-06-02  7:57   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 11/45] tests: remove /qnum/destroy test Marc-André Lureau
2017-06-02  8:00   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 12/45] qnum: add uint type Marc-André Lureau
2017-06-02  8:05   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 13/45] json: learn to parse uint64 numbers Marc-André Lureau
2017-06-02  8:24   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 14/45] qapi: update the qobject visitor to use QNUM_U64 Marc-André Lureau
2017-06-02 11:18   ` Markus Armbruster
2017-06-02 11:20   ` Markus Armbruster
2017-06-02 11:34     ` Marc-André Lureau
2017-06-02 12:36       ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 15/45] object: add uint property setter/getter Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 16/45] q35: fix get_mmcfg_size to use uint64 visitor Marc-André Lureau
2017-06-02 11:34   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 17/45] object: use more specific property type names Marc-André Lureau
2017-06-02 13:38   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 18/45] qdev: make default property int Marc-André Lureau
2017-06-02 13:49   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 19/45] qdev: add unsigned properties Marc-André Lureau
2017-06-02 13:55   ` Markus Armbruster
2017-06-02 14:00     ` Marc-André Lureau
2017-06-02 14:05       ` Marc-André Lureau
2017-06-06 12:33         ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 20/45] apic-common: make "id" property a uint32 Marc-André Lureau
2017-06-02 14:05   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 21/45] qdev: use appropriate getter/setters type Marc-André Lureau
2017-06-02 14:51   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 22/45] isa: use get_uint() for "io-base" Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 23/45] pc-dimm: use get_uint() for dimm properties Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 24/45] pc-dimm: make "size" property uint64 Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 25/45] pcihp: use get_uint() for "bsel" property Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 26/45] aspeed: use {set, get}_uint() for "ram-size" property Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 27/45] bcm2835_fb: use {get, set}_uint() for "vcram-size" and "vcram-base" Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 28/45] platform-bus: use get_uint() for "addr" property Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 29/45] acpi: use get_uint() for "acpi-pcihp-io*" properties Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 30/45] acpi: use get_uint() for various acpi properties Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 31/45] acpi: use get_uint() for "pci-hole*" properties Marc-André Lureau
2017-06-06 12:24   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 32/45] pc: use get_uint() for "iobase" property Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 33/45] pc: use get_uint() for "apic-id" property Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 34/45] pc: use get_uint() for "hpet-intcap" property Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 35/45] xen: use get_uint() for "max-ram-below-4g" property Marc-André Lureau
2017-05-31 13:57 ` [Qemu-devel] [PATCH v2 36/45] arm: use get_uint() for "mp-affinity" property Marc-André Lureau
2017-05-31 13:57 ` [Qemu-devel] [PATCH v2 37/45] auxbus: use get_uint() for "addr" property Marc-André Lureau
2017-05-31 13:57 ` [Qemu-devel] [PATCH v2 38/45] pvpanic: use get_uint() for "ioport" property Marc-André Lureau
2017-05-31 13:57 ` [Qemu-devel] [PATCH v2 39/45] pnv-core: use get_uint() for "core-pir" property Marc-André Lureau
2017-05-31 13:57 ` [Qemu-devel] [PATCH v2 40/45] numa: use get_uint() for "size" property Marc-André Lureau
2017-05-31 13:57 ` [Qemu-devel] [PATCH v2 41/45] i386/cpu: use get_uint() for "min-level"/"min-xlevel" properties Marc-André Lureau
2017-05-31 13:57 ` [Qemu-devel] [PATCH v2 42/45] console: use get_uint() for "head" property Marc-André Lureau
2017-05-31 13:57 ` [Qemu-devel] [PATCH v2 43/45] tests/qdict: check more get_try_int() cases Marc-André Lureau
2017-06-06 12:26   ` Markus Armbruster
2017-05-31 13:57 ` [Qemu-devel] [PATCH v2 44/45] RFC: qdict: add uint Marc-André Lureau
2017-06-06 12:28   ` Markus Armbruster
2017-05-31 13:57 ` [Qemu-devel] [PATCH v2 45/45] qobject: move dump_qobject() from block/ to qobject/ Marc-André Lureau
2017-05-31 20:06 ` [Qemu-devel] [PATCH v2 00/45] qobject/qapi: add uint type no-reply
2017-06-06 12:36 ` Markus Armbruster

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170531135709.345-6-marcandre.lureau@redhat.com \
    --to=marcandre.lureau@redhat.com \
    --cc=armbru@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.