* [PATCH v2 0/3] hw/usb: Introduce x-query-usbhost QMP command @ 2024-06-11 10:23 Philippe Mathieu-Daudé 2024-06-11 10:23 ` [PATCH v2 1/3] hw/usb: Remove unused 'host.h' header Philippe Mathieu-Daudé ` (3 more replies) 0 siblings, 4 replies; 10+ messages in thread From: Philippe Mathieu-Daudé @ 2024-06-11 10:23 UTC (permalink / raw) To: Daniel P . Berrangé, qemu-devel Cc: Paolo Bonzini, Thomas Huth, Dr. David Alan Gilbert, Markus Armbruster, Philippe =?unknown-8bit?q?Mathieu-Daud=C3=A9?= Since v1: - Consider modules (Daniel) - Remove monitor_register_hmp Philippe Mathieu-Daudé (3): hw/usb: Remove unused 'host.h' header hw/usb: Introduce x-query-usbhost QMP command monitor: Remove monitor_register_hmp() qapi/machine.json | 18 +++++++++++++++ hw/usb/host-libusb.h | 16 ++++++++++++++ hw/usb/host.h | 44 ------------------------------------- include/hw/usb.h | 3 --- include/monitor/monitor.h | 2 -- hw/usb/bus-stub.c | 7 +++++- hw/usb/host-libusb-common.c | 31 ++++++++++++++++++++++++++ hw/usb/host-libusb.c | 43 ++++++++++++++++++++++++------------ monitor/hmp-target.c | 16 -------------- tests/qtest/qmp-cmd-test.c | 3 +++ hmp-commands-info.hx | 2 ++ hw/usb/meson.build | 1 + 12 files changed, 106 insertions(+), 80 deletions(-) create mode 100644 hw/usb/host-libusb.h delete mode 100644 hw/usb/host.h create mode 100644 hw/usb/host-libusb-common.c -- 2.41.0 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 1/3] hw/usb: Remove unused 'host.h' header 2024-06-11 10:23 [PATCH v2 0/3] hw/usb: Introduce x-query-usbhost QMP command Philippe Mathieu-Daudé @ 2024-06-11 10:23 ` Philippe Mathieu-Daudé 2024-06-11 12:25 ` Daniel P. Berrangé 2024-06-11 10:23 ` [PATCH v2 2/3] hw/usb: Introduce x-query-usbhost QMP command Philippe Mathieu-Daudé ` (2 subsequent siblings) 3 siblings, 1 reply; 10+ messages in thread From: Philippe Mathieu-Daudé @ 2024-06-11 10:23 UTC (permalink / raw) To: Daniel P . Berrangé, qemu-devel Cc: Paolo Bonzini, Thomas Huth, Dr. David Alan Gilbert, Markus Armbruster, Philippe Mathieu-Daudé Since commit 99761176ee ("usb: Remove legacy -usbdevice options (host, serial, disk and net)") hw/usb/host.h is not used, remove it. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- Cc: Thomas Huth <thuth@redhat.com> --- hw/usb/host.h | 44 -------------------------------------------- 1 file changed, 44 deletions(-) delete mode 100644 hw/usb/host.h diff --git a/hw/usb/host.h b/hw/usb/host.h deleted file mode 100644 index 048ff3b482..0000000000 --- a/hw/usb/host.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Linux host USB redirector - * - * Copyright (c) 2005 Fabrice Bellard - * - * Copyright (c) 2008 Max Krasnyansky - * Support for host device auto connect & disconnect - * Major rewrite to support fully async operation - * - * Copyright 2008 TJ <linux@tjworld.net> - * Added flexible support for /dev/bus/usb /sys/bus/usb/devices in addition - * to the legacy /proc/bus/usb USB device discovery and handling - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifndef QEMU_USB_HOST_H -#define QEMU_USB_HOST_H - -struct USBAutoFilter { - uint32_t bus_num; - uint32_t addr; - char *port; - uint32_t vendor_id; - uint32_t product_id; -}; - -#endif /* QEMU_USB_HOST_H */ -- 2.41.0 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v2 1/3] hw/usb: Remove unused 'host.h' header 2024-06-11 10:23 ` [PATCH v2 1/3] hw/usb: Remove unused 'host.h' header Philippe Mathieu-Daudé @ 2024-06-11 12:25 ` Daniel P. Berrangé 0 siblings, 0 replies; 10+ messages in thread From: Daniel P. Berrangé @ 2024-06-11 12:25 UTC (permalink / raw) To: Philippe Mathieu-Daudé Cc: qemu-devel, Paolo Bonzini, Thomas Huth, Dr. David Alan Gilbert, Markus Armbruster On Tue, Jun 11, 2024 at 12:23:03PM +0200, Philippe Mathieu-Daudé wrote: > Since commit 99761176ee ("usb: Remove legacy -usbdevice options > (host, serial, disk and net)") hw/usb/host.h is not used, remove > it. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > Cc: Thomas Huth <thuth@redhat.com> > --- > hw/usb/host.h | 44 -------------------------------------------- > 1 file changed, 44 deletions(-) > delete mode 100644 hw/usb/host.h Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :| ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 2/3] hw/usb: Introduce x-query-usbhost QMP command 2024-06-11 10:23 [PATCH v2 0/3] hw/usb: Introduce x-query-usbhost QMP command Philippe Mathieu-Daudé 2024-06-11 10:23 ` [PATCH v2 1/3] hw/usb: Remove unused 'host.h' header Philippe Mathieu-Daudé @ 2024-06-11 10:23 ` Philippe Mathieu-Daudé 2024-06-11 12:28 ` Daniel P. Berrangé 2024-06-18 14:15 ` Philippe Mathieu-Daudé 2024-06-11 10:23 ` [PATCH v2 3/3] monitor: Remove monitor_register_hmp() Philippe Mathieu-Daudé 2024-06-18 10:57 ` [PATCH v2 0/3] hw/usb: Introduce x-query-usbhost QMP command Philippe Mathieu-Daudé 3 siblings, 2 replies; 10+ messages in thread From: Philippe Mathieu-Daudé @ 2024-06-11 10:23 UTC (permalink / raw) To: Daniel P . Berrangé, qemu-devel Cc: Paolo Bonzini, Thomas Huth, Dr. David Alan Gilbert, Markus Armbruster, Philippe Mathieu-Daudé This is a counterpart to the HMP "info usbhost" 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. Since host-libusb.c can be built as part of the 'hw-usb' module, we introduce the libusb_register_hmp_info_hrt() helper to allow late registration when the module is loaded. Suggested-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- qapi/machine.json | 18 ++++++++++++++++ hw/usb/host-libusb.h | 16 ++++++++++++++ include/hw/usb.h | 3 --- hw/usb/bus-stub.c | 7 +++++- hw/usb/host-libusb-common.c | 31 ++++++++++++++++++++++++++ hw/usb/host-libusb.c | 43 +++++++++++++++++++++++++------------ tests/qtest/qmp-cmd-test.c | 3 +++ hmp-commands-info.hx | 2 ++ hw/usb/meson.build | 1 + 9 files changed, 106 insertions(+), 18 deletions(-) create mode 100644 hw/usb/host-libusb.h create mode 100644 hw/usb/host-libusb-common.c diff --git a/qapi/machine.json b/qapi/machine.json index 1283d14493..1b428f29d4 100644 --- a/qapi/machine.json +++ b/qapi/machine.json @@ -1813,6 +1813,24 @@ 'returns': 'HumanReadableText', 'features': [ 'unstable' ] } +## +# @x-query-usbhost: +# +# Query information on host USB devices +# +# Features: +# +# @unstable: This command is meant for debugging. +# +# Returns: Host USB device information +# +# Since: 9.1 +## +{ 'command': 'x-query-usbhost', + 'returns': 'HumanReadableText', + 'features': [ 'unstable' ], + 'if': 'CONFIG_USB_LIBUSB' } + ## # @SmbiosEntryPointType: # diff --git a/hw/usb/host-libusb.h b/hw/usb/host-libusb.h new file mode 100644 index 0000000000..eaada081a5 --- /dev/null +++ b/hw/usb/host-libusb.h @@ -0,0 +1,16 @@ +/* + * QEMU USB host redirector + * + * SPDX-FileContributor: Philippe Mathieu-Daudé <philmd@linaro.org> + * SPDX-FileCopyrightText: 2024 Linaro Ltd. + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef HW_USB_HOST_LIBUSB_H +#define HW_USB_HOST_LIBUSB_H + +#include "qapi/qapi-types-common.h" + +void libusb_register_hmp_info_hrt(HumanReadableText *(*handler)(Error **errp)); + +#endif diff --git a/include/hw/usb.h b/include/hw/usb.h index d46d96779a..c0b34af518 100644 --- a/include/hw/usb.h +++ b/include/hw/usb.h @@ -465,9 +465,6 @@ void usb_device_reset(USBDevice *dev); void usb_wakeup(USBEndpoint *ep, unsigned int stream); void usb_generic_async_ctrl_complete(USBDevice *s, USBPacket *p); -/* usb-linux.c */ -void hmp_info_usbhost(Monitor *mon, const QDict *qdict); - /* usb ports of the VM */ #define VM_USB_HUB_SIZE 8 diff --git a/hw/usb/bus-stub.c b/hw/usb/bus-stub.c index fcabe8429e..948429bb33 100644 --- a/hw/usb/bus-stub.c +++ b/hw/usb/bus-stub.c @@ -11,7 +11,6 @@ #include "qapi/error.h" #include "qapi/qapi-commands-machine.h" #include "sysemu/sysemu.h" -#include "monitor/monitor.h" #include "hw/usb.h" USBDevice *usbdevice_create(const char *driver) @@ -26,3 +25,9 @@ HumanReadableText *qmp_x_query_usb(Error **errp) error_setg(errp, "Support for USB devices not built-in"); return NULL; } + +HumanReadableText *qmp_x_query_usbhost(Error **errp) +{ + error_setg(errp, "Support for USB devices not built-in"); + return NULL; +} diff --git a/hw/usb/host-libusb-common.c b/hw/usb/host-libusb-common.c new file mode 100644 index 0000000000..406a2b25be --- /dev/null +++ b/hw/usb/host-libusb-common.c @@ -0,0 +1,31 @@ +/* + * QEMU USB host redirector helpers + * + * SPDX-FileContributor: Philippe Mathieu-Daudé <philmd@linaro.org> + * SPDX-FileCopyrightText: 2024 Linaro Ltd. + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "qemu/module.h" +#include "qapi/error.h" +#include "qapi/qapi-commands-machine.h" +#include "monitor/monitor.h" +#include "host-libusb.h" + +static HumanReadableText *(*qmp_x_query_usbhost_handler)(Error **errp); + +void libusb_register_hmp_info_hrt(HumanReadableText *(*handler)(Error **errp)) +{ + qmp_x_query_usbhost_handler = handler; + monitor_register_hmp_info_hrt("usbhost", handler); +} + +HumanReadableText *qmp_x_query_usbhost(Error **errp) +{ + if (module_load("hw-usb-", "host", errp) <= 0) { + return NULL; + } + assert(qmp_x_query_usbhost_handler); + return qmp_x_query_usbhost_handler(errp); +} diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c index 80122b4125..b3e1443794 100644 --- a/hw/usb/host-libusb.c +++ b/hw/usb/host-libusb.c @@ -1,5 +1,5 @@ /* - * Linux host USB redirector + * QEMU USB host redirector * * Copyright (c) 2005 Fabrice Bellard * @@ -46,6 +46,8 @@ #endif #include "qapi/error.h" +#include "qapi/qapi-commands-machine.h" +#include "qapi/type-helpers.h" #include "migration/vmstate.h" #include "monitor/monitor.h" #include "qemu/error-report.h" @@ -57,6 +59,7 @@ #include "hw/qdev-properties.h" #include "hw/usb.h" +#include "host-libusb.h" /* ------------------------------------------------------------------------ */ @@ -1813,10 +1816,12 @@ static const TypeInfo usb_host_dev_info = { module_obj(TYPE_USB_HOST_DEVICE); module_kconfig(USB); +static HumanReadableText *qmp_mod_query_usbhost(Error **errp); + static void usb_host_register_types(void) { type_register_static(&usb_host_dev_info); - monitor_register_hmp("usbhost", true, hmp_info_usbhost); + libusb_register_hmp_info_hrt(qmp_mod_query_usbhost); } type_init(usb_host_register_types) @@ -1921,18 +1926,25 @@ static void usb_host_auto_check(void *unused) timer_mod(usb_auto_timer, qemu_clock_get_ms(QEMU_CLOCK_REALTIME) + 2000); } -void hmp_info_usbhost(Monitor *mon, const QDict *qdict) +static HumanReadableText *qmp_mod_query_usbhost(Error **errp) { + g_autoptr(GString) buf = g_string_new(""); libusb_device **devs = NULL; struct libusb_device_descriptor ddesc; char port[16]; int i, n; if (usb_host_init() != 0) { - return; + error_setg(errp, "Failed to init libusb"); + return NULL; } n = libusb_get_device_list(ctx, &devs); + if (!n) { + error_setg(errp, "No host USB device"); + return NULL; + } + for (i = 0; i < n; i++) { if (libusb_get_device_descriptor(devs[i], &ddesc) != 0) { continue; @@ -1941,14 +1953,15 @@ void hmp_info_usbhost(Monitor *mon, const QDict *qdict) continue; } usb_host_get_port(devs[i], port, sizeof(port)); - monitor_printf(mon, " Bus %d, Addr %d, Port %s, Speed %s Mb/s\n", - libusb_get_bus_number(devs[i]), - libusb_get_device_address(devs[i]), - port, - speed_name[libusb_get_device_speed(devs[i])]); - monitor_printf(mon, " Class %02x:", ddesc.bDeviceClass); - monitor_printf(mon, " USB device %04x:%04x", - ddesc.idVendor, ddesc.idProduct); + g_string_append_printf(buf, + " Bus %d, Addr %d, Port %s, Speed %s Mb/s\n", + libusb_get_bus_number(devs[i]), + libusb_get_device_address(devs[i]), + port, + speed_name[libusb_get_device_speed(devs[i])]); + g_string_append_printf(buf, " Class %02x:", ddesc.bDeviceClass); + g_string_append_printf(buf, " USB device %04x:%04x", + ddesc.idVendor, ddesc.idProduct); if (ddesc.iProduct) { libusb_device_handle *handle; if (libusb_open(devs[i], &handle) == 0) { @@ -1957,10 +1970,12 @@ void hmp_info_usbhost(Monitor *mon, const QDict *qdict) ddesc.iProduct, name, sizeof(name)); libusb_close(handle); - monitor_printf(mon, ", %s", name); + g_string_append_printf(buf, ", %s", name); } } - monitor_printf(mon, "\n"); + g_string_append_c(buf, '\n'); } libusb_free_device_list(devs, 1); + + return human_readable_text_from_str(buf); } diff --git a/tests/qtest/qmp-cmd-test.c b/tests/qtest/qmp-cmd-test.c index 2c15f60958..731d3c6c59 100644 --- a/tests/qtest/qmp-cmd-test.c +++ b/tests/qtest/qmp-cmd-test.c @@ -49,6 +49,9 @@ static int query_error_class(const char *cmd) { "query-vm-generation-id", ERROR_CLASS_GENERIC_ERROR }, /* Only valid with a USB bus added */ { "x-query-usb", ERROR_CLASS_GENERIC_ERROR }, +#ifdef CONFIG_USB_LIBUSB + { "x-query-usbhost", ERROR_CLASS_GENERIC_ERROR }, +#endif /* Only valid with accel=tcg */ { "x-query-jit", ERROR_CLASS_GENERIC_ERROR }, { "x-query-opcount", ERROR_CLASS_GENERIC_ERROR }, diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx index cfd4ad5651..134f970584 100644 --- a/hmp-commands-info.hx +++ b/hmp-commands-info.hx @@ -335,12 +335,14 @@ SRST Show guest USB devices. ERST +#ifdef CONFIG_USB_LIBUSB { .name = "usbhost", .args_type = "", .params = "", .help = "show host USB devices", }, +#endif SRST ``info usbhost`` diff --git a/hw/usb/meson.build b/hw/usb/meson.build index d7de1003e3..af92b504fd 100644 --- a/hw/usb/meson.build +++ b/hw/usb/meson.build @@ -7,6 +7,7 @@ system_ss.add(when: 'CONFIG_USB', if_true: files( 'core.c', 'desc.c', 'desc-msos.c', + 'host-libusb-common.c', 'libhw.c', 'pcap.c', ), if_false: files('bus-stub.c')) -- 2.41.0 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v2 2/3] hw/usb: Introduce x-query-usbhost QMP command 2024-06-11 10:23 ` [PATCH v2 2/3] hw/usb: Introduce x-query-usbhost QMP command Philippe Mathieu-Daudé @ 2024-06-11 12:28 ` Daniel P. Berrangé 2024-06-18 14:15 ` Philippe Mathieu-Daudé 1 sibling, 0 replies; 10+ messages in thread From: Daniel P. Berrangé @ 2024-06-11 12:28 UTC (permalink / raw) To: Philippe Mathieu-Daudé Cc: qemu-devel, Paolo Bonzini, Thomas Huth, Dr. David Alan Gilbert, Markus Armbruster On Tue, Jun 11, 2024 at 12:23:04PM +0200, Philippe Mathieu-Daudé wrote: > This is a counterpart to the HMP "info usbhost" 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. > > Since host-libusb.c can be built as part of the 'hw-usb' module, > we introduce the libusb_register_hmp_info_hrt() helper to allow late > registration when the module is loaded. > > Suggested-by: Daniel P. Berrangé <berrange@redhat.com> > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > qapi/machine.json | 18 ++++++++++++++++ > hw/usb/host-libusb.h | 16 ++++++++++++++ > include/hw/usb.h | 3 --- > hw/usb/bus-stub.c | 7 +++++- > hw/usb/host-libusb-common.c | 31 ++++++++++++++++++++++++++ > hw/usb/host-libusb.c | 43 +++++++++++++++++++++++++------------ > tests/qtest/qmp-cmd-test.c | 3 +++ > hmp-commands-info.hx | 2 ++ > hw/usb/meson.build | 1 + > 9 files changed, 106 insertions(+), 18 deletions(-) > create mode 100644 hw/usb/host-libusb.h > create mode 100644 hw/usb/host-libusb-common.c Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :| ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 2/3] hw/usb: Introduce x-query-usbhost QMP command 2024-06-11 10:23 ` [PATCH v2 2/3] hw/usb: Introduce x-query-usbhost QMP command Philippe Mathieu-Daudé 2024-06-11 12:28 ` Daniel P. Berrangé @ 2024-06-18 14:15 ` Philippe Mathieu-Daudé 2024-06-18 15:33 ` Philippe Mathieu-Daudé 1 sibling, 1 reply; 10+ messages in thread From: Philippe Mathieu-Daudé @ 2024-06-18 14:15 UTC (permalink / raw) To: Daniel P . Berrangé, qemu-devel Cc: Paolo Bonzini, Thomas Huth, Dr. David Alan Gilbert, Markus Armbruster On 11/6/24 12:23, Philippe Mathieu-Daudé wrote: > This is a counterpart to the HMP "info usbhost" 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. > > Since host-libusb.c can be built as part of the 'hw-usb' module, > we introduce the libusb_register_hmp_info_hrt() helper to allow late > registration when the module is loaded. > > Suggested-by: Daniel P. Berrangé <berrange@redhat.com> > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > qapi/machine.json | 18 ++++++++++++++++ > hw/usb/host-libusb.h | 16 ++++++++++++++ > include/hw/usb.h | 3 --- > hw/usb/bus-stub.c | 7 +++++- > hw/usb/host-libusb-common.c | 31 ++++++++++++++++++++++++++ > hw/usb/host-libusb.c | 43 +++++++++++++++++++++++++------------ > tests/qtest/qmp-cmd-test.c | 3 +++ > hmp-commands-info.hx | 2 ++ > hw/usb/meson.build | 1 + > 9 files changed, 106 insertions(+), 18 deletions(-) > create mode 100644 hw/usb/host-libusb.h > create mode 100644 hw/usb/host-libusb-common.c > diff --git a/include/hw/usb.h b/include/hw/usb.h > index d46d96779a..c0b34af518 100644 > --- a/include/hw/usb.h > +++ b/include/hw/usb.h > @@ -465,9 +465,6 @@ void usb_device_reset(USBDevice *dev); > void usb_wakeup(USBEndpoint *ep, unsigned int stream); > void usb_generic_async_ctrl_complete(USBDevice *s, USBPacket *p); > > -/* usb-linux.c */ > -void hmp_info_usbhost(Monitor *mon, const QDict *qdict); > - > /* usb ports of the VM */ > > #define VM_USB_HUB_SIZE 8 > diff --git a/hw/usb/bus-stub.c b/hw/usb/bus-stub.c > index fcabe8429e..948429bb33 100644 > --- a/hw/usb/bus-stub.c > +++ b/hw/usb/bus-stub.c > @@ -11,7 +11,6 @@ > #include "qapi/error.h" > #include "qapi/qapi-commands-machine.h" > #include "sysemu/sysemu.h" > -#include "monitor/monitor.h" > #include "hw/usb.h" > > USBDevice *usbdevice_create(const char *driver) > @@ -26,3 +25,9 @@ HumanReadableText *qmp_x_query_usb(Error **errp) > error_setg(errp, "Support for USB devices not built-in"); > return NULL; > } > + > +HumanReadableText *qmp_x_query_usbhost(Error **errp) > +{ > + error_setg(errp, "Support for USB devices not built-in"); > + return NULL; > +} > diff --git a/hw/usb/host-libusb-common.c b/hw/usb/host-libusb-common.c > new file mode 100644 > index 0000000000..406a2b25be > --- /dev/null > +++ b/hw/usb/host-libusb-common.c > @@ -0,0 +1,31 @@ > +/* > + * QEMU USB host redirector helpers > + * > + * SPDX-FileContributor: Philippe Mathieu-Daudé <philmd@linaro.org> > + * SPDX-FileCopyrightText: 2024 Linaro Ltd. > + * SPDX-License-Identifier: GPL-2.0-or-later > + */ > + > +#include "qemu/osdep.h" > +#include "qemu/module.h" > +#include "qapi/error.h" > +#include "qapi/qapi-commands-machine.h" > +#include "monitor/monitor.h" > +#include "host-libusb.h" > + > +static HumanReadableText *(*qmp_x_query_usbhost_handler)(Error **errp); > + > +void libusb_register_hmp_info_hrt(HumanReadableText *(*handler)(Error **errp)) > +{ > + qmp_x_query_usbhost_handler = handler; > + monitor_register_hmp_info_hrt("usbhost", handler); > +} > + > +HumanReadableText *qmp_x_query_usbhost(Error **errp) > +{ > + if (module_load("hw-usb-", "host", errp) <= 0) { > + return NULL; > + } > + assert(qmp_x_query_usbhost_handler); > + return qmp_x_query_usbhost_handler(errp); > +} > diff --git a/hw/usb/meson.build b/hw/usb/meson.build > index d7de1003e3..af92b504fd 100644 > --- a/hw/usb/meson.build > +++ b/hw/usb/meson.build > @@ -7,6 +7,7 @@ system_ss.add(when: 'CONFIG_USB', if_true: files( > 'core.c', > 'desc.c', > 'desc-msos.c', > + 'host-libusb-common.c', > 'libhw.c', > 'pcap.c', > ), if_false: files('bus-stub.c')) Since this files depends on libusb, squashing: -- >8 -- diff --git a/hw/usb/meson.build b/hw/usb/meson.build index af92b504fd..89b197fbd8 100644 --- a/hw/usb/meson.build +++ b/hw/usb/meson.build @@ -9,3 +9,2 @@ system_ss.add(when: 'CONFIG_USB', if_true: files( 'desc-msos.c', - 'host-libusb-common.c', 'libhw.c', @@ -86,2 +85,3 @@ endif if libusb.found() + system_ss.add(when: 'CONFIG_USB', if_true: files('host-libusb-common.c')) usbhost_ss = ss.source_set() --- ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v2 2/3] hw/usb: Introduce x-query-usbhost QMP command 2024-06-18 14:15 ` Philippe Mathieu-Daudé @ 2024-06-18 15:33 ` Philippe Mathieu-Daudé 0 siblings, 0 replies; 10+ messages in thread From: Philippe Mathieu-Daudé @ 2024-06-18 15:33 UTC (permalink / raw) To: Daniel P . Berrangé, qemu-devel Cc: Paolo Bonzini, Thomas Huth, Dr. David Alan Gilbert, Markus Armbruster On 18/6/24 16:15, Philippe Mathieu-Daudé wrote: > On 11/6/24 12:23, Philippe Mathieu-Daudé wrote: >> This is a counterpart to the HMP "info usbhost" 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. >> >> Since host-libusb.c can be built as part of the 'hw-usb' module, >> we introduce the libusb_register_hmp_info_hrt() helper to allow late >> registration when the module is loaded. >> >> Suggested-by: Daniel P. Berrangé <berrange@redhat.com> >> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> >> --- >> qapi/machine.json | 18 ++++++++++++++++ >> hw/usb/host-libusb.h | 16 ++++++++++++++ >> include/hw/usb.h | 3 --- >> hw/usb/bus-stub.c | 7 +++++- >> hw/usb/host-libusb-common.c | 31 ++++++++++++++++++++++++++ >> hw/usb/host-libusb.c | 43 +++++++++++++++++++++++++------------ >> tests/qtest/qmp-cmd-test.c | 3 +++ >> hmp-commands-info.hx | 2 ++ >> hw/usb/meson.build | 1 + >> 9 files changed, 106 insertions(+), 18 deletions(-) >> create mode 100644 hw/usb/host-libusb.h >> create mode 100644 hw/usb/host-libusb-common.c >> diff --git a/hw/usb/bus-stub.c b/hw/usb/bus-stub.c >> index fcabe8429e..948429bb33 100644 >> --- a/hw/usb/bus-stub.c >> +++ b/hw/usb/bus-stub.c >> @@ -11,7 +11,6 @@ >> #include "qapi/error.h" >> #include "qapi/qapi-commands-machine.h" >> #include "sysemu/sysemu.h" >> -#include "monitor/monitor.h" >> #include "hw/usb.h" >> USBDevice *usbdevice_create(const char *driver) >> @@ -26,3 +25,9 @@ HumanReadableText *qmp_x_query_usb(Error **errp) >> error_setg(errp, "Support for USB devices not built-in"); >> return NULL; >> } Also missing: #ifdef CONFIG_USB_LIBUSB >> +HumanReadableText *qmp_x_query_usbhost(Error **errp) >> +{ >> + error_setg(errp, "Support for USB devices not built-in"); >> + return NULL; >> +} #endif But still failing the build-without-defaults job: ▶ 59/61 /x86_64/qmp/x-query-usbhost - ERROR:../tests/qtest/qmp-cmd-test.c:88:test_query: assertion failed: (error) FAIL So dropping patches 2 & 3 for now. ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 3/3] monitor: Remove monitor_register_hmp() 2024-06-11 10:23 [PATCH v2 0/3] hw/usb: Introduce x-query-usbhost QMP command Philippe Mathieu-Daudé 2024-06-11 10:23 ` [PATCH v2 1/3] hw/usb: Remove unused 'host.h' header Philippe Mathieu-Daudé 2024-06-11 10:23 ` [PATCH v2 2/3] hw/usb: Introduce x-query-usbhost QMP command Philippe Mathieu-Daudé @ 2024-06-11 10:23 ` Philippe Mathieu-Daudé 2024-06-11 12:30 ` Daniel P. Berrangé 2024-06-18 10:57 ` [PATCH v2 0/3] hw/usb: Introduce x-query-usbhost QMP command Philippe Mathieu-Daudé 3 siblings, 1 reply; 10+ messages in thread From: Philippe Mathieu-Daudé @ 2024-06-11 10:23 UTC (permalink / raw) To: Daniel P . Berrangé, qemu-devel Cc: Paolo Bonzini, Thomas Huth, Dr. David Alan Gilbert, Markus Armbruster, Philippe Mathieu-Daudé Previous commit removed the last use of monitor_register_hmp(), remove it so new commands are implemented using monitor_register_hmp_info_hrt(). Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- include/monitor/monitor.h | 2 -- monitor/hmp-target.c | 16 ---------------- 2 files changed, 18 deletions(-) diff --git a/include/monitor/monitor.h b/include/monitor/monitor.h index 965f5d5450..2199a74913 100644 --- a/include/monitor/monitor.h +++ b/include/monitor/monitor.h @@ -55,8 +55,6 @@ int monitor_fdset_dup_fd_add(int64_t fdset_id, int flags); void monitor_fdset_dup_fd_remove(int dup_fd); int64_t monitor_fdset_dup_fd_find(int dup_fd); -void monitor_register_hmp(const char *name, bool info, - void (*cmd)(Monitor *mon, const QDict *qdict)); void monitor_register_hmp_info_hrt(const char *name, HumanReadableText *(*handler)(Error **errp)); diff --git a/monitor/hmp-target.c b/monitor/hmp-target.c index 1eb72ac1bf..86f48c613b 100644 --- a/monitor/hmp-target.c +++ b/monitor/hmp-target.c @@ -145,22 +145,6 @@ static void __attribute__((__constructor__)) sortcmdlist(void) compare_mon_cmd); } -void monitor_register_hmp(const char *name, bool info, - void (*cmd)(Monitor *mon, const QDict *qdict)) -{ - HMPCommand *table = info ? hmp_info_cmds : hmp_cmds; - - while (table->name != NULL) { - if (strcmp(table->name, name) == 0) { - g_assert(table->cmd == NULL && table->cmd_info_hrt == NULL); - table->cmd = cmd; - return; - } - table++; - } - g_assert_not_reached(); -} - void monitor_register_hmp_info_hrt(const char *name, HumanReadableText *(*handler)(Error **errp)) { -- 2.41.0 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v2 3/3] monitor: Remove monitor_register_hmp() 2024-06-11 10:23 ` [PATCH v2 3/3] monitor: Remove monitor_register_hmp() Philippe Mathieu-Daudé @ 2024-06-11 12:30 ` Daniel P. Berrangé 0 siblings, 0 replies; 10+ messages in thread From: Daniel P. Berrangé @ 2024-06-11 12:30 UTC (permalink / raw) To: Philippe Mathieu-Daudé Cc: qemu-devel, Paolo Bonzini, Thomas Huth, Dr. David Alan Gilbert, Markus Armbruster On Tue, Jun 11, 2024 at 12:23:05PM +0200, Philippe Mathieu-Daudé wrote: > Previous commit removed the last use of monitor_register_hmp(), > remove it so new commands are implemented using > monitor_register_hmp_info_hrt(). > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > include/monitor/monitor.h | 2 -- > monitor/hmp-target.c | 16 ---------------- > 2 files changed, 18 deletions(-) Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :| ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 0/3] hw/usb: Introduce x-query-usbhost QMP command 2024-06-11 10:23 [PATCH v2 0/3] hw/usb: Introduce x-query-usbhost QMP command Philippe Mathieu-Daudé ` (2 preceding siblings ...) 2024-06-11 10:23 ` [PATCH v2 3/3] monitor: Remove monitor_register_hmp() Philippe Mathieu-Daudé @ 2024-06-18 10:57 ` Philippe Mathieu-Daudé 3 siblings, 0 replies; 10+ messages in thread From: Philippe Mathieu-Daudé @ 2024-06-18 10:57 UTC (permalink / raw) To: Daniel P . Berrangé, qemu-devel Cc: Paolo Bonzini, Thomas Huth, Dr. David Alan Gilbert, Markus Armbruster On 11/6/24 12:23, Philippe Mathieu-Daudé wrote: > Philippe Mathieu-Daudé (3): > hw/usb: Remove unused 'host.h' header > hw/usb: Introduce x-query-usbhost QMP command > monitor: Remove monitor_register_hmp() Series queued. ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2024-06-18 15:34 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-06-11 10:23 [PATCH v2 0/3] hw/usb: Introduce x-query-usbhost QMP command Philippe Mathieu-Daudé 2024-06-11 10:23 ` [PATCH v2 1/3] hw/usb: Remove unused 'host.h' header Philippe Mathieu-Daudé 2024-06-11 12:25 ` Daniel P. Berrangé 2024-06-11 10:23 ` [PATCH v2 2/3] hw/usb: Introduce x-query-usbhost QMP command Philippe Mathieu-Daudé 2024-06-11 12:28 ` Daniel P. Berrangé 2024-06-18 14:15 ` Philippe Mathieu-Daudé 2024-06-18 15:33 ` Philippe Mathieu-Daudé 2024-06-11 10:23 ` [PATCH v2 3/3] monitor: Remove monitor_register_hmp() Philippe Mathieu-Daudé 2024-06-11 12:30 ` Daniel P. Berrangé 2024-06-18 10:57 ` [PATCH v2 0/3] hw/usb: Introduce x-query-usbhost QMP command Philippe Mathieu-Daudé
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).