All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Marc-André Lureau" <marcandre.lureau@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Markus Armbruster" <armbru@redhat.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Michael Roth" <michael.roth@amd.com>,
	"Pierrick Bouvier" <pierrick.bouvier@oss.qualcomm.com>,
	"Philippe Mathieu-Daudé" <philmd@mailo.com>,
	"Glenn Miles" <milesg@linux.ibm.com>,
	qemu-ppc@nongnu.org, qemu-arm@nongnu.org
Subject: [PATCH v3 57/74] hw/gpio/pca955x: convert pin/led property to QAPI-aware enum
Date: Tue, 18 Aug 2026 16:36:36 +0400	[thread overview]
Message-ID: <20260818-qom-qapi-v3-57-24b8bbbe3d86@redhat.com> (raw)
In-Reply-To: <20260818-qom-qapi-v3-0-24b8bbbe3d86@redhat.com>

Replaces the runtime-parsed visitor-based QOM property accessors with
compile-time per-pin/per-LED accessor functions using QEMU_REPEAT.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 hw/gpio/pca9552.c | 205 +++++++++++++++++++++---------------------------------
 hw/gpio/pca9554.c | 136 ++++++++++++++----------------------
 2 files changed, 131 insertions(+), 210 deletions(-)

diff --git a/hw/gpio/pca9552.c b/hw/gpio/pca9552.c
index 16741c22dea3..b743a30d80ff 100644
--- a/hw/gpio/pca9552.c
+++ b/hw/gpio/pca9552.c
@@ -25,6 +25,7 @@
 #include "qapi/error.h"
 #include "qapi/qapi-types-machine.h"
 #include "qapi/qapi-visit-machine.h"
+#include "qapi/qapi-type-infos-machine.h"
 #include "trace.h"
 #include "qom/object.h"
 
@@ -354,33 +355,6 @@ static int pca955x_event(I2CSlave *i2c, enum i2c_event event)
     return 0;
 }
 
-static void pca955x_get_led(Object *obj, Visitor *v, const char *name,
-                            void *opaque, Error **errp)
-{
-    PCA955xClass *k = PCA955X_GET_CLASS(obj);
-    PCA955xState *s = PCA955X(obj);
-    int led, rc, reg;
-    Pca9552LedState state;
-
-    rc = sscanf(name, "led%2d", &led);
-    if (rc != 1) {
-        error_setg(errp, "%s: error reading %s", __func__, name);
-        return;
-    }
-    if (led < 0 || led >= k->pin_count) {
-        error_setg(errp, "%s: invalid led %s", __func__, name);
-        return;
-    }
-    /*
-     * Get the LSx register as the qom interface should expose the device
-     * state, not the modeled 'input line' behaviour which would come from
-     * reading the INPUTx reg
-     */
-    reg = PCA9552_LS0 + led / 4;
-    state = (pca955x_read(s, reg) >> ((led % 4) * 2)) & 0x3;
-    visit_type_Pca9552LedState(v, name, &state, errp);
-}
-
 /*
  * Return an LED selector register value based on an existing one, with
  * the appropriate 2-bit state value set for the given LED number (0-3).
@@ -391,97 +365,8 @@ static inline uint8_t pca955x_ledsel(uint8_t oldval, int led_num, int state)
                 ((state & 0x3) << (led_num << 1));
 }
 
-static void pca955x_set_led(Object *obj, Visitor *v, const char *name,
-                            void *opaque, Error **errp)
-{
-    PCA955xClass *k = PCA955X_GET_CLASS(obj);
-    PCA955xState *s = PCA955X(obj);
-    int led, rc, reg, val;
-    Pca9552LedState state;
-
-    if (!visit_type_Pca9552LedState(v, name, &state, errp)) {
-        return;
-    }
-    rc = sscanf(name, "led%2d", &led);
-    if (rc != 1) {
-        error_setg(errp, "%s: error reading %s", __func__, name);
-        return;
-    }
-    if (led < 0 || led >= k->pin_count) {
-        error_setg(errp, "%s: invalid led %s", __func__, name);
-        return;
-    }
-
-    reg = PCA9552_LS0 + led / 4;
-    val = pca955x_read(s, reg);
-    val = pca955x_ledsel(val, led % 4, state);
-    pca955x_write(s, reg, val);
-}
-
 static void pca955x_set_ext_state(PCA955xState *s, int pin, int level);
 
-static void pca955x_get_pin(Object *obj, Visitor *v, const char *name,
-                            void *opaque, Error **errp)
-{
-    PCA955xClass *k = PCA955X_GET_CLASS(obj);
-    PCA955xState *s = PCA955X(obj);
-    int pin, rc;
-    uint8_t input_reg;
-    Pca9552PinState state;
-
-    rc = sscanf(name, "pin%2d", &pin);
-    if (rc != 1) {
-        error_setg(errp, "%s: error reading %s", __func__, name);
-        return;
-    }
-    if (pin < 0 || pin >= k->pin_count) {
-        error_setg(errp, "%s invalid pin %s", __func__, name);
-        return;
-    }
-
-    /*
-     * Report the raw pin logic level; polarity inversion is a read-time
-     * transform applied to the INPUT register, not to the pin state itself.
-     */
-    input_reg = PCA9535_INPUT0 + (pin / 8);
-    state = (s->regs[input_reg] >> (pin % 8)) & 0x1;
-    visit_type_Pca9552PinState(v, name, &state, errp);
-}
-
-static void pca955x_set_pin(Object *obj, Visitor *v, const char *name,
-                            void *opaque, Error **errp)
-{
-    PCA955xClass *k = PCA955X_GET_CLASS(obj);
-    PCA955xState *s = PCA955X(obj);
-    int pin, rc;
-    Pca9552PinState state;
-    uint8_t config_reg;
-
-    if (!visit_type_Pca9552PinState(v, name, &state, errp)) {
-        return;
-    }
-    rc = sscanf(name, "pin%2d", &pin);
-    if (rc != 1) {
-        error_setg(errp, "%s: error reading %s", __func__, name);
-        return;
-    }
-    if (pin < 0 || pin >= k->pin_count) {
-        error_setg(errp, "%s invalid pin %s", __func__, name);
-        return;
-    }
-
-    /* Only input-configured pins can be driven by an external device. */
-    config_reg = PCA9535_CONFIG0 + (pin / 8);
-    if (!((s->regs[config_reg] >> (pin % 8)) & 0x1)) {
-        qemu_log_mask(LOG_UNIMP,
-                      "%s: pin %d is configured as output, ignoring set\n",
-                      s->description, pin);
-        return;
-    }
-
-    pca955x_set_ext_state(s, pin, state != PCA9552_PIN_STATE_LOW);
-}
-
 static const VMStateDescription pca9552_vmstate = {
     .name = "PCA9552",
     .version_id = 0,
@@ -536,26 +421,92 @@ static void pca9535_reset_hold(Object *obj, ResetType type)
     s->len = 0;
 }
 
+/*
+ * Get the LSx register as the qom interface should expose the device
+ * state, not the modeled 'input line' behaviour which would come from
+ * reading the INPUTx reg
+ */
+#define DEFINE_LED_ACCESSORS(n)                                              \
+static int prop_get_led##n(Object *obj, Error **errp)                        \
+{                                                                            \
+    PCA955xState *s = PCA955X(obj);                                          \
+    uint8_t reg = PCA9552_LS0 + (n) / 4;                                     \
+    return (pca955x_read(s, reg) >> (((n) % 4) * 2)) & 0x3;                  \
+}                                                                            \
+static void prop_set_led##n(Object *obj, int val, Error **errp)              \
+{                                                                            \
+    PCA955xState *s = PCA955X(obj);                                          \
+    uint8_t reg = PCA9552_LS0 + (n) / 4;                                     \
+    uint8_t old = pca955x_read(s, reg);                                      \
+    pca955x_write(s, reg, pca955x_ledsel(old, (n) % 4, val));                \
+}
+
+QEMU_REPEAT(PCA955X_PIN_COUNT_MAX, DEFINE_LED_ACCESSORS)
+
+#define LED_ENUM_PROP(n) {                                              \
+    .name = "led" #n,                                                   \
+    .default_value = -1,                                                \
+    .qapi_type = &Pca9552LedState_type_info,                            \
+    .get = prop_get_led##n,                                             \
+    .set = prop_set_led##n,                                             \
+},
+
+static const QapiEnumProp led_enum_props[] = {
+    QEMU_REPEAT(PCA955X_PIN_COUNT_MAX, LED_ENUM_PROP)
+};
+
+/*
+ * Report the raw pin logic level; polarity inversion is a read-time
+ * transform applied to the INPUT register, not to the pin state
+ * itself.
+ */
+#define DEFINE_PIN_ACCESSORS(n)                                              \
+static int prop_get_pin##n(Object *obj, Error **errp)                        \
+{                                                                            \
+    PCA955xState *s = PCA955X(obj);                                          \
+    uint8_t input_reg = PCA9535_INPUT0 + (n) / 8;                            \
+    return (s->regs[input_reg] >> ((n) % 8)) & 0x1;                          \
+}                                                                            \
+static void prop_set_pin##n(Object *obj, int val, Error **errp)              \
+{                                                                            \
+    PCA955xState *s = PCA955X(obj);                                          \
+    uint8_t config_reg = PCA9535_CONFIG0 + (n) / 8;                          \
+    /* Only input-configured pins can be driven by an external device */     \
+    if (!((s->regs[config_reg] >> ((n) % 8)) & 0x1)) {                       \
+        qemu_log_mask(LOG_UNIMP,                                             \
+                      "%s: pin %d configured as output, ignoring set\n",     \
+                      s->description, (n));                                  \
+        return;                                                              \
+    }                                                                        \
+    pca955x_set_ext_state(s, (n), val != PCA9552_PIN_STATE_LOW);             \
+}
+
+QEMU_REPEAT(PCA955X_PIN_COUNT_MAX, DEFINE_PIN_ACCESSORS)
+
+#define PIN_ENUM_PROP(n) {                                              \
+    .name = "pin" #n,                                                   \
+    .default_value = -1,                                                \
+    .qapi_type = &Pca9552PinState_type_info,                            \
+    .get = prop_get_pin##n,                                             \
+    .set = prop_set_pin##n,                                             \
+},
+
+static const QapiEnumProp pin_enum_props[] = {
+    QEMU_REPEAT(PCA955X_PIN_COUNT_MAX, PIN_ENUM_PROP)
+};
+
 static void pca955x_initfn(Object *obj)
 {
     PCA955xClass *k = PCA955X_GET_CLASS(obj);
 
     assert(k->pin_count <= PCA955X_PIN_COUNT_MAX);
+    /* use array/list instead of individual QAPI enum properties */
     for (int ix = 0; ix < k->pin_count; ix++) {
-        char *name;
-
         if (k->has_led_support) {
-            /* LED variant: expose the LED selector state as led%d. */
-            name = g_strdup_printf("led%d", ix);
-            object_property_add(obj, name, "Pca9552LedState",
-                                pca955x_get_led, pca955x_set_led, NULL, NULL);
+            object_property_add_qapi_enum(obj, &led_enum_props[ix]);
         } else {
-            /* GPIO variant: expose the pin logic level as pin%d. */
-            name = g_strdup_printf("pin%d", ix);
-            object_property_add(obj, name, "Pca9552PinState",
-                                pca955x_get_pin, pca955x_set_pin, NULL, NULL);
+            object_property_add_qapi_enum(obj, &pin_enum_props[ix]);
         }
-        g_free(name);
     }
 }
 
diff --git a/hw/gpio/pca9554.c b/hw/gpio/pca9554.c
index e4eddc829ef7..f2a5b94a36d8 100644
--- a/hw/gpio/pca9554.c
+++ b/hw/gpio/pca9554.c
@@ -18,7 +18,7 @@
 #include "qapi/error.h"
 #include "qapi/qapi-types-machine.h"
 #include "qapi/qapi-visit-machine.h"
-#include "qapi/visitor.h"
+#include "qapi/qapi-type-infos-machine.h"
 #include "trace.h"
 #include "qom/object.h"
 
@@ -151,83 +151,60 @@ static void pca9554_set_ext_state(PCA9554State *s, int pin, int level)
     }
 }
 
-static void pca9554_get_pin(Object *obj, Visitor *v, const char *name,
-                            void *opaque, Error **errp)
-{
-    PCA9554State *s = PCA9554(obj);
-    int pin, rc;
-    Pca9554PinState state;
-
-    rc = sscanf(name, "pin%2d", &pin);
-    if (rc != 1) {
-        error_setg(errp, "%s: error reading %s", __func__, name);
-        return;
-    }
-    if (pin < 0 || pin >= PCA9554_GET_CLASS(s)->pin_count) {
-        error_setg(errp, "%s invalid pin %s", __func__, name);
-        return;
-    }
-
-    /*
-     * Report the physical pin level. The input register is kept in sync by
-     * pca9554_update_pin_input(): output pins mirror the OUTPUT register and
-     * input pins reflect the externally driven (or pulled-up) level, so it
-     * holds the wire level regardless of the configured direction.
-     */
-    state = (s->regs[PCA9554_INPUT] >> pin) & 0x1;
-    visit_type_Pca9554PinState(v, name, &state, errp);
+/*
+ * Report the physical pin level. The input register is kept in sync
+ * by pca9554_update_pin_input(): output pins mirror the OUTPUT
+ * register and input pins reflect the externally driven (or
+ * pulled-up) level, so it holds the wire level regardless of the
+ * configured direction.
+ */
+#define DEFINE_PIN_ACCESSORS(n)                                              \
+static int prop_get_pin##n(Object *obj, Error **errp)                        \
+{                                                                            \
+    PCA9554State *s = PCA9554(obj);                                          \
+    return (s->regs[PCA9554_INPUT] >> (n)) & 0x1;                            \
+}                                                                            \
+static void prop_set_pin##n(Object *obj, int val, Error **errp)              \
+{                                                                            \
+    PCA9554State *s = PCA9554(obj);                                          \
+    if (s->hw_dir) {                                                         \
+        if (!((s->regs[PCA9554_CONFIG] >> (n)) & 0x1)) {                     \
+            qemu_log_mask(LOG_UNIMP,                                         \
+                          "%s: pin %d configured as output,"                 \
+                          " ignoring set\n",                                 \
+                          s->description, (n));                              \
+            return;                                                          \
+        }                                                                    \
+        pca9554_set_ext_state(s, (n), val != PCA9554_PIN_STATE_LOW);         \
+    } else {                                                                 \
+        /* Legacy behavior: force output mode and drive */                   \
+        uint8_t mask = 0x1 << (n);                                           \
+        int v = pca9554_read(s, PCA9554_OUTPUT);                             \
+        if (val == PCA9554_PIN_STATE_LOW) {                                  \
+            v &= ~mask;                                                      \
+        } else {                                                             \
+            v |= mask;                                                       \
+        }                                                                    \
+        pca9554_write(s, PCA9554_OUTPUT, v);                                 \
+        v = pca9554_read(s, PCA9554_CONFIG);                                 \
+        v &= ~mask;                                                          \
+        pca9554_write(s, PCA9554_CONFIG, v);                                 \
+    }                                                                        \
 }
 
-static void pca9554_set_pin(Object *obj, Visitor *v, const char *name,
-                            void *opaque, Error **errp)
-{
-    PCA9554State *s = PCA9554(obj);
-    int pin, rc, val;
-    uint8_t mask;
-    Pca9554PinState state;
+QEMU_REPEAT(PCA9554_PIN_COUNT, DEFINE_PIN_ACCESSORS)
 
-    if (!visit_type_Pca9554PinState(v, name, &state, errp)) {
-        return;
-    }
-    rc = sscanf(name, "pin%2d", &pin);
-    if (rc != 1) {
-        error_setg(errp, "%s: error reading %s", __func__, name);
-        return;
-    }
-    if (pin < 0 || pin >= PCA9554_GET_CLASS(s)->pin_count) {
-        error_setg(errp, "%s invalid pin %s", __func__, name);
-        return;
-    }
+#define PIN_ENUM_PROP(n) {                                              \
+    .name = "pin" #n,                                                   \
+    .default_value = -1,                                                \
+    .qapi_type = &Pca9554PinState_type_info,                            \
+    .get = prop_get_pin##n,                                             \
+    .set = prop_set_pin##n,                                             \
+},
 
-    if (s->hw_dir) {
-        /* Warn and ignore if the guest has configured this pin as output */
-        if (!((s->regs[PCA9554_CONFIG] >> pin) & 0x1)) {
-            qemu_log_mask(LOG_UNIMP,
-                          "%s: pin %d is configured as output, "
-                          "ignoring external set\n",
-                          s->description, pin);
-            return;
-        }
-        /* Drive the external input level */
-        pca9554_set_ext_state(s, pin, state != PCA9554_PIN_STATE_LOW);
-    } else {
-        /* Legacy behavior: force output mode and drive */
-        /* First, modify the output register bit */
-        val = pca9554_read(s, PCA9554_OUTPUT);
-        mask = 0x1 << pin;
-        if (state == PCA9554_PIN_STATE_LOW) {
-            val &= ~(mask);
-        } else {
-            val |= mask;
-        }
-        pca9554_write(s, PCA9554_OUTPUT, val);
-
-        /* Then, clear the config register bit for output mode */
-        val = pca9554_read(s, PCA9554_CONFIG);
-        val &= ~mask;
-        pca9554_write(s, PCA9554_CONFIG, val);
-    }
-}
+static const QapiEnumProp pin_enum_props[] = {
+    QEMU_REPEAT(PCA9554_PIN_COUNT, PIN_ENUM_PROP)
+};
 
 static const VMStateDescription pca9554_vmstate = {
     .name = "PCA9554",
@@ -264,16 +241,9 @@ static void pca9554_reset(DeviceState *dev)
 static void pca9554_initfn(Object *obj)
 {
     PCA9554Class *pc = PCA9554_GET_CLASS(obj);
-    int pin;
 
-    for (pin = 0; pin < pc->pin_count; pin++) {
-        char *name;
-
-        name = g_strdup_printf("pin%d", pin);
-        object_property_add(obj, name, "Pca9554PinState",
-                            pca9554_get_pin, pca9554_set_pin,
-                            NULL, NULL);
-        g_free(name);
+    for (int pin = 0; pin < pc->pin_count; pin++) {
+        object_property_add_qapi_enum(obj, &pin_enum_props[pin]);
     }
 }
 

-- 
2.55.0.543.g5ebe2ebe4ea8



  parent reply	other threads:[~2026-08-18 13:13 UTC|newest]

Thread overview: 79+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-18 11:10 [PATCH v3 00/74] qom/qdev: associate properties with QAPI schema types Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 01/74] qapi: add QAPITypeInfo struct definition Marc-André Lureau
2026-08-21 13:40   ` Markus Armbruster
2026-08-21 15:33     ` Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 02/74] qapi/gen: fix _module_basename for multi-dash 'what' parameters Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 03/74] qapi: factor out QAPISchemaUsedTypes from introspect visitor Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 04/74] qapi: register all introspectable types, not just QMP-reachable ones Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 05/74] qapi: add type-infos generator Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 06/74] meson: add qapi-type-infos-*.c/h to build Marc-André Lureau
2026-08-18 11:41   ` Kostiantyn Kostiuk
2026-08-18 11:10 ` [PATCH v3 07/74] qom: add qapi_type field to ObjectProperty Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 08/74] qapi/qom: add qapi-type field to ObjectPropertyInfo Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 09/74] qom/qmp: populate qapi-type in QMP handlers Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 10/74] qom: add object_property_set_default_enum() Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 11/74] qom: add object_{class_}property_add_qapi Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 12/74] qom: add object_{class_}property_add_qapi_enum Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 13/74] tests: update check-qom-proplist for QAPI-aware property registration Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 14/74] qom: convert enum properties to QAPI-aware registration Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 15/74] qom: remove old enum property registration API Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 16/74] qom: convert struct properties to QAPI-aware registration Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 17/74] x86: convert OnOffAuto " Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 18/74] microvm: " Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 19/74] pc: convert OnOffAuto vmport property " Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 20/74] arm/virt: convert OnOffAuto acpi " Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 21/74] riscv/virt: convert OnOffAuto properties " Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 22/74] loongarch/virt: " Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 23/74] hostmem-file: convert OnOffAuto rom property " Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 24/74] sev: convert OnOffAuto legacy-vm-type " Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 25/74] whpx: convert OnOffAuto hyperv " Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 26/74] whpx: convert OnOffAuto arch properties " Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 27/74] accel/kvm: convert OnOffSplit property " Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 28/74] whpx: " Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 29/74] ppc/spapr-caps: convert to QAPI-aware property registration Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 30/74] system/memory: fix "priority" property typename Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 31/74] backends/hostmem: fix property typenames Marc-André Lureau
2026-08-18 11:10 ` [PATCH v3 32/74] backends/hostmem-file: fix "align" property typename Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 33/74] accel/tcg: fix "tb-size" " Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 34/74] block/throttle-groups: fix throttle properties typename Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 35/74] event-loop-base: fix property typenames Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 36/74] iothread: fix poll properties typename Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 37/74] util/thread-context: fix property typenames Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 38/74] target/i386: fix CPUID version properties typename Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 39/74] ppc/pnv: fix phb-id and chip-id " Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 40/74] backends/hostmem-memfd: fix "hugetlbsize" property typename Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 41/74] hw/acpi: fix "node" properties typename Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 42/74] net/colo-compare: fix compare_timeout setter visitor type Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 43/74] net/colo-compare: fix max_queue_size " Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 44/74] hw/misc/xlnx-versal-trng: add missing getter for fips-fault-events Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 45/74] qom: convert scalar properties to QAPI-aware registration Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 46/74] i386/cpu: convert strList property " Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 47/74] accel/hvf: convert OnOffSplit " Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 48/74] i386/x86: convert SgxEPCList " Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 49/74] virtio-balloon: convert guest-stats property to QAPI type Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 50/74] qom: replace object_property_add_tm with StructTm " Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 51/74] hw/nvdimm: convert UUID property to QAPI-aware registration Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 52/74] hw/s390-virtio-ccw: convert loadparm " Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 53/74] hw/ppc/spapr_drc: convert fdt " Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 54/74] spdm-socket: convert SpdmTransportType to QAPI enum Marc-André Lureau
2026-08-18 11:11 ` [PATCH v3 55/74] hw/gpio/pca955x: use QAPI enums for led and pin properties Marc-André Lureau
2026-08-18 12:36 ` [PATCH v3 56/74] include: add QEMU_REPEAT helper macro Marc-André Lureau
2026-08-18 12:36 ` Marc-André Lureau [this message]
2026-08-18 12:36 ` [PATCH v3 58/74] hw/pci: change the busnr type to uint8 Marc-André Lureau
2026-08-18 12:36 ` [PATCH v3 59/74] qdev: add qapi_type field to PropertyInfo with fallback registration Marc-André Lureau
2026-08-18 12:36 ` [PATCH v3 60/74] qdev: convert core PropertyInfo definitions to use qapi_type Marc-André Lureau
2026-08-18 13:29 ` [PATCH v3 61/74] qdev: adjust PciDevfn declared type Marc-André Lureau
2026-08-18 13:29 ` [PATCH v3 62/74] qdev: convert system PropertyInfo definitions to use qapi_type Marc-André Lureau
2026-08-18 13:29 ` [PATCH v3 63/74] hw: convert device-local " Marc-André Lureau
2026-08-18 13:29 ` [PATCH v3 64/74] target/riscv: fix incorrect QAPI types and u8 casting Marc-André Lureau
2026-08-18 13:29 ` [PATCH v3 65/74] target/riscv: convert PropertyInfo definitions to use qapi_type Marc-André Lureau
2026-08-18 13:29 ` [PATCH v3 66/74] qdev: " Marc-André Lureau
2026-08-18 13:29 ` [PATCH v3 67/74] qdev: introduce typed array PropertyInfos Marc-André Lureau
2026-08-18 13:29 ` [PATCH v3 68/74] qdev: simplify DEFINE_PROP_ARRAY and remove generic array PropertyInfo Marc-André Lureau
2026-08-18 13:29 ` [PATCH v3 69/74] qdev: remove deprecated PropertyInfo.type and .enum_table fields Marc-André Lureau
2026-08-18 13:29 ` [PATCH v3 70/74] memory: use object_property_add_link for container property Marc-André Lureau
2026-08-20 18:17   ` Peter Xu
2026-08-18 13:29 ` [PATCH v3 71/74] hw/i386: convert PCSouthBridgeOption to QAPI enum Marc-André Lureau
2026-08-18 13:29 ` [PATCH v3 72/74] qom: use QAPITypeInfo in object_property_get_enum Marc-André Lureau
2026-08-18 13:29 ` [PATCH v3 73/74] qapi: expose integer signedness and width in introspection Marc-André Lureau
2026-08-18 13:29 ` [PATCH v3 74/74] tests/qmp-cmd-test: assert qapi-type resolves in query-qmp-schema Marc-André Lureau

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=20260818-qom-qapi-v3-57-24b8bbbe3d86@redhat.com \
    --to=marcandre.lureau@redhat.com \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=michael.roth@amd.com \
    --cc=milesg@linux.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=philmd@mailo.com \
    --cc=pierrick.bouvier@oss.qualcomm.com \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@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.