qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Or Goshen <oberonc@gmail.com>, Luiz Capitulino <lcapitulino@redhat.com>
Cc: qemu-devel@nongnu.org, Or Goshen <or@heartbeat.com>
Subject: Re: [Qemu-devel] [PATCH] Add a command to QMP to list the supported devices
Date: Mon, 24 Feb 2014 10:31:11 +0100	[thread overview]
Message-ID: <530B115F.7080407@redhat.com> (raw)
In-Reply-To: <1393233796-1328-1-git-send-email-orx.goshen@intel.com>

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
>  --------------
>
>

  reply	other threads:[~2014-02-24  9:31 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
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

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=530B115F.7080407@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=lcapitulino@redhat.com \
    --cc=oberonc@gmail.com \
    --cc=or@heartbeat.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 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).