qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Anthony Liguori <aliguori@us.ibm.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
	Peter Maydell <peter.maydell@linaro.org>,
	Anthony Liguori <aliguori@us.ibm.com>,
	Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>,
	Jan Kiszka <jan.kiszka@siemens.com>,
	Markus Armbruster <armbru@redhat.com>,
	Luiz Capitulino <lcapitulino@redhat.com>
Subject: [Qemu-devel] [PATCH 09/18] qmp: add qom-list command
Date: Wed, 30 Nov 2011 15:03:39 -0600	[thread overview]
Message-ID: <1322687028-29714-10-git-send-email-aliguori@us.ibm.com> (raw)
In-Reply-To: <1322687028-29714-1-git-send-email-aliguori@us.ibm.com>

This can be used to list properties in the device model.

Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
---
 qapi-schema.json |   48 ++++++++++++++++++++++++++++++++++++++++++++++++
 qmp-commands.hx  |    6 ++++++
 qmp.c            |   29 +++++++++++++++++++++++++++++
 3 files changed, 83 insertions(+), 0 deletions(-)

diff --git a/qapi-schema.json b/qapi-schema.json
index cb1ba77..276b7c3 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -887,3 +887,51 @@
 # Notes: Do not use this command.
 ##
 { 'command': 'cpu', 'data': {'index': 'int'} }
+
+##
+# @DevicePropertyInfo:
+#
+# @name: the name of the property
+#
+# @type: the type of the property.  This will typically come in one of four
+#        forms:
+#
+#        1) A primitive type such as 'u8', 'u16', 'bool', 'str', or 'double'.
+#           These types are mapped to the appropriate JSON type.
+#
+#        2) A legacy type in the form 'legacy<subtype>' where subtype is the
+#           legacy qdev typename.  These types are always treated as strings.
+#
+#        3) A child type in the form 'child<subtype>' where subtype is a qdev
+#           device type name.  Child properties create the composition tree.
+#
+#        4) A link type in the form 'link<subtype>' where subtype is a qdev
+#           device type name.  Link properties form the device model graph.
+#
+# Since: 1.1
+#
+# Notes: This type is experimental.  Its syntax may change in future releases.
+##
+{ 'type': 'DevicePropertyInfo',
+  'data': { 'name': 'str', 'type': 'str' } }
+
+##
+# @qom-list:
+#
+# This command will list any properties of a device given a path in the device
+# model.
+#
+# @path: the path within the device model.  See @qom-get for a description of
+#        this parameter.
+#
+# Returns: a list of @DevicePropertyInfo that describe the properties of the
+#          device.
+#
+# Since: 1.1
+#
+# Notes: This command is experimental.  It's syntax may change in future
+#        releases.
+##
+{ 'command': 'qom-list',
+  'data': { 'path': 'str' },
+  'returns': [ 'DevicePropertyInfo' ] }
diff --git a/qmp-commands.hx b/qmp-commands.hx
index 97975a5..d6ff466 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -2001,3 +2001,9 @@ EQMP
         .args_type  = "",
         .mhandler.cmd_new = qmp_marshal_input_query_balloon,
     },
+
+    {
+        .name       = "qom-list",
+        .args_type  = "path:s",
+        .mhandler.cmd_new = qmp_marshal_input_qom_list,
+    },
diff --git a/qmp.c b/qmp.c
index 511dd62..b9f0572 100644
--- a/qmp.c
+++ b/qmp.c
@@ -16,6 +16,7 @@
 #include "qmp-commands.h"
 #include "kvm.h"
 #include "arch_init.h"
+#include "hw/qdev.h"
 
 NameInfo *qmp_query_name(Error **errp)
 {
@@ -117,3 +118,31 @@ SpiceInfo *qmp_query_spice(Error **errp)
     return NULL;
 };
 #endif
+
+DevicePropertyInfoList *qmp_qom_list(const char *path, Error **errp)
+{
+    DeviceState *dev;
+    bool ambiguous = false;
+    DevicePropertyInfoList *props = NULL;
+    GSList *i;
+
+    dev = qdev_resolve_path(path, &ambiguous);
+    if (dev == NULL) {
+        error_set(errp, QERR_DEVICE_NOT_FOUND, path);
+        return NULL;
+    }
+
+    for (i = dev->properties; i; i = i->next) {
+        DevicePropertyInfoList *entry = g_malloc0(sizeof(*entry));
+        DeviceProperty *prop = i->data;
+
+        entry->value = g_malloc0(sizeof(DevicePropertyInfo));
+        entry->next = props;
+        props = entry;
+
+        entry->value->name = g_strdup(prop->name);
+        entry->value->type = g_strdup(prop->type);
+    }
+
+    return props;
+}
-- 
1.7.4.1

  parent reply	other threads:[~2011-11-30 21:06 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-30 21:03 [Qemu-devel] [PATCH 00/18] qom: dynamic properties and composition tree Anthony Liguori
2011-11-30 21:03 ` [Qemu-devel] [PATCH 01/18] qom: add new dynamic property infrastructure based on Visitors Anthony Liguori
2011-12-01  8:19   ` Stefan Hajnoczi
2011-12-01 13:30     ` Anthony Liguori
2011-12-01 15:52   ` Kevin Wolf
2011-12-02  1:08     ` Anthony Liguori
2011-12-02  9:43       ` Kevin Wolf
2011-12-02 18:47     ` Anthony Liguori
2011-12-05  9:16       ` Kevin Wolf
2011-11-30 21:03 ` [Qemu-devel] [PATCH 02/18] qom: register legacy properties as new style properties Anthony Liguori
2011-12-01  8:33   ` Stefan Hajnoczi
2011-12-01 13:31     ` Anthony Liguori
2011-12-01 15:51   ` Gerd Hoffmann
2011-12-02  1:03     ` Anthony Liguori
2011-12-02 12:19       ` Gerd Hoffmann
2011-12-01 16:14   ` Kevin Wolf
2011-12-02  1:05     ` Anthony Liguori
2011-11-30 21:03 ` [Qemu-devel] [PATCH 03/18] qom: introduce root device Anthony Liguori
2011-11-30 21:03 ` [Qemu-devel] [PATCH 04/18] qdev: provide an interface to return canonical path from root Anthony Liguori
2011-11-30 21:03 ` [Qemu-devel] [PATCH 05/18] qdev: provide a path resolution Anthony Liguori
2011-12-01 10:24   ` Stefan Hajnoczi
2011-12-01 13:34     ` Anthony Liguori
2011-11-30 21:03 ` [Qemu-devel] [PATCH 06/18] qom: add child properties (composition) Anthony Liguori
2011-12-02 11:54   ` Kevin Wolf
2011-12-02 14:54     ` Anthony Liguori
2011-11-30 21:03 ` [Qemu-devel] [PATCH 07/18] qom: add link properties Anthony Liguori
2011-12-01 10:55   ` Stefan Hajnoczi
2011-12-01 13:40     ` Anthony Liguori
2011-12-01 11:21   ` Avi Kivity
2011-12-01 11:35     ` Stefan Hajnoczi
2011-12-01 12:34       ` Avi Kivity
2011-12-01 13:47         ` Anthony Liguori
2011-12-01 13:50           ` Avi Kivity
2011-12-01 14:56             ` Anthony Liguori
2011-12-01 13:44     ` Anthony Liguori
2011-12-01 14:03       ` Avi Kivity
2011-12-01 14:53         ` Anthony Liguori
2011-12-01 15:00           ` Avi Kivity
2011-12-01 15:10             ` Anthony Liguori
2011-12-01 15:03           ` Gerd Hoffmann
2011-12-01 15:13             ` Avi Kivity
2011-12-01 15:14             ` Anthony Liguori
2011-12-02 12:15   ` Kevin Wolf
2011-12-02 14:57     ` Anthony Liguori
2011-11-30 21:03 ` [Qemu-devel] [PATCH 08/18] qapi: allow a 'gen' key to suppress code generation Anthony Liguori
2011-11-30 21:03 ` Anthony Liguori [this message]
2011-11-30 21:03 ` [Qemu-devel] [PATCH 10/18] qom: qom_{get,set} monitor commands Anthony Liguori
2011-12-01 11:04   ` Stefan Hajnoczi
2011-12-01 13:35     ` Anthony Liguori
2011-11-30 21:03 ` [Qemu-devel] [PATCH 11/18] qdev: add explicitly named devices to the root complex Anthony Liguori
2011-11-30 21:03 ` [Qemu-devel] [PATCH 12/18] dev: add an anonymous peripheral container Anthony Liguori
2011-11-30 21:03 ` [Qemu-devel] [PATCH 13/18] rtc: make piix3 set the rtc as a child Anthony Liguori
2011-12-01 11:07   ` Stefan Hajnoczi
2011-12-01 13:35     ` Anthony Liguori
2011-11-30 21:03 ` [Qemu-devel] [PATCH 14/18] rtc: add a dynamic property for retrieving the date Anthony Liguori
2011-12-01 15:46   ` Gerd Hoffmann
2011-12-02  1:19     ` Anthony Liguori
2011-12-02 12:35       ` Gerd Hoffmann
2011-12-02 13:20         ` Anthony Liguori
2011-12-02 13:34           ` Gerd Hoffmann
2011-12-02 15:05             ` Anthony Liguori
2011-11-30 21:03 ` [Qemu-devel] [PATCH 15/18] qom: optimize qdev_get_canonical_path using a parent link Anthony Liguori
2011-12-01 11:21   ` Stefan Hajnoczi
2011-12-01 13:38     ` Anthony Liguori
2011-11-30 21:03 ` [Qemu-devel] [PATCH 16/18] Make qmp.py easier to use Anthony Liguori
2011-11-30 21:03 ` [Qemu-devel] [PATCH 17/18] Add test tools Anthony Liguori
2011-12-01 11:26   ` Stefan Hajnoczi
2011-12-01 13:39     ` Anthony Liguori
2011-12-01 14:03       ` Stefan Hajnoczi
2011-11-30 21:03 ` [Qemu-devel] [PATCH 18/18] qdev: split out QOM functions to separate files Anthony Liguori
2011-11-30 22:54 ` [Qemu-devel] [PATCH 00/18] qom: dynamic properties and composition tree Anthony Liguori
2011-12-01 14:20 ` Avi Kivity
2011-12-01 14:42   ` Anthony Liguori
2011-12-01 14:48     ` Avi Kivity
2011-12-01 15:01       ` Anthony Liguori

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=1322687028-29714-10-git-send-email-aliguori@us.ibm.com \
    --to=aliguori@us.ibm.com \
    --cc=armbru@redhat.com \
    --cc=jan.kiszka@siemens.com \
    --cc=kwolf@redhat.com \
    --cc=lcapitulino@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@linux.vnet.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).