All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] Add a command to QMP to list the supported devices
@ 2014-02-24  9:23 Or Goshen
  2014-02-24  9:31 ` Paolo Bonzini
  2014-02-24 15:40 ` Eric Blake
  0 siblings, 2 replies; 7+ messages in thread
From: Or Goshen @ 2014-02-24  9:23 UTC (permalink / raw)
  To: Luiz Capitulino; +Cc: qemu-devel, Or Goshen

From: Or Goshen <or@heartbeat.com>

Was done on behalf of Intel Corp.

---
 qapi-schema.json |   26 ++++++++++++++++++++++++++
 qdev-monitor.c   |   28 ++++++++++++++++++++++++++++
 qmp-commands.hx  |   40 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 94 insertions(+), 0 deletions(-)

diff --git a/qapi-schema.json b/qapi-schema.json
index 05ced9d..cae1200 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -526,6 +526,32 @@
 { 'command': 'query-commands', 'returns': ['CommandInfo'] }
 
 ##
+# @DeviceInfo:
+#
+# Information about a device
+#
+# @name: The command name
+# @bus: The bus it is connected to
+# @alias: Device alias
+# @desc: Description of the device
+#
+# Since: 1.6.0
+##
+{ 'type': 'DeviceInfo', 'data': {'name': 'str', 'bus': 'str', 'alias': 'str', 'desc': 'str'} }
+
+##
+# @query-devices:
+#
+# Return a list of supported devices
+#
+# Returns: A list of @DeviceInfo for all supported devices
+#
+# Since: 1.6.0
+##
+{ 'command': 'query-devices', 'returns': ['DeviceInfo'] }
+
+
+##
 # @EventInfo:
 #
 # Information about a QMP event
diff --git a/qdev-monitor.c b/qdev-monitor.c
index 1d3b68d..0a59fd9 100644
--- a/qdev-monitor.c
+++ b/qdev-monitor.c
@@ -644,6 +644,34 @@ void do_info_qtree(Monitor *mon, const QDict *qdict)
         qbus_print(mon, sysbus_get_default(), 0);
 }
 
+static void qdev_list_devinfo(ObjectClass *klass, void *data)
+{
+    DeviceInfoList *e, **pret = data;
+    DeviceInfo *info;
+    DeviceClass *dc = (DeviceClass *)object_class_dynamic_cast(klass, TYPE_DEVICE);
+    if (!dc) return;
+
+    info = g_malloc0(sizeof(*info));
+    info->name = g_strdup(object_class_get_name(klass));
+    info->bus = g_strdup(dc->bus_type ? dc->bus_type : "");
+    info->alias = g_strdup(qdev_class_has_alias(dc) ? qdev_class_get_alias(dc) : "");
+    info->desc = g_strdup(dc->desc ? dc->desc : "");
+
+    e = g_malloc0(sizeof(*e));
+    e->value = info;
+    e->next = *pret;
+    *pret = e;
+}
+
+DeviceInfoList * qmp_query_devices(Error **errp)
+{
+    DeviceInfoList *list = NULL;
+
+    object_class_foreach(qdev_list_devinfo, TYPE_DEVICE, false, &list);
+
+    return list;
+}
+
 void do_info_qdm(Monitor *mon, const QDict *qdict)
 {
     qdev_print_devinfos(true);
diff --git a/qmp-commands.hx b/qmp-commands.hx
index cce6b81..be4451d 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -1851,6 +1851,46 @@ EQMP
     },
 
 SQMP
+query-devices
+--------------
+
+List supported devices
+
+Each device is represented by a json-object, the returned value is a json-array
+of all devices.
+
+Each json-object contain:
+
+- "name": device's name (json-string)
+- "bus": bus the device connects to (json-string)
+- "alias": device's alias (json-string)
+- "desc": device's description (json-string)
+
+Example:
+
+-> { "execute": "query-devices" }
+<- {
+      "return":[
+         {
+            "name":"pci-bridge",
+            "bus":"PCI",
+            "alias":"",
+            "desc":"Standard PCI Bridge"
+         }
+      ]
+   }
+
+Note: This example has been shortened as the real response is too long.
+
+EQMP
+
+    {
+        .name       = "query-devices",
+        .args_type  = "",
+        .mhandler.cmd_new = qmp_marshal_input_query_devices,
+    },
+
+SQMP
 query-events
 --------------
 
-- 
1.7.9

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH] Add a command to QMP to list the supported devices
  2014-02-24  9:23 [Qemu-devel] [PATCH] Add a command to QMP to list the supported devices Or Goshen
@ 2014-02-24  9:31 ` Paolo Bonzini
  2014-02-24 13:40   ` Andreas Färber
  2014-02-24 15:40 ` Eric Blake
  1 sibling, 1 reply; 7+ messages in thread
From: Paolo Bonzini @ 2014-02-24  9:31 UTC (permalink / raw)
  To: Or Goshen, Luiz Capitulino; +Cc: qemu-devel, Or Goshen

Il 24/02/2014 10:23, Or Goshen ha scritto:
> From: Or Goshen <or@heartbeat.com>
>
> Was done on behalf of Intel Corp.

Hi Or,

you can use qom-list-types for this purpose.

Paolo

> ---
>  qapi-schema.json |   26 ++++++++++++++++++++++++++
>  qdev-monitor.c   |   28 ++++++++++++++++++++++++++++
>  qmp-commands.hx  |   40 ++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 94 insertions(+), 0 deletions(-)
>
> diff --git a/qapi-schema.json b/qapi-schema.json
> index 05ced9d..cae1200 100644
> --- a/qapi-schema.json
> +++ b/qapi-schema.json
> @@ -526,6 +526,32 @@
>  { 'command': 'query-commands', 'returns': ['CommandInfo'] }
>
>  ##
> +# @DeviceInfo:
> +#
> +# Information about a device
> +#
> +# @name: The command name
> +# @bus: The bus it is connected to
> +# @alias: Device alias
> +# @desc: Description of the device
> +#
> +# Since: 1.6.0
> +##
> +{ 'type': 'DeviceInfo', 'data': {'name': 'str', 'bus': 'str', 'alias': 'str', 'desc': 'str'} }
> +
> +##
> +# @query-devices:
> +#
> +# Return a list of supported devices
> +#
> +# Returns: A list of @DeviceInfo for all supported devices
> +#
> +# Since: 1.6.0
> +##
> +{ 'command': 'query-devices', 'returns': ['DeviceInfo'] }
> +
> +
> +##
>  # @EventInfo:
>  #
>  # Information about a QMP event
> diff --git a/qdev-monitor.c b/qdev-monitor.c
> index 1d3b68d..0a59fd9 100644
> --- a/qdev-monitor.c
> +++ b/qdev-monitor.c
> @@ -644,6 +644,34 @@ void do_info_qtree(Monitor *mon, const QDict *qdict)
>          qbus_print(mon, sysbus_get_default(), 0);
>  }
>
> +static void qdev_list_devinfo(ObjectClass *klass, void *data)
> +{
> +    DeviceInfoList *e, **pret = data;
> +    DeviceInfo *info;
> +    DeviceClass *dc = (DeviceClass *)object_class_dynamic_cast(klass, TYPE_DEVICE);
> +    if (!dc) return;
> +
> +    info = g_malloc0(sizeof(*info));
> +    info->name = g_strdup(object_class_get_name(klass));
> +    info->bus = g_strdup(dc->bus_type ? dc->bus_type : "");
> +    info->alias = g_strdup(qdev_class_has_alias(dc) ? qdev_class_get_alias(dc) : "");
> +    info->desc = g_strdup(dc->desc ? dc->desc : "");
> +
> +    e = g_malloc0(sizeof(*e));
> +    e->value = info;
> +    e->next = *pret;
> +    *pret = e;
> +}
> +
> +DeviceInfoList * qmp_query_devices(Error **errp)
> +{
> +    DeviceInfoList *list = NULL;
> +
> +    object_class_foreach(qdev_list_devinfo, TYPE_DEVICE, false, &list);
> +
> +    return list;
> +}
> +
>  void do_info_qdm(Monitor *mon, const QDict *qdict)
>  {
>      qdev_print_devinfos(true);
> diff --git a/qmp-commands.hx b/qmp-commands.hx
> index cce6b81..be4451d 100644
> --- a/qmp-commands.hx
> +++ b/qmp-commands.hx
> @@ -1851,6 +1851,46 @@ EQMP
>      },
>
>  SQMP
> +query-devices
> +--------------
> +
> +List supported devices
> +
> +Each device is represented by a json-object, the returned value is a json-array
> +of all devices.
> +
> +Each json-object contain:
> +
> +- "name": device's name (json-string)
> +- "bus": bus the device connects to (json-string)
> +- "alias": device's alias (json-string)
> +- "desc": device's description (json-string)
> +
> +Example:
> +
> +-> { "execute": "query-devices" }
> +<- {
> +      "return":[
> +         {
> +            "name":"pci-bridge",
> +            "bus":"PCI",
> +            "alias":"",
> +            "desc":"Standard PCI Bridge"
> +         }
> +      ]
> +   }
> +
> +Note: This example has been shortened as the real response is too long.
> +
> +EQMP
> +
> +    {
> +        .name       = "query-devices",
> +        .args_type  = "",
> +        .mhandler.cmd_new = qmp_marshal_input_query_devices,
> +    },
> +
> +SQMP
>  query-events
>  --------------
>
>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH] Add a command to QMP to list the supported devices
  2014-02-24  9:31 ` Paolo Bonzini
@ 2014-02-24 13:40   ` Andreas Färber
  2014-02-24 13:44     ` Paolo Bonzini
  2014-02-24 13:49     ` Or Goshen
  0 siblings, 2 replies; 7+ messages in thread
From: Andreas Färber @ 2014-02-24 13:40 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: Or Goshen, qemu-devel, Or Goshen, Luiz Capitulino

Am 24.02.2014 10:31, schrieb Paolo Bonzini:
> Il 24/02/2014 10:23, Or Goshen ha scritto:
>> From: Or Goshen <or@heartbeat.com>
>>
>> Was done on behalf of Intel Corp.
> 
> Hi Or,
> 
> you can use qom-list-types for this purpose.

That can return a list of types, but there is no way to access the
DeviceClass-specific bus, alias, desc values, is there?

It sounds to me as if they are trying to recreate the -device ? output
in machine-readable form.

Regards,
Andreas

-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH] Add a command to QMP to list the supported devices
  2014-02-24 13:40   ` Andreas Färber
@ 2014-02-24 13:44     ` Paolo Bonzini
  2014-02-24 13:49     ` Or Goshen
  1 sibling, 0 replies; 7+ messages in thread
From: Paolo Bonzini @ 2014-02-24 13:44 UTC (permalink / raw)
  To: Andreas Färber; +Cc: Or Goshen, qemu-devel, Or Goshen, Luiz Capitulino

Il 24/02/2014 14:40, Andreas Färber ha scritto:
> Am 24.02.2014 10:31, schrieb Paolo Bonzini:
>> Il 24/02/2014 10:23, Or Goshen ha scritto:
>>> From: Or Goshen <or@heartbeat.com>
>>>
>>> Was done on behalf of Intel Corp.
>>
>> Hi Or,
>>
>> you can use qom-list-types for this purpose.
>
> That can return a list of types, but there is no way to access the
> DeviceClass-specific bus, alias, desc values, is there?

The bus value can be retrieved indirectly from the class hierarchy. 
Aliases are deprecated.

Desc could be moved to the object class and added to qom-list-types.

> It sounds to me as if they are trying to recreate the -device ? output
> in machine-readable form.

Indeed.  The question is why they need "-device ?".  If it is just for 
"is the device supported" (as was the case for libvirt before it started 
using qom-list-types), then a new command is unnecessary.

Paolo

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH] Add a command to QMP to list the supported devices
  2014-02-24 13:40   ` Andreas Färber
  2014-02-24 13:44     ` Paolo Bonzini
@ 2014-02-24 13:49     ` Or Goshen
  2014-02-24 18:05       ` Paolo Bonzini
  1 sibling, 1 reply; 7+ messages in thread
From: Or Goshen @ 2014-02-24 13:49 UTC (permalink / raw)
  To: Andreas Färber; +Cc: Paolo Bonzini, qemu-devel, Or Goshen, Luiz Capitulino

[-- Attachment #1: Type: text/plain, Size: 910 bytes --]

You are correct. I need "-device ?" functionality for porting libguestfs to
mingw


On Mon, Feb 24, 2014 at 3:40 PM, Andreas Färber <afaerber@suse.de> wrote:

> Am 24.02.2014 10:31, schrieb Paolo Bonzini:
> > Il 24/02/2014 10:23, Or Goshen ha scritto:
> >> From: Or Goshen <or@heartbeat.com>
> >>
> >> Was done on behalf of Intel Corp.
> >
> > Hi Or,
> >
> > you can use qom-list-types for this purpose.
>
> That can return a list of types, but there is no way to access the
> DeviceClass-specific bus, alias, desc values, is there?
>
> It sounds to me as if they are trying to recreate the -device ? output
> in machine-readable form.
>
> Regards,
> Andreas
>
> --
> SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
> GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
>



-- 
   Or Goshen
   CTO
   Cerbercomm
   Mob: 972-50-9182418

[-- Attachment #2: Type: text/html, Size: 1511 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH] Add a command to QMP to list the supported devices
  2014-02-24  9:23 [Qemu-devel] [PATCH] Add a command to QMP to list the supported devices Or Goshen
  2014-02-24  9:31 ` Paolo Bonzini
@ 2014-02-24 15:40 ` Eric Blake
  1 sibling, 0 replies; 7+ messages in thread
From: Eric Blake @ 2014-02-24 15:40 UTC (permalink / raw)
  To: Or Goshen, Luiz Capitulino; +Cc: qemu-devel, Or Goshen

[-- Attachment #1: Type: text/plain, Size: 1382 bytes --]

On 02/24/2014 02:23 AM, Or Goshen wrote:
> From: Or Goshen <or@heartbeat.com>
> 
> Was done on behalf of Intel Corp.
> 
> ---

> +++ b/qapi-schema.json
> @@ -526,6 +526,32 @@
>  { 'command': 'query-commands', 'returns': ['CommandInfo'] }
>  
>  ##
> +# @DeviceInfo:
> +#
> +# Information about a device
> +#
> +# @name: The command name
> +# @bus: The bus it is connected to
> +# @alias: Device alias
> +# @desc: Description of the device
> +#
> +# Since: 1.6.0

This needs to be 2.0 (or whatever actual release it first makes it
into), not 1.6.0.

> +##
> +{ 'type': 'DeviceInfo', 'data': {'name': 'str', 'bus': 'str', 'alias': 'str', 'desc': 'str'} }
> +
> +##
> +# @query-devices:
> +#
> +# Return a list of supported devices
> +#
> +# Returns: A list of @DeviceInfo for all supported devices
> +#
> +# Since: 1.6.0

and again


> +-> { "execute": "query-devices" }
> +<- {
> +      "return":[
> +         {
> +            "name":"pci-bridge",
> +            "bus":"PCI",
> +            "alias":"",

Should alias be optional, rather than an empty string, when there isn't one?

> +            "desc":"Standard PCI Bridge"

Is the description intended to be machine parseable, or is it only for
human consumption?

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH] Add a command to QMP to list the supported devices
  2014-02-24 13:49     ` Or Goshen
@ 2014-02-24 18:05       ` Paolo Bonzini
  0 siblings, 0 replies; 7+ messages in thread
From: Paolo Bonzini @ 2014-02-24 18:05 UTC (permalink / raw)
  To: Or Goshen; +Cc: qemu-devel, Andreas Färber, Or Goshen, Luiz Capitulino


> You are correct. I need "-device ?" functionality for porting libguestfs to
> mingw

Interesting!

Why is "-device ?" not enough?  I think that libguestfs should not need
anything that qom-list-types does not provide.

Paolo

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-02-24 18:05 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-02-24  9:23 [Qemu-devel] [PATCH] Add a command to QMP to list the supported devices Or Goshen
2014-02-24  9:31 ` Paolo Bonzini
2014-02-24 13:40   ` Andreas Färber
2014-02-24 13:44     ` Paolo Bonzini
2014-02-24 13:49     ` Or Goshen
2014-02-24 18:05       ` Paolo Bonzini
2014-02-24 15:40 ` Eric Blake

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.