All of lore.kernel.org
 help / color / mirror / Atom feed
From: Maxim Davydov <maxim.davydov@virtuozzo.com>
To: qemu-devel@nongnu.org
Cc: den@openvz.org, mst@redhat.com, stefanha@redhat.com,
	fam@euphon.net, amit@kernel.org, kraxel@redhat.com,
	berrange@redhat.com, Maxim Davydov <maxim.davydov@virtuozzo.com>
Subject: [PATCH v1 1/8] qdev-properties: Add read-only 64 bit property
Date: Wed,  1 Sep 2021 12:07:57 +0300	[thread overview]
Message-ID: <20210901090804.7139-2-maxim.davydov@virtuozzo.com> (raw)
In-Reply-To: <20210901090804.7139-1-maxim.davydov@virtuozzo.com>

In some situations, we need a property that tracks the bit but
can't change it (for instance, guest features of virtio device).

Signed-off-by: Maxim Davydov <maxim.davydov@virtuozzo.com>
---
 hw/core/qdev-properties.c    | 32 ++++++++++++++++++++++++++++++++
 include/hw/qdev-properties.h |  5 +++++
 2 files changed, 37 insertions(+)

diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 50f4094..d7b0436 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -231,6 +231,38 @@ const PropertyInfo qdev_prop_bit64 = {
     .set_default_value = set_default_value_bool,
 };
 
+/* Read-only Bit64 */
+
+static void prop_set_read_only_bit64(Object *obj, Visitor *v, const char *name,
+                                     void *opaque, Error **errp)
+{
+    return;
+}
+
+static uint64_t qdev_get_prop_read_only_mask64(Property *prop)
+{
+    assert(prop->info == &qdev_prop_read_only_bit64);
+    return 0x1ull << prop->bitnr;
+}
+
+static void prop_get_read_only_bit64(Object *obj, Visitor *v, const char *name,
+                                     void *opaque, Error **errp)
+{
+    Property *prop = opaque;
+    uint64_t *p = object_field_prop_ptr(obj, prop);
+    bool value = (*p & qdev_get_prop_read_only_mask64(prop)) != 0;
+
+    visit_type_bool(v, name, &value, errp);
+}
+
+const PropertyInfo qdev_prop_read_only_bit64 = {
+    .name  = "bool",
+    .description = "on/off",
+    .get   = prop_get_read_only_bit64,
+    .set   = prop_set_read_only_bit64,
+    .set_default_value = set_default_value_bool,
+};
+
 /* --- bool --- */
 
 static void get_bool(Object *obj, Visitor *v, const char *name, void *opaque,
diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
index 0ef97d6..4c4bac7 100644
--- a/include/hw/qdev-properties.h
+++ b/include/hw/qdev-properties.h
@@ -46,6 +46,7 @@ struct PropertyInfo {
 
 extern const PropertyInfo qdev_prop_bit;
 extern const PropertyInfo qdev_prop_bit64;
+extern const PropertyInfo qdev_prop_read_only_bit64;
 extern const PropertyInfo qdev_prop_bool;
 extern const PropertyInfo qdev_prop_enum;
 extern const PropertyInfo qdev_prop_uint8;
@@ -102,6 +103,10 @@ extern const PropertyInfo qdev_prop_link;
                 .set_default = true,                         \
                 .defval.u    = (bool)_defval)
 
+#define DEFINE_PROP_READ_ONLY_BIT64(_name, _state, _field, _bit)            \
+    DEFINE_PROP(_name, _state, _field, qdev_prop_read_only_bit64, uint64_t, \
+                .bitnr = (_bit))
+
 #define PROP_ARRAY_LEN_PREFIX "len-"
 
 /**
-- 
1.8.3.1



  reply	other threads:[~2021-09-01 14:48 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-01  9:07 [PATCH v1 0/8] Virtio features acknowledged by guest Maxim Davydov
2021-09-01  9:07 ` Maxim Davydov [this message]
2021-09-01  9:07 ` [PATCH v1 2/8] virtio: Add tracking of the common virtio guest features Maxim Davydov
2021-09-01  9:07 ` [PATCH v1 3/8] virtio-gpu: Add tracking of the virtio guest feature bits Maxim Davydov
2021-09-01  9:08 ` [PATCH v1 4/8] virtio-serial: " Maxim Davydov
2021-09-01  9:08 ` [PATCH v1 5/8] virtio-net: " Maxim Davydov
2021-09-01  9:08 ` [PATCH v1 6/8] scsi: Add tracking of the acknowledged " Maxim Davydov
2021-09-01  9:08 ` [PATCH v1 7/8] virtio-blk: Add tracking of the virtio guest " Maxim Davydov
2021-09-01  9:08 ` [PATCH v1 8/8] virtio-balloon: " Maxim Davydov
2021-09-02 12:34 ` [PATCH v1 0/8] Virtio features acknowledged by guest Stefan Hajnoczi

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=20210901090804.7139-2-maxim.davydov@virtuozzo.com \
    --to=maxim.davydov@virtuozzo.com \
    --cc=amit@kernel.org \
    --cc=berrange@redhat.com \
    --cc=den@openvz.org \
    --cc=fam@euphon.net \
    --cc=kraxel@redhat.com \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /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.