From b7b2a60b01036c6e7c21e7dc41829c7b5f6011b4 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Thu, 24 Jun 2021 12:38:33 +0200 Subject: usb: drop usb_host_dev_is_scsi_storage hook Introduce an usb device flag instead, set it when usb-host looks at the device descriptors anyway. Also set it for emulated storage devices, for consistency. Add an inline helper function to check the flag. Signed-off-by: Gerd Hoffmann Acked-by: David Gibson Reviewed-by: Jose R. Ziviani Message-Id: <20210624103836.2382472-32-kraxel@redhat.com> Signed-off-by: Paolo Bonzini --- hw/usb/host-libusb.c | 36 +++++++----------------------------- 1 file changed, 7 insertions(+), 29 deletions(-) (limited to 'hw/usb/host-libusb.c') diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c index 2518306f52..e6d21aa8e1 100644 --- a/hw/usb/host-libusb.c +++ b/hw/usb/host-libusb.c @@ -770,6 +770,13 @@ static void usb_host_speed_compat(USBHostDevice *s) for (i = 0; i < conf->bNumInterfaces; i++) { for (a = 0; a < conf->interface[i].num_altsetting; a++) { intf = &conf->interface[i].altsetting[a]; + + if (intf->bInterfaceClass == LIBUSB_CLASS_MASS_STORAGE && + intf->bInterfaceSubClass == 6) { /* SCSI */ + udev->flags |= (1 << USB_DEV_FLAG_IS_SCSI_STORAGE); + break; + } + for (e = 0; e < intf->bNumEndpoints; e++) { endp = &intf->endpoint[e]; type = endp->bmAttributes & 0x3; @@ -1893,35 +1900,6 @@ static void usb_host_auto_check(void *unused) timer_mod(usb_auto_timer, qemu_clock_get_ms(QEMU_CLOCK_REALTIME) + 2000); } -/** - * Check whether USB host device has a USB mass storage SCSI interface - */ -bool usb_host_dev_is_scsi_storage(USBDevice *ud) -{ - USBHostDevice *uhd = USB_HOST_DEVICE(ud); - struct libusb_config_descriptor *conf; - const struct libusb_interface_descriptor *intf; - bool is_scsi_storage = false; - int i; - - if (!uhd || libusb_get_active_config_descriptor(uhd->dev, &conf) != 0) { - return false; - } - - for (i = 0; i < conf->bNumInterfaces; i++) { - intf = &conf->interface[i].altsetting[ud->altsetting[i]]; - if (intf->bInterfaceClass == LIBUSB_CLASS_MASS_STORAGE && - intf->bInterfaceSubClass == 6) { /* 6 means SCSI */ - is_scsi_storage = true; - break; - } - } - - libusb_free_config_descriptor(conf); - - return is_scsi_storage; -} - void hmp_info_usbhost(Monitor *mon, const QDict *qdict) { libusb_device **devs = NULL; -- cgit 1.4.1 From f1a74bf976d52409047a187ff4ef1f3ac8c6c612 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Thu, 24 Jun 2021 12:38:34 +0200 Subject: monitor/usb: register 'info usbhost' dynamically Signed-off-by: Gerd Hoffmann Reviewed-by: Jose R. Ziviani Message-Id: <20210624103836.2382472-33-kraxel@redhat.com> Signed-off-by: Paolo Bonzini --- hmp-commands-info.hx | 1 - hw/usb/host-libusb.c | 1 + hw/usb/host-stub.c | 40 ---------------------------------------- hw/usb/meson.build | 4 +--- 4 files changed, 2 insertions(+), 44 deletions(-) delete mode 100644 hw/usb/host-stub.c (limited to 'hw/usb/host-libusb.c') diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx index fb59c27200..ce42aef47a 100644 --- a/hmp-commands-info.hx +++ b/hmp-commands-info.hx @@ -368,7 +368,6 @@ ERST .args_type = "", .params = "", .help = "show host USB devices", - .cmd = hmp_info_usbhost, }, SRST diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c index e6d21aa8e1..2b7f87872c 100644 --- a/hw/usb/host-libusb.c +++ b/hw/usb/host-libusb.c @@ -1781,6 +1781,7 @@ static TypeInfo usb_host_dev_info = { static void usb_host_register_types(void) { type_register_static(&usb_host_dev_info); + monitor_register_hmp("usbhost", true, hmp_info_usbhost); } type_init(usb_host_register_types) diff --git a/hw/usb/host-stub.c b/hw/usb/host-stub.c deleted file mode 100644 index bbe69baa39..0000000000 --- a/hw/usb/host-stub.c +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Stub 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 - * 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. - */ - -#include "qemu/osdep.h" -#include "hw/usb.h" -#include "monitor/monitor.h" - -void hmp_info_usbhost(Monitor *mon, const QDict *qdict) -{ - monitor_printf(mon, "USB host devices not supported\n"); -} diff --git a/hw/usb/meson.build b/hw/usb/meson.build index 4f24b5274d..817f3e027a 100644 --- a/hw/usb/meson.build +++ b/hw/usb/meson.build @@ -73,9 +73,7 @@ endif # usb pass-through softmmu_ss.add(when: ['CONFIG_USB', libusb], - if_true: files('host-libusb.c'), - if_false: files('host-stub.c')) -softmmu_ss.add(when: 'CONFIG_ALL', if_true: files('host-stub.c')) + if_true: files('host-libusb.c')) softmmu_ss.add(when: ['CONFIG_USB', 'CONFIG_XEN', libusb], if_true: files('xen-usb.c')) -- cgit 1.4.1 From 627302afb2f85cdd4b59595361876487aef19b7a Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Thu, 24 Jun 2021 12:38:35 +0200 Subject: usb: build usb-host as module Drop one more shared library dependency (libusb) from core qemu. Signed-off-by: Gerd Hoffmann Reviewed-by: Jose R. Ziviani Message-Id: <20210624103836.2382472-34-kraxel@redhat.com> Signed-off-by: Paolo Bonzini --- hw/usb/host-libusb.c | 1 + hw/usb/meson.build | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) (limited to 'hw/usb/host-libusb.c') diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c index 2b7f87872c..c0f314462a 100644 --- a/hw/usb/host-libusb.c +++ b/hw/usb/host-libusb.c @@ -1777,6 +1777,7 @@ static TypeInfo usb_host_dev_info = { .class_init = usb_host_class_initfn, .instance_init = usb_host_instance_init, }; +module_obj(TYPE_USB_HOST_DEVICE); static void usb_host_register_types(void) { diff --git a/hw/usb/meson.build b/hw/usb/meson.build index 817f3e027a..3ca6127937 100644 --- a/hw/usb/meson.build +++ b/hw/usb/meson.build @@ -72,8 +72,12 @@ if usbredir.found() endif # usb pass-through -softmmu_ss.add(when: ['CONFIG_USB', libusb], - if_true: files('host-libusb.c')) +if config_host.has_key('CONFIG_USB_LIBUSB') + usbhost_ss = ss.source_set() + usbhost_ss.add(when: ['CONFIG_USB', libusb], + if_true: files('host-libusb.c')) + hw_usb_modules += {'host': usbhost_ss} +endif softmmu_ss.add(when: ['CONFIG_USB', 'CONFIG_XEN', libusb], if_true: files('xen-usb.c')) -- cgit 1.4.1