From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50284) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WHrsk-000567-9w for qemu-devel@nongnu.org; Mon, 24 Feb 2014 04:31:31 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WHrsc-0000AR-9o for qemu-devel@nongnu.org; Mon, 24 Feb 2014 04:31:26 -0500 Received: from mail-qa0-x233.google.com ([2607:f8b0:400d:c00::233]:43933) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WHrsc-00009j-3u for qemu-devel@nongnu.org; Mon, 24 Feb 2014 04:31:18 -0500 Received: by mail-qa0-f51.google.com with SMTP id f11so6002752qae.10 for ; Mon, 24 Feb 2014 01:31:17 -0800 (PST) Sender: Paolo Bonzini Message-ID: <530B115F.7080407@redhat.com> Date: Mon, 24 Feb 2014 10:31:11 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <1393233796-1328-1-git-send-email-orx.goshen@intel.com> In-Reply-To: <1393233796-1328-1-git-send-email-orx.goshen@intel.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] Add a command to QMP to list the supported devices List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Or Goshen , Luiz Capitulino Cc: qemu-devel@nongnu.org, Or Goshen Il 24/02/2014 10:23, Or Goshen ha scritto: > From: Or Goshen > > 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 > -------------- > >