[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 13/18] qapi: introduce x-query-usb QMP command
From: |
Daniel P . Berrangé |
Subject: |
[PULL 13/18] qapi: introduce x-query-usb QMP command |
Date: |
Tue, 2 Nov 2021 17:56:55 +0000 |
This is a counterpart to the HMP "info usb" command. It is being
added with an "x-" prefix because this QMP command is intended as an
adhoc debugging tool and will thus not be modelled in QAPI as fully
structured data, nor will it have long term guaranteed stability.
The existing HMP command is rewritten to call the QMP command.
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
hmp-commands-info.hx | 2 +-
hw/usb/bus.c | 24 +++++++++++++++---------
qapi/machine.json | 12 ++++++++++++
stubs/usb-dev-stub.c | 8 ++++++++
tests/qtest/qmp-cmd-test.c | 2 ++
5 files changed, 38 insertions(+), 10 deletions(-)
diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
index f66b1ca986..ef1bfe4f5a 100644
--- a/hmp-commands-info.hx
+++ b/hmp-commands-info.hx
@@ -338,7 +338,7 @@ ERST
.args_type = "",
.params = "",
.help = "show guest USB devices",
- .cmd = hmp_info_usb,
+ .cmd_info_hrt = qmp_x_query_usb,
},
SRST
diff --git a/hw/usb/bus.c b/hw/usb/bus.c
index 5d441a7065..92d6ed5626 100644
--- a/hw/usb/bus.c
+++ b/hw/usb/bus.c
@@ -2,6 +2,8 @@
#include "hw/qdev-properties.h"
#include "hw/usb.h"
#include "qapi/error.h"
+#include "qapi/qapi-commands-machine.h"
+#include "qapi/type-helpers.h"
#include "qemu/error-report.h"
#include "qemu/module.h"
#include "sysemu/sysemu.h"
@@ -631,15 +633,16 @@ static char *usb_get_fw_dev_path(DeviceState *qdev)
return fw_path;
}
-void hmp_info_usb(Monitor *mon, const QDict *qdict)
+HumanReadableText *qmp_x_query_usb(Error **errp)
{
+ g_autoptr(GString) buf = g_string_new("");
USBBus *bus;
USBDevice *dev;
USBPort *port;
if (QTAILQ_EMPTY(&busses)) {
- monitor_printf(mon, "USB support not enabled\n");
- return;
+ error_setg(errp, "USB support not enabled");
+ return NULL;
}
QTAILQ_FOREACH(bus, &busses, next) {
@@ -647,14 +650,17 @@ void hmp_info_usb(Monitor *mon, const QDict *qdict)
dev = port->dev;
if (!dev)
continue;
- monitor_printf(mon, " Device %d.%d, Port %s, Speed %s Mb/s, "
- "Product %s%s%s\n",
- bus->busnr, dev->addr, port->path,
- usb_speed(dev->speed), dev->product_desc,
- dev->qdev.id ? ", ID: " : "",
- dev->qdev.id ?: "");
+ g_string_append_printf(buf,
+ " Device %d.%d, Port %s, Speed %s Mb/s, "
+ "Product %s%s%s\n",
+ bus->busnr, dev->addr, port->path,
+ usb_speed(dev->speed), dev->product_desc,
+ dev->qdev.id ? ", ID: " : "",
+ dev->qdev.id ?: "");
}
}
+
+ return human_readable_text_from_str(buf);
}
/* handle legacy -usbdevice cmd line option */
diff --git a/qapi/machine.json b/qapi/machine.json
index 3732f80a82..15b6c98597 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
@@ -1447,3 +1447,15 @@
##
{ 'command': 'x-query-roms',
'returns': 'HumanReadableText' }
+
+##
+# @x-query-usb:
+#
+# Query information on the USB devices
+#
+# Returns: USB device information
+#
+# Since: 6.2
+##
+{ 'command': 'x-query-usb',
+ 'returns': 'HumanReadableText' }
diff --git a/stubs/usb-dev-stub.c b/stubs/usb-dev-stub.c
index b1adeeb454..aa557692b7 100644
--- a/stubs/usb-dev-stub.c
+++ b/stubs/usb-dev-stub.c
@@ -8,6 +8,8 @@
#include "qemu/osdep.h"
#include "qemu/error-report.h"
+#include "qapi/error.h"
+#include "qapi/qapi-commands-machine.h"
#include "sysemu/sysemu.h"
#include "monitor/monitor.h"
#include "hw/usb.h"
@@ -19,6 +21,12 @@ USBDevice *usbdevice_create(const char *driver)
return NULL;
}
+HumanReadableText *qmp_x_query_usb(Error **errp)
+{
+ error_setg(errp, "Support for USB devices not built-in");
+ return NULL;
+}
+
void hmp_info_usb(Monitor *mon, const QDict *qdict)
{
monitor_printf(mon, "Support for USB devices not built-in\n");
diff --git a/tests/qtest/qmp-cmd-test.c b/tests/qtest/qmp-cmd-test.c
index 372c887eea..0d52ea6c4b 100644
--- a/tests/qtest/qmp-cmd-test.c
+++ b/tests/qtest/qmp-cmd-test.c
@@ -49,6 +49,8 @@ static int query_error_class(const char *cmd)
#ifndef CONFIG_PROFILER
{ "x-query-profile", ERROR_CLASS_GENERIC_ERROR },
#endif
+ /* Only valid with a USB bus added */
+ { "x-query-usb", ERROR_CLASS_GENERIC_ERROR },
{ NULL, -1 }
};
int i;
--
2.31.1
- [PULL 03/18] docs/devel: rename file for writing monitor commands, (continued)
- [PULL 03/18] docs/devel: rename file for writing monitor commands, Daniel P . Berrangé, 2021/11/02
- [PULL 04/18] docs/devel: tweak headings in monitor command docs, Daniel P . Berrangé, 2021/11/02
- [PULL 05/18] docs/devel: update error handling guidance for HMP commands, Daniel P . Berrangé, 2021/11/02
- [PULL 06/18] monitor: introduce HumanReadableText and HMP support, Daniel P . Berrangé, 2021/11/02
- [PULL 07/18] docs/devel: document expectations for QAPI data modelling for QMP, Daniel P . Berrangé, 2021/11/02
- [PULL 08/18] docs/devel: add example of command returning unstructured text, Daniel P . Berrangé, 2021/11/02
- [PULL 09/18] docs/devel: document expectations for HMP commands in the future, Daniel P . Berrangé, 2021/11/02
- [PULL 10/18] qapi: introduce x-query-roms QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 11/18] qapi: introduce x-query-profile QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 12/18] qapi: introduce x-query-numa QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 13/18] qapi: introduce x-query-usb QMP command,
Daniel P . Berrangé <=
- [PULL 14/18] qapi: introduce x-query-rdma QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 15/18] qapi: introduce x-query-ramblock QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 16/18] qapi: introduce x-query-irq QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 17/18] qapi: introduce x-query-jit QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 18/18] qapi: introduce x-query-opcount QMP command, Daniel P . Berrangé, 2021/11/02
- Re: [PULL 00/18] HMP-to-QMP info command patches, Richard Henderson, 2021/11/03