From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36014) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WoqZ2-0002mF-53 for qemu-devel@nongnu.org; Mon, 26 May 2014 04:47:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WoqYt-0002bm-Hz for qemu-devel@nongnu.org; Mon, 26 May 2014 04:47:24 -0400 Received: from mx1.redhat.com ([209.132.183.28]:27140) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WoqYt-0002bG-8u for qemu-devel@nongnu.org; Mon, 26 May 2014 04:47:15 -0400 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4Q8lEm8019798 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 26 May 2014 04:47:14 -0400 From: Gerd Hoffmann Date: Mon, 26 May 2014 10:47:06 +0200 Message-Id: <1401094027-5275-10-git-send-email-kraxel@redhat.com> In-Reply-To: <1401094027-5275-1-git-send-email-kraxel@redhat.com> References: <1401094027-5275-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [PULL 09/10] usb-host-libusb: Add alloc / free streams ops List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Hans de Goede , Gerd Hoffmann From: Hans de Goede Signed-off-by: Hans de Goede Signed-off-by: Gerd Hoffmann --- hw/usb/host-libusb.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c index 3fdbd93..401eb74 100644 --- a/hw/usb/host-libusb.c +++ b/hw/usb/host-libusb.c @@ -1280,6 +1280,54 @@ static void usb_host_handle_reset(USBDevice *udev) } } +static int usb_host_alloc_streams(USBDevice *udev, USBEndpoint **eps, + int nr_eps, int streams) +{ +#if LIBUSBX_API_VERSION >= 0x01000103 + USBHostDevice *s = USB_HOST_DEVICE(udev); + unsigned char endpoints[30]; + int i, rc; + + for (i = 0; i < nr_eps; i++) { + endpoints[i] = eps[i]->nr; + if (eps[i]->pid == USB_TOKEN_IN) { + endpoints[i] |= 0x80; + } + } + rc = libusb_alloc_streams(s->dh, streams, endpoints, nr_eps); + if (rc < 0) { + usb_host_libusb_error("libusb_alloc_streams", rc); + } else if (rc != streams) { + fprintf(stderr, + "libusb_alloc_streams: got less streams then requested %d < %d\n", + rc, streams); + } + + return (rc == streams) ? 0 : -1; +#else + fprintf(stderr, "libusb_alloc_streams: error not implemented\n"); + return -1; +#endif +} + +static void usb_host_free_streams(USBDevice *udev, USBEndpoint **eps, + int nr_eps) +{ +#if LIBUSBX_API_VERSION >= 0x01000103 + USBHostDevice *s = USB_HOST_DEVICE(udev); + unsigned char endpoints[30]; + int i; + + for (i = 0; i < nr_eps; i++) { + endpoints[i] = eps[i]->nr; + if (eps[i]->pid == USB_TOKEN_IN) { + endpoints[i] |= 0x80; + } + } + libusb_free_streams(s->dh, endpoints, nr_eps); +#endif +} + /* * This is *NOT* about restoring state. We have absolutely no idea * what state the host device is in at the moment and whenever it is @@ -1361,6 +1409,8 @@ static void usb_host_class_initfn(ObjectClass *klass, void *data) uc->handle_reset = usb_host_handle_reset; uc->handle_destroy = usb_host_handle_destroy; uc->flush_ep_queue = usb_host_flush_ep_queue; + uc->alloc_streams = usb_host_alloc_streams; + uc->free_streams = usb_host_free_streams; dc->vmsd = &vmstate_usb_host; dc->props = usb_host_dev_properties; set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); -- 1.8.3.1