qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 3/4] qmp: query-device-type command


From: Eduardo Habkost
Subject: [Qemu-devel] [PATCH 3/4] qmp: query-device-type command
Date: Tue, 26 Sep 2017 19:03:25 -0300

Add a command that returns QOM type information that is specific
to device types and is not returned by qom-list-types.

The returned DeviceTypeInfo struct inherits from ObjectTypeInfo,
so fields returned by qom-list-types are also included.

Signed-off-by: Eduardo Habkost <address@hidden>
---
 qapi-schema.json | 35 +++++++++++++++++++++++++++++++++++
 qmp.c            | 25 +++++++++++++++++++++++++
 2 files changed, 60 insertions(+)

diff --git a/qapi-schema.json b/qapi-schema.json
index a3ba1c9a1c..0955380a59 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -1466,6 +1466,41 @@
   'returns': [ 'DevicePropertyInfo' ] }
 
 ##
+# @DeviceTypeInfo:
+#
+# Information about a device type.
+#
+# @user-creatable: If true, the device can be instantiated using the -device
+#                  command-line option.
+# @hotpluggable: If true, the device can be instantiated using @device_add,
+#                if the machine supports the device.
+#
+# @description: Human-readable description of the device type.
+#
+# Since: 2.11
+##
+{ 'struct': 'DeviceTypeInfo',
+  'base': 'ObjectTypeInfo',
+  'data': { 'hotpluggable': 'bool',
+            'user-creatable': 'bool',
+            '*description': 'str' } }
+
+##
+# @query-device-type:
+#
+# Query information about a device type.
+#
+# @typename: the name of the device type
+#
+# Returns: a DeviceTypeInfo struct
+#
+# Since: 2.11
+##
+{ 'command': 'query-device-type',
+  'data': { 'typename': 'str' },
+  'returns': 'DeviceTypeInfo' }
+
+##
 # @xen-set-global-dirty-log:
 #
 # Enable or disable the global dirty log mode.
diff --git a/qmp.c b/qmp.c
index 5ec829c09b..761fcf61c7 100644
--- a/qmp.c
+++ b/qmp.c
@@ -597,6 +597,31 @@ DevicePropertyInfoList *qmp_device_list_properties(const 
char *typename,
     return prop_list;
 }
 
+DeviceTypeInfo *qmp_query_device_type(const char *typename, Error **errp)
+{
+    DeviceTypeInfo *info = g_new0(DeviceTypeInfo, 1);
+    DeviceClass *dc = get_device_class(typename, errp);
+
+    if (!dc) {
+        return NULL;
+    }
+
+    qom_type_get_info(OBJECT_CLASS(dc), qapi_DeviceTypeInfo_base(info));
+    info->user_creatable = dc->user_creatable;
+    /*
+     * We have non-user-creatable devices with hotpluggable=true (because they
+     * are instantiated internally by hotpluggable devices), but it doesn't 
make
+     * sense to tell the user that device_add is supported if the device is not
+     * user-creatable
+     */
+    info->hotpluggable = dc->user_creatable && dc->hotpluggable;
+    if (dc->desc) {
+        info->has_description = true;
+        info->description = g_strdup(dc->desc);
+    }
+    return info;
+}
+
 CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp)
 {
     return arch_query_cpu_definitions(errp);
-- 
2.13.5




reply via email to

[Prev in Thread] Current Thread [Next in Thread]