1 /* -*- Mode: C; c-basic-offset:8 ; indent-tabs-mode:t -*- */
3 * Linux usbfs backend for libusb
4 * Copyright © 2007-2009 Daniel Drake <dsd@gentoo.org>
5 * Copyright © 2001 Johannes Erdfelt <johannes@erdfelt.com>
6 * Copyright © 2013 Nathan Hjelm <hjelmn@mac.com>
7 * Copyright © 2012-2013 Hans de Goede <hdegoede@redhat.com>
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
35 #include <sys/ioctl.h>
38 #include <sys/types.h>
39 #include <sys/utsname.h>
43 #include "linux_usbfs.h"
46 * opening a usbfs node causes the device to be resumed, so we attempt to
47 * avoid this during enumeration.
49 * sysfs allows us to read the kernel's in-memory copies of device descriptors
50 * and so forth, avoiding the need to open the device:
51 * - The binary "descriptors" file contains all config descriptors since
52 * 2.6.26, commit 217a9081d8e69026186067711131b77f0ce219ed
53 * - The binary "descriptors" file was added in 2.6.23, commit
54 * 69d42a78f935d19384d1f6e4f94b65bb162b36df, but it only contains the
55 * active config descriptors
56 * - The "busnum" file was added in 2.6.22, commit
57 * 83f7d958eab2fbc6b159ee92bf1493924e1d0f72
58 * - The "devnum" file has been present since pre-2.6.18
59 * - the "bConfigurationValue" file has been present since pre-2.6.18
61 * If we have bConfigurationValue, busnum, and devnum, then we can determine
62 * the active configuration without having to open the usbfs node in RDWR mode.
63 * The busnum file is important as that is the only way we can relate sysfs
64 * devices to usbfs nodes.
66 * If we also have all descriptors, we can obtain the device descriptor and
67 * configuration without touching usbfs at all.
70 /* endianness for multi-byte fields:
72 * Descriptors exposed by usbfs have the multi-byte fields in the device
73 * descriptor as host endian. Multi-byte fields in the other descriptors are
74 * bus-endian. The kernel documentation says otherwise, but it is wrong.
76 * In sysfs all descriptors are bus-endian.
79 static const char *usbfs_path = NULL;
81 /* use usbdev*.* device names in /dev instead of the usbfs bus directories */
82 static int usbdev_names = 0;
84 /* Linux has changed the maximum length of an individual isochronous packet
85 * over time. Initially this limit was 1,023 bytes, but Linux 2.6.18
86 * (commit 3612242e527eb47ee4756b5350f8bdf791aa5ede) increased this value to
87 * 8,192 bytes to support higher bandwidth devices. Linux 3.10
88 * (commit e2e2f0ea1c935edcf53feb4c4c8fdb4f86d57dd9) further increased this
89 * value to 49,152 bytes to support super speed devices.
91 static unsigned int max_iso_packet_len = 0;
93 /* Linux 2.6.23 adds support for O_CLOEXEC when opening files, which marks the
94 * close-on-exec flag in the underlying file descriptor. */
95 static int supports_flag_cloexec = -1;
97 /* Linux 2.6.32 adds support for a bulk continuation URB flag. this basically
98 * allows us to mark URBs as being part of a specific logical transfer when
99 * we submit them to the kernel. then, on any error except a cancellation, all
100 * URBs within that transfer will be cancelled and no more URBs will be
101 * accepted for the transfer, meaning that no more data can creep in.
103 * The BULK_CONTINUATION flag must be set on all URBs within a bulk transfer
104 * (in either direction) except the first.
105 * For IN transfers, we must also set SHORT_NOT_OK on all URBs except the
106 * last; it means that the kernel should treat a short reply as an error.
107 * For OUT transfers, SHORT_NOT_OK must not be set. it isn't needed (OUT
108 * transfers can't be short unless there's already some sort of error), and
109 * setting this flag is disallowed (a kernel with USB debugging enabled will
112 static int supports_flag_bulk_continuation = -1;
114 /* Linux 2.6.31 fixes support for the zero length packet URB flag. This
115 * allows us to mark URBs that should be followed by a zero length data
116 * packet, which can be required by device- or class-specific protocols.
118 static int supports_flag_zero_packet = -1;
120 /* clock ID for monotonic clock, as not all clock sources are available on all
121 * systems. appropriate choice made at initialization time. */
122 static clockid_t monotonic_clkid = -1;
124 /* Linux 2.6.22 (commit 83f7d958eab2fbc6b159ee92bf1493924e1d0f72) adds a busnum
125 * to sysfs, so we can relate devices. This also implies that we can read
126 * the active configuration through bConfigurationValue */
127 static int sysfs_can_relate_devices = -1;
129 /* Linux 2.6.26 (commit 217a9081d8e69026186067711131b77f0ce219ed) adds all
130 * config descriptors (rather then just the active config) to the sysfs
131 * descriptors file, so from then on we can use them. */
132 static int sysfs_has_descriptors = -1;
134 /* how many times have we initted (and not exited) ? */
135 static int init_count = 0;
137 /* Serialize hotplug start/stop */
138 static usbi_mutex_static_t linux_hotplug_startstop_lock = USBI_MUTEX_INITIALIZER;
139 /* Serialize scan-devices, event-thread, and poll */
140 usbi_mutex_static_t linux_hotplug_lock = USBI_MUTEX_INITIALIZER;
142 static int linux_start_event_monitor(void);
143 static int linux_stop_event_monitor(void);
144 static int linux_scan_devices(struct libusb_context *ctx);
145 static int sysfs_scan_device(struct libusb_context *ctx, const char *devname);
146 static int detach_kernel_driver_and_claim(struct libusb_device_handle *, int);
148 #if !defined(USE_UDEV)
149 static int linux_default_scan_devices (struct libusb_context *ctx);
152 struct kernel_version {
158 struct linux_device_priv {
160 unsigned char *descriptors;
162 int active_config; /* cache val for !sysfs_can_relate_devices */
165 struct linux_device_handle_priv {
173 /* submission failed after the first URB, so await cancellation/completion
174 * of all the others */
177 /* cancelled by user or timeout */
180 /* completed multi-URB transfer in non-final URB */
183 /* one or more urbs encountered a low-level error */
187 struct linux_transfer_priv {
189 struct usbfs_urb *urbs;
190 struct usbfs_urb **iso_urbs;
193 enum reap_action reap_action;
196 enum libusb_transfer_status reap_status;
198 /* next iso packet in user-supplied transfer to be populated */
199 int iso_packet_offset;
202 static int _open(const char *path, int flags)
204 #if defined(O_CLOEXEC)
205 if (supports_flag_cloexec)
206 return open(path, flags | O_CLOEXEC);
209 return open(path, flags);
212 static int _get_usbfs_fd(struct libusb_device *dev, mode_t mode, int silent)
214 struct libusb_context *ctx = DEVICE_CTX(dev);
220 snprintf(path, PATH_MAX, "%s/usbdev%d.%d",
221 usbfs_path, dev->bus_number, dev->device_address);
223 snprintf(path, PATH_MAX, "%s/%03d/%03d",
224 usbfs_path, dev->bus_number, dev->device_address);
226 fd = _open(path, mode);
228 return fd; /* Success */
230 if (errno == ENOENT) {
232 usbi_err(ctx, "File doesn't exist, wait %d ms and try again", delay/1000);
234 /* Wait 10ms for USB device path creation.*/
235 nanosleep(&(struct timespec){delay / 1000000, (delay * 1000) % 1000000000UL}, NULL);
237 fd = _open(path, mode);
239 return fd; /* Success */
243 usbi_err(ctx, "libusb couldn't open USB device %s: %s",
244 path, strerror(errno));
245 if (errno == EACCES && mode == O_RDWR)
246 usbi_err(ctx, "libusb requires write access to USB "
251 return LIBUSB_ERROR_ACCESS;
253 return LIBUSB_ERROR_NO_DEVICE;
254 return LIBUSB_ERROR_IO;
257 static struct linux_device_priv *_device_priv(struct libusb_device *dev)
259 return (struct linux_device_priv *) dev->os_priv;
262 static struct linux_device_handle_priv *_device_handle_priv(
263 struct libusb_device_handle *handle)
265 return (struct linux_device_handle_priv *) handle->os_priv;
268 /* check dirent for a /dev/usbdev%d.%d name
269 * optionally return bus/device on success */
270 static int _is_usbdev_entry(struct dirent *entry, int *bus_p, int *dev_p)
274 if (sscanf(entry->d_name, "usbdev%d.%d", &busnum, &devnum) != 2)
277 usbi_dbg("found: %s", entry->d_name);
285 static int check_usb_vfs(const char *dirname)
288 struct dirent *entry;
291 dir = opendir(dirname);
295 while ((entry = readdir(dir)) != NULL) {
296 if (entry->d_name[0] == '.')
299 /* We assume if we find any files that it must be the right place */
308 static const char *find_usbfs_path(void)
310 const char *path = "/dev/bus/usb";
311 const char *ret = NULL;
313 if (check_usb_vfs(path)) {
316 path = "/proc/bus/usb";
317 if (check_usb_vfs(path))
321 /* look for /dev/usbdev*.* if the normal places fail */
323 struct dirent *entry;
329 while ((entry = readdir(dir)) != NULL) {
330 if (_is_usbdev_entry(entry, NULL, NULL)) {
331 /* found one; that's enough */
341 /* On udev based systems without any usb-devices /dev/bus/usb will not
342 * exist. So if we've not found anything and we're using udev for hotplug
343 * simply assume /dev/bus/usb rather then making libusb_init fail. */
344 #if defined(USE_UDEV)
346 ret = "/dev/bus/usb";
350 usbi_dbg("found usbfs at %s", ret);
355 /* the monotonic clock is not usable on all systems (e.g. embedded ones often
356 * seem to lack it). fall back to REALTIME if we have to. */
357 static clockid_t find_monotonic_clock(void)
359 #ifdef CLOCK_MONOTONIC
363 /* Linux 2.6.28 adds CLOCK_MONOTONIC_RAW but we don't use it
364 * because it's not available through timerfd */
365 r = clock_gettime(CLOCK_MONOTONIC, &ts);
367 return CLOCK_MONOTONIC;
368 usbi_dbg("monotonic clock doesn't work, errno %d", errno);
371 return CLOCK_REALTIME;
374 static int get_kernel_version(struct libusb_context *ctx,
375 struct kernel_version *ver)
380 if (uname(&uts) < 0) {
381 usbi_err(ctx, "uname failed, errno %d", errno);
385 atoms = sscanf(uts.release, "%d.%d.%d", &ver->major, &ver->minor, &ver->sublevel);
387 usbi_err(ctx, "failed to parse uname release '%s'", uts.release);
396 usbi_dbg("reported kernel version is %s", uts.release);
401 static int kernel_version_ge(const struct kernel_version *ver,
402 int major, int minor, int sublevel)
404 if (ver->major > major)
406 else if (ver->major < major)
409 /* kmajor == major */
410 if (ver->minor == -1 && ver->sublevel == -1)
411 return 0 == minor && 0 == sublevel;
412 else if (ver->minor > minor)
414 else if (ver->minor < minor)
417 /* kminor == minor */
418 if (ver->sublevel == -1)
419 return 0 == sublevel;
421 return ver->sublevel >= sublevel;
424 static int op_init(struct libusb_context *ctx)
426 struct kernel_version kversion;
430 usbfs_path = find_usbfs_path();
432 usbi_err(ctx, "could not find usbfs");
433 return LIBUSB_ERROR_OTHER;
436 if (monotonic_clkid == -1)
437 monotonic_clkid = find_monotonic_clock();
439 if (get_kernel_version(ctx, &kversion) < 0)
440 return LIBUSB_ERROR_OTHER;
442 if (supports_flag_cloexec == -1) {
443 /* O_CLOEXEC flag available from Linux 2.6.23 */
444 supports_flag_cloexec = kernel_version_ge(&kversion,2,6,23);
447 if (supports_flag_bulk_continuation == -1) {
448 /* bulk continuation URB flag available from Linux 2.6.32 */
449 supports_flag_bulk_continuation = kernel_version_ge(&kversion,2,6,32);
452 if (supports_flag_bulk_continuation)
453 usbi_dbg("bulk continuation flag supported");
455 if (-1 == supports_flag_zero_packet) {
456 /* zero length packet URB flag fixed since Linux 2.6.31 */
457 supports_flag_zero_packet = kernel_version_ge(&kversion,2,6,31);
460 if (supports_flag_zero_packet)
461 usbi_dbg("zero length packet flag supported");
463 if (!max_iso_packet_len) {
464 if (kernel_version_ge(&kversion,3,10,0))
465 max_iso_packet_len = 49152;
466 else if (kernel_version_ge(&kversion,2,6,18))
467 max_iso_packet_len = 8192;
469 max_iso_packet_len = 1023;
472 usbi_dbg("max iso packet length is (likely) %u bytes", max_iso_packet_len);
474 if (-1 == sysfs_has_descriptors) {
475 /* sysfs descriptors has all descriptors since Linux 2.6.26 */
476 sysfs_has_descriptors = kernel_version_ge(&kversion,2,6,26);
479 if (-1 == sysfs_can_relate_devices) {
480 /* sysfs has busnum since Linux 2.6.22 */
481 sysfs_can_relate_devices = kernel_version_ge(&kversion,2,6,22);
484 if (sysfs_can_relate_devices || sysfs_has_descriptors) {
485 r = stat(SYSFS_DEVICE_PATH, &statbuf);
486 if (r != 0 || !S_ISDIR(statbuf.st_mode)) {
487 usbi_warn(ctx, "sysfs not mounted");
488 sysfs_can_relate_devices = 0;
489 sysfs_has_descriptors = 0;
493 if (sysfs_can_relate_devices)
494 usbi_dbg("sysfs can relate devices");
496 if (sysfs_has_descriptors)
497 usbi_dbg("sysfs has complete descriptors");
499 usbi_mutex_static_lock(&linux_hotplug_startstop_lock);
501 if (init_count == 0) {
502 /* start up hotplug event handler */
503 r = linux_start_event_monitor();
505 if (r == LIBUSB_SUCCESS) {
506 r = linux_scan_devices(ctx);
507 if (r == LIBUSB_SUCCESS)
509 else if (init_count == 0)
510 linux_stop_event_monitor();
512 usbi_err(ctx, "error starting hotplug event monitor");
513 usbi_mutex_static_unlock(&linux_hotplug_startstop_lock);
518 static void op_exit(struct libusb_context *ctx)
521 usbi_mutex_static_lock(&linux_hotplug_startstop_lock);
522 assert(init_count != 0);
524 /* tear down event handler */
525 (void)linux_stop_event_monitor();
527 usbi_mutex_static_unlock(&linux_hotplug_startstop_lock);
530 static int linux_start_event_monitor(void)
532 #if defined(USE_UDEV)
533 return linux_udev_start_event_monitor();
535 return linux_netlink_start_event_monitor();
539 static int linux_stop_event_monitor(void)
541 #if defined(USE_UDEV)
542 return linux_udev_stop_event_monitor();
544 return linux_netlink_stop_event_monitor();
548 static int linux_scan_devices(struct libusb_context *ctx)
552 usbi_mutex_static_lock(&linux_hotplug_lock);
554 #if defined(USE_UDEV)
555 ret = linux_udev_scan_devices(ctx);
557 ret = linux_default_scan_devices(ctx);
560 usbi_mutex_static_unlock(&linux_hotplug_lock);
565 static void op_hotplug_poll(void)
567 #if defined(USE_UDEV)
568 linux_udev_hotplug_poll();
570 linux_netlink_hotplug_poll();
574 static int _open_sysfs_attr(struct libusb_device *dev, const char *attr)
576 struct linux_device_priv *priv = _device_priv(dev);
577 char filename[PATH_MAX];
580 snprintf(filename, PATH_MAX, "%s/%s/%s",
581 SYSFS_DEVICE_PATH, priv->sysfs_dir, attr);
582 fd = _open(filename, O_RDONLY);
584 usbi_err(DEVICE_CTX(dev),
585 "open %s failed ret=%d errno=%d", filename, fd, errno);
586 return LIBUSB_ERROR_IO;
592 /* Note only suitable for attributes which always read >= 0, < 0 is error */
593 static int __read_sysfs_attr(struct libusb_context *ctx,
594 const char *devname, const char *attr)
596 char filename[PATH_MAX];
600 snprintf(filename, PATH_MAX, "%s/%s/%s", SYSFS_DEVICE_PATH,
602 fd = _open(filename, O_RDONLY);
604 if (errno == ENOENT) {
605 /* File doesn't exist. Assume the device has been
606 disconnected (see trac ticket #70). */
607 return LIBUSB_ERROR_NO_DEVICE;
609 usbi_err(ctx, "open %s failed errno=%d", filename, errno);
610 return LIBUSB_ERROR_IO;
615 usbi_err(ctx, "fdopen %s failed errno=%d", filename, errno);
617 return LIBUSB_ERROR_OTHER;
620 r = fscanf(f, "%d", &value);
623 usbi_err(ctx, "fscanf %s returned %d, errno=%d", attr, r, errno);
624 return LIBUSB_ERROR_NO_DEVICE; /* For unplug race (trac #70) */
627 usbi_err(ctx, "%s contains a negative value", filename);
628 return LIBUSB_ERROR_IO;
634 static int op_get_device_descriptor(struct libusb_device *dev,
635 unsigned char *buffer, int *host_endian)
637 struct linux_device_priv *priv = _device_priv(dev);
639 *host_endian = sysfs_has_descriptors ? 0 : 1;
640 memcpy(buffer, priv->descriptors, DEVICE_DESC_LENGTH);
645 /* read the bConfigurationValue for a device */
646 static int sysfs_get_active_config(struct libusb_device *dev, int *config)
649 char tmp[5] = {0, 0, 0, 0, 0};
654 fd = _open_sysfs_attr(dev, "bConfigurationValue");
658 r = read(fd, tmp, sizeof(tmp));
661 usbi_err(DEVICE_CTX(dev),
662 "read bConfigurationValue failed ret=%d errno=%d", r, errno);
663 return LIBUSB_ERROR_IO;
665 usbi_dbg("device unconfigured");
670 if (tmp[sizeof(tmp) - 1] != 0) {
671 usbi_err(DEVICE_CTX(dev), "not null-terminated?");
672 return LIBUSB_ERROR_IO;
673 } else if (tmp[0] == 0) {
674 usbi_err(DEVICE_CTX(dev), "no configuration value?");
675 return LIBUSB_ERROR_IO;
678 num = strtol(tmp, &endptr, 10);
680 usbi_err(DEVICE_CTX(dev), "error converting '%s' to integer", tmp);
681 return LIBUSB_ERROR_IO;
688 int linux_get_device_address (struct libusb_context *ctx, int detached,
689 uint8_t *busnum, uint8_t *devaddr,const char *dev_node,
690 const char *sys_name)
694 usbi_dbg("getting address for device: %s detached: %d", sys_name, detached);
695 /* can't use sysfs to read the bus and device number if the
696 * device has been detached */
697 if (!sysfs_can_relate_devices || detached || NULL == sys_name) {
698 if (NULL == dev_node) {
699 return LIBUSB_ERROR_OTHER;
702 /* will this work with all supported kernel versions? */
703 if (!strncmp(dev_node, "/dev/bus/usb", 12)) {
704 sscanf (dev_node, "/dev/bus/usb/%hhu/%hhu", busnum, devaddr);
705 } else if (!strncmp(dev_node, "/proc/bus/usb", 13)) {
706 sscanf (dev_node, "/proc/bus/usb/%hhu/%hhu", busnum, devaddr);
709 return LIBUSB_SUCCESS;
712 usbi_dbg("scan %s", sys_name);
714 sysfs_attr = __read_sysfs_attr(ctx, sys_name, "busnum");
717 if (sysfs_attr > 255)
718 return LIBUSB_ERROR_INVALID_PARAM;
719 *busnum = (uint8_t) sysfs_attr;
721 sysfs_attr = __read_sysfs_attr(ctx, sys_name, "devnum");
724 if (sysfs_attr > 255)
725 return LIBUSB_ERROR_INVALID_PARAM;
727 *devaddr = (uint8_t) sysfs_attr;
729 usbi_dbg("bus=%d dev=%d", *busnum, *devaddr);
731 return LIBUSB_SUCCESS;
734 /* Return offset of the next descriptor with the given type */
735 static int seek_to_next_descriptor(struct libusb_context *ctx,
736 uint8_t descriptor_type, unsigned char *buffer, int size)
738 struct usb_descriptor_header header;
741 for (i = 0; size >= 0; i += header.bLength, size -= header.bLength) {
743 return LIBUSB_ERROR_NOT_FOUND;
746 usbi_err(ctx, "short descriptor read %d/2", size);
747 return LIBUSB_ERROR_IO;
749 usbi_parse_descriptor(buffer + i, "bb", &header, 0);
751 if (i && header.bDescriptorType == descriptor_type)
754 usbi_err(ctx, "bLength overflow by %d bytes", -size);
755 return LIBUSB_ERROR_IO;
758 /* Return offset to next config */
759 static int seek_to_next_config(struct libusb_context *ctx,
760 unsigned char *buffer, int size)
762 struct libusb_config_descriptor config;
765 return LIBUSB_ERROR_NOT_FOUND;
767 if (size < LIBUSB_DT_CONFIG_SIZE) {
768 usbi_err(ctx, "short descriptor read %d/%d",
769 size, LIBUSB_DT_CONFIG_SIZE);
770 return LIBUSB_ERROR_IO;
773 usbi_parse_descriptor(buffer, "bbwbbbbb", &config, 0);
774 if (config.bDescriptorType != LIBUSB_DT_CONFIG) {
775 usbi_err(ctx, "descriptor is not a config desc (type 0x%02x)",
776 config.bDescriptorType);
777 return LIBUSB_ERROR_IO;
781 * In usbfs the config descriptors are config.wTotalLength bytes apart,
782 * with any short reads from the device appearing as holes in the file.
784 * In sysfs wTotalLength is ignored, instead the kernel returns a
785 * config descriptor with verified bLength fields, with descriptors
786 * with an invalid bLength removed.
788 if (sysfs_has_descriptors) {
789 int next = seek_to_next_descriptor(ctx, LIBUSB_DT_CONFIG,
791 if (next == LIBUSB_ERROR_NOT_FOUND)
796 if (next != config.wTotalLength)
797 usbi_warn(ctx, "config length mismatch wTotalLength "
798 "%d real %d", config.wTotalLength, next);
801 if (config.wTotalLength < LIBUSB_DT_CONFIG_SIZE) {
802 usbi_err(ctx, "invalid wTotalLength %d",
803 config.wTotalLength);
804 return LIBUSB_ERROR_IO;
805 } else if (config.wTotalLength > size) {
806 usbi_warn(ctx, "short descriptor read %d/%d",
807 size, config.wTotalLength);
810 return config.wTotalLength;
814 static int op_get_config_descriptor_by_value(struct libusb_device *dev,
815 uint8_t value, unsigned char **buffer, int *host_endian)
817 struct libusb_context *ctx = DEVICE_CTX(dev);
818 struct linux_device_priv *priv = _device_priv(dev);
819 unsigned char *descriptors = priv->descriptors;
820 int size = priv->descriptors_len;
821 struct libusb_config_descriptor *config;
824 /* Unlike the device desc. config descs. are always in raw format */
827 /* Skip device header */
828 descriptors += DEVICE_DESC_LENGTH;
829 size -= DEVICE_DESC_LENGTH;
831 /* Seek till the config is found, or till "EOF" */
833 int next = seek_to_next_config(ctx, descriptors, size);
836 config = (struct libusb_config_descriptor *)descriptors;
837 if (config->bConfigurationValue == value) {
838 *buffer = descriptors;
846 static int op_get_active_config_descriptor(struct libusb_device *dev,
847 unsigned char *buffer, size_t len, int *host_endian)
850 unsigned char *config_desc;
852 if (sysfs_can_relate_devices) {
853 r = sysfs_get_active_config(dev, &config);
857 /* Use cached bConfigurationValue */
858 struct linux_device_priv *priv = _device_priv(dev);
859 config = priv->active_config;
862 return LIBUSB_ERROR_NOT_FOUND;
864 r = op_get_config_descriptor_by_value(dev, config, &config_desc,
869 len = MIN(len, (size_t)r);
870 memcpy(buffer, config_desc, len);
874 static int op_get_config_descriptor(struct libusb_device *dev,
875 uint8_t config_index, unsigned char *buffer, size_t len, int *host_endian)
877 struct linux_device_priv *priv = _device_priv(dev);
878 unsigned char *descriptors = priv->descriptors;
879 int i, r, size = priv->descriptors_len;
881 /* Unlike the device desc. config descs. are always in raw format */
884 /* Skip device header */
885 descriptors += DEVICE_DESC_LENGTH;
886 size -= DEVICE_DESC_LENGTH;
888 /* Seek till the config is found, or till "EOF" */
890 r = seek_to_next_config(DEVICE_CTX(dev), descriptors, size);
893 if (i == config_index)
899 len = MIN(len, (size_t)r);
900 memcpy(buffer, descriptors, len);
904 /* send a control message to retrieve active configuration */
905 static int usbfs_get_active_config(struct libusb_device *dev, int fd)
907 struct linux_device_priv *priv = _device_priv(dev);
908 unsigned char active_config = 0;
911 struct usbfs_ctrltransfer ctrl = {
912 .bmRequestType = LIBUSB_ENDPOINT_IN,
913 .bRequest = LIBUSB_REQUEST_GET_CONFIGURATION,
918 .data = &active_config
921 r = ioctl(fd, IOCTL_USBFS_CONTROL, &ctrl);
924 return LIBUSB_ERROR_NO_DEVICE;
926 /* we hit this error path frequently with buggy devices :( */
927 usbi_warn(DEVICE_CTX(dev),
928 "get_configuration failed ret=%d errno=%d", r, errno);
929 priv->active_config = -1;
931 if (active_config > 0) {
932 priv->active_config = active_config;
934 /* some buggy devices have a configuration 0, but we're
935 * reaching into the corner of a corner case here, so let's
936 * not support buggy devices in these circumstances.
937 * stick to the specs: a configuration value of 0 means
939 usbi_warn(DEVICE_CTX(dev),
940 "active cfg 0? assuming unconfigured device");
941 priv->active_config = -1;
945 return LIBUSB_SUCCESS;
948 static int initialize_device(struct libusb_device *dev, uint8_t busnum,
949 uint8_t devaddr, const char *sysfs_dir)
951 struct linux_device_priv *priv = _device_priv(dev);
952 struct libusb_context *ctx = DEVICE_CTX(dev);
953 int descriptors_size = 512; /* Begin with a 1024 byte alloc */
957 dev->bus_number = busnum;
958 dev->device_address = devaddr;
961 priv->sysfs_dir = strdup(sysfs_dir);
962 if (!priv->sysfs_dir)
963 return LIBUSB_ERROR_NO_MEM;
965 /* Note speed can contain 1.5, in this case __read_sysfs_attr
966 will stop parsing at the '.' and return 1 */
967 speed = __read_sysfs_attr(DEVICE_CTX(dev), sysfs_dir, "speed");
970 case 1: dev->speed = LIBUSB_SPEED_LOW; break;
971 case 12: dev->speed = LIBUSB_SPEED_FULL; break;
972 case 480: dev->speed = LIBUSB_SPEED_HIGH; break;
973 case 5000: dev->speed = LIBUSB_SPEED_SUPER; break;
975 usbi_warn(DEVICE_CTX(dev), "Unknown device speed: %d Mbps", speed);
980 /* cache descriptors in memory */
981 if (sysfs_has_descriptors)
982 fd = _open_sysfs_attr(dev, "descriptors");
984 fd = _get_usbfs_fd(dev, O_RDONLY, 0);
989 descriptors_size *= 2;
990 priv->descriptors = usbi_reallocf(priv->descriptors,
992 if (!priv->descriptors) {
994 return LIBUSB_ERROR_NO_MEM;
996 /* usbfs has holes in the file */
997 if (!sysfs_has_descriptors) {
998 memset(priv->descriptors + priv->descriptors_len,
999 0, descriptors_size - priv->descriptors_len);
1001 r = read(fd, priv->descriptors + priv->descriptors_len,
1002 descriptors_size - priv->descriptors_len);
1004 usbi_err(ctx, "read descriptor failed ret=%d errno=%d",
1007 return LIBUSB_ERROR_IO;
1009 priv->descriptors_len += r;
1010 } while (priv->descriptors_len == descriptors_size);
1014 if (priv->descriptors_len < DEVICE_DESC_LENGTH) {
1015 usbi_err(ctx, "short descriptor read (%d)",
1016 priv->descriptors_len);
1017 return LIBUSB_ERROR_IO;
1020 if (sysfs_can_relate_devices)
1021 return LIBUSB_SUCCESS;
1023 /* cache active config */
1024 fd = _get_usbfs_fd(dev, O_RDWR, 1);
1026 /* cannot send a control message to determine the active
1027 * config. just assume the first one is active. */
1028 usbi_warn(ctx, "Missing rw usbfs access; cannot determine "
1029 "active configuration descriptor");
1030 if (priv->descriptors_len >=
1031 (DEVICE_DESC_LENGTH + LIBUSB_DT_CONFIG_SIZE)) {
1032 struct libusb_config_descriptor config;
1033 usbi_parse_descriptor(
1034 priv->descriptors + DEVICE_DESC_LENGTH,
1035 "bbwbbbbb", &config, 0);
1036 priv->active_config = config.bConfigurationValue;
1038 priv->active_config = -1; /* No config dt */
1040 return LIBUSB_SUCCESS;
1043 r = usbfs_get_active_config(dev, fd);
1049 static int linux_get_parent_info(struct libusb_device *dev, const char *sysfs_dir)
1051 struct libusb_context *ctx = DEVICE_CTX(dev);
1052 struct libusb_device *it;
1053 char *parent_sysfs_dir, *tmp;
1054 int ret, add_parent = 1;
1056 /* XXX -- can we figure out the topology when using usbfs? */
1057 if (NULL == sysfs_dir || 0 == strncmp(sysfs_dir, "usb", 3)) {
1058 /* either using usbfs or finding the parent of a root hub */
1059 return LIBUSB_SUCCESS;
1062 parent_sysfs_dir = strdup(sysfs_dir);
1063 if (NULL == parent_sysfs_dir) {
1064 return LIBUSB_ERROR_NO_MEM;
1066 if (NULL != (tmp = strrchr(parent_sysfs_dir, '.')) ||
1067 NULL != (tmp = strrchr(parent_sysfs_dir, '-'))) {
1068 dev->port_number = atoi(tmp + 1);
1071 usbi_warn(ctx, "Can not parse sysfs_dir: %s, no parent info",
1073 free (parent_sysfs_dir);
1074 return LIBUSB_SUCCESS;
1077 /* is the parent a root hub? */
1078 if (NULL == strchr(parent_sysfs_dir, '-')) {
1079 tmp = parent_sysfs_dir;
1080 ret = asprintf (&parent_sysfs_dir, "usb%s", tmp);
1083 return LIBUSB_ERROR_NO_MEM;
1088 /* find the parent in the context */
1089 usbi_mutex_lock(&ctx->usb_devs_lock);
1090 list_for_each_entry(it, &ctx->usb_devs, list, struct libusb_device) {
1091 struct linux_device_priv *priv = _device_priv(it);
1092 if (priv->sysfs_dir) {
1093 if (0 == strcmp (priv->sysfs_dir, parent_sysfs_dir)) {
1094 dev->parent_dev = libusb_ref_device(it);
1099 usbi_mutex_unlock(&ctx->usb_devs_lock);
1101 if (!dev->parent_dev && add_parent) {
1102 usbi_dbg("parent_dev %s not enumerated yet, enumerating now",
1104 sysfs_scan_device(ctx, parent_sysfs_dir);
1109 usbi_dbg("Dev %p (%s) has parent %p (%s) port %d", dev, sysfs_dir,
1110 dev->parent_dev, parent_sysfs_dir, dev->port_number);
1112 free (parent_sysfs_dir);
1114 return LIBUSB_SUCCESS;
1117 int linux_enumerate_device(struct libusb_context *ctx,
1118 uint8_t busnum, uint8_t devaddr, const char *sysfs_dir)
1120 unsigned long session_id;
1121 struct libusb_device *dev;
1124 /* FIXME: session ID is not guaranteed unique as addresses can wrap and
1125 * will be reused. instead we should add a simple sysfs attribute with
1127 session_id = busnum << 8 | devaddr;
1128 usbi_dbg("busnum %d devaddr %d session_id %ld", busnum, devaddr,
1131 dev = usbi_get_device_by_session_id(ctx, session_id);
1133 /* device already exists in the context */
1134 usbi_dbg("session_id %ld already exists", session_id);
1135 libusb_unref_device(dev);
1136 return LIBUSB_SUCCESS;
1139 usbi_dbg("allocating new device for %d/%d (session %ld)",
1140 busnum, devaddr, session_id);
1141 dev = usbi_alloc_device(ctx, session_id);
1143 return LIBUSB_ERROR_NO_MEM;
1145 r = initialize_device(dev, busnum, devaddr, sysfs_dir);
1148 r = usbi_sanitize_device(dev);
1152 r = linux_get_parent_info(dev, sysfs_dir);
1157 libusb_unref_device(dev);
1159 usbi_connect_device(dev);
1164 void linux_hotplug_enumerate(uint8_t busnum, uint8_t devaddr, const char *sys_name)
1166 struct libusb_context *ctx;
1168 usbi_mutex_static_lock(&active_contexts_lock);
1169 list_for_each_entry(ctx, &active_contexts_list, list, struct libusb_context) {
1170 linux_enumerate_device(ctx, busnum, devaddr, sys_name);
1172 usbi_mutex_static_unlock(&active_contexts_lock);
1175 void linux_device_disconnected(uint8_t busnum, uint8_t devaddr)
1177 struct libusb_context *ctx;
1178 struct libusb_device *dev;
1179 unsigned long session_id = busnum << 8 | devaddr;
1181 usbi_mutex_static_lock(&active_contexts_lock);
1182 list_for_each_entry(ctx, &active_contexts_list, list, struct libusb_context) {
1183 dev = usbi_get_device_by_session_id (ctx, session_id);
1185 usbi_disconnect_device (dev);
1186 libusb_unref_device(dev);
1188 usbi_dbg("device not found for session %x", session_id);
1191 usbi_mutex_static_unlock(&active_contexts_lock);
1194 #if !defined(USE_UDEV)
1195 /* open a bus directory and adds all discovered devices to the context */
1196 static int usbfs_scan_busdir(struct libusb_context *ctx, uint8_t busnum)
1199 char dirpath[PATH_MAX];
1200 struct dirent *entry;
1201 int r = LIBUSB_ERROR_IO;
1203 snprintf(dirpath, PATH_MAX, "%s/%03d", usbfs_path, busnum);
1204 usbi_dbg("%s", dirpath);
1205 dir = opendir(dirpath);
1207 usbi_err(ctx, "opendir '%s' failed, errno=%d", dirpath, errno);
1208 /* FIXME: should handle valid race conditions like hub unplugged
1209 * during directory iteration - this is not an error */
1213 while ((entry = readdir(dir))) {
1216 if (entry->d_name[0] == '.')
1219 devaddr = atoi(entry->d_name);
1221 usbi_dbg("unknown dir entry %s", entry->d_name);
1225 if (linux_enumerate_device(ctx, busnum, (uint8_t) devaddr, NULL)) {
1226 usbi_dbg("failed to enumerate dir entry %s", entry->d_name);
1237 static int usbfs_get_device_list(struct libusb_context *ctx)
1239 struct dirent *entry;
1240 DIR *buses = opendir(usbfs_path);
1244 usbi_err(ctx, "opendir buses failed errno=%d", errno);
1245 return LIBUSB_ERROR_IO;
1248 while ((entry = readdir(buses))) {
1251 if (entry->d_name[0] == '.')
1256 if (!_is_usbdev_entry(entry, &busnum, &devaddr))
1259 r = linux_enumerate_device(ctx, busnum, (uint8_t) devaddr, NULL);
1261 usbi_dbg("failed to enumerate dir entry %s", entry->d_name);
1265 busnum = atoi(entry->d_name);
1267 usbi_dbg("unknown dir entry %s", entry->d_name);
1271 r = usbfs_scan_busdir(ctx, busnum);
1283 static int sysfs_scan_device(struct libusb_context *ctx, const char *devname)
1285 uint8_t busnum, devaddr;
1288 ret = linux_get_device_address (ctx, 0, &busnum, &devaddr, NULL, devname);
1289 if (LIBUSB_SUCCESS != ret) {
1293 return linux_enumerate_device(ctx, busnum & 0xff, devaddr & 0xff,
1297 #if !defined(USE_UDEV)
1298 static int sysfs_get_device_list(struct libusb_context *ctx)
1300 DIR *devices = opendir(SYSFS_DEVICE_PATH);
1301 struct dirent *entry;
1302 int num_devices = 0;
1303 int num_enumerated = 0;
1306 usbi_err(ctx, "opendir devices failed errno=%d", errno);
1307 return LIBUSB_ERROR_IO;
1310 while ((entry = readdir(devices))) {
1311 if ((!isdigit(entry->d_name[0]) && strncmp(entry->d_name, "usb", 3))
1312 || strchr(entry->d_name, ':'))
1317 if (sysfs_scan_device(ctx, entry->d_name)) {
1318 usbi_dbg("failed to enumerate dir entry %s", entry->d_name);
1327 /* successful if at least one device was enumerated or no devices were found */
1328 if (num_enumerated || !num_devices)
1329 return LIBUSB_SUCCESS;
1331 return LIBUSB_ERROR_IO;
1334 static int linux_default_scan_devices (struct libusb_context *ctx)
1336 /* we can retrieve device list and descriptors from sysfs or usbfs.
1337 * sysfs is preferable, because if we use usbfs we end up resuming
1338 * any autosuspended USB devices. however, sysfs is not available
1339 * everywhere, so we need a usbfs fallback too.
1341 * as described in the "sysfs vs usbfs" comment at the top of this
1342 * file, sometimes we have sysfs but not enough information to
1343 * relate sysfs devices to usbfs nodes. op_init() determines the
1344 * adequacy of sysfs and sets sysfs_can_relate_devices.
1346 if (sysfs_can_relate_devices != 0)
1347 return sysfs_get_device_list(ctx);
1349 return usbfs_get_device_list(ctx);
1353 static int op_open(struct libusb_device_handle *handle)
1355 struct linux_device_handle_priv *hpriv = _device_handle_priv(handle);
1358 hpriv->fd = _get_usbfs_fd(handle->dev, O_RDWR, 0);
1359 if (hpriv->fd < 0) {
1360 if (hpriv->fd == LIBUSB_ERROR_NO_DEVICE) {
1361 /* device will still be marked as attached if hotplug monitor thread
1362 * hasn't processed remove event yet */
1363 usbi_mutex_static_lock(&linux_hotplug_lock);
1364 if (handle->dev->attached) {
1365 usbi_dbg("open failed with no device, but device still attached");
1366 linux_device_disconnected(handle->dev->bus_number,
1367 handle->dev->device_address);
1369 usbi_mutex_static_unlock(&linux_hotplug_lock);
1374 r = ioctl(hpriv->fd, IOCTL_USBFS_GET_CAPABILITIES, &hpriv->caps);
1376 if (errno == ENOTTY)
1377 usbi_dbg("getcap not available");
1379 usbi_err(HANDLE_CTX(handle), "getcap failed (%d)", errno);
1381 if (supports_flag_zero_packet)
1382 hpriv->caps |= USBFS_CAP_ZERO_PACKET;
1383 if (supports_flag_bulk_continuation)
1384 hpriv->caps |= USBFS_CAP_BULK_CONTINUATION;
1387 r = usbi_add_pollfd(HANDLE_CTX(handle), hpriv->fd, POLLOUT);
1394 static void op_close(struct libusb_device_handle *dev_handle)
1396 struct linux_device_handle_priv *hpriv = _device_handle_priv(dev_handle);
1397 /* fd may have already been removed by POLLERR condition in op_handle_events() */
1398 if (!hpriv->fd_removed)
1399 usbi_remove_pollfd(HANDLE_CTX(dev_handle), hpriv->fd);
1403 static int op_get_configuration(struct libusb_device_handle *handle,
1408 if (sysfs_can_relate_devices) {
1409 r = sysfs_get_active_config(handle->dev, config);
1411 r = usbfs_get_active_config(handle->dev,
1412 _device_handle_priv(handle)->fd);
1413 if (r == LIBUSB_SUCCESS)
1414 *config = _device_priv(handle->dev)->active_config;
1419 if (*config == -1) {
1420 usbi_err(HANDLE_CTX(handle), "device unconfigured");
1427 static int op_set_configuration(struct libusb_device_handle *handle, int config)
1429 struct linux_device_priv *priv = _device_priv(handle->dev);
1430 int fd = _device_handle_priv(handle)->fd;
1431 int r = ioctl(fd, IOCTL_USBFS_SETCONFIG, &config);
1433 if (errno == EINVAL)
1434 return LIBUSB_ERROR_NOT_FOUND;
1435 else if (errno == EBUSY)
1436 return LIBUSB_ERROR_BUSY;
1437 else if (errno == ENODEV)
1438 return LIBUSB_ERROR_NO_DEVICE;
1440 usbi_err(HANDLE_CTX(handle), "failed, error %d errno %d", r, errno);
1441 return LIBUSB_ERROR_OTHER;
1444 /* update our cached active config descriptor */
1445 priv->active_config = config;
1447 return LIBUSB_SUCCESS;
1450 static int claim_interface(struct libusb_device_handle *handle, int iface)
1452 int fd = _device_handle_priv(handle)->fd;
1453 int r = ioctl(fd, IOCTL_USBFS_CLAIMINTF, &iface);
1455 if (errno == ENOENT)
1456 return LIBUSB_ERROR_NOT_FOUND;
1457 else if (errno == EBUSY)
1458 return LIBUSB_ERROR_BUSY;
1459 else if (errno == ENODEV)
1460 return LIBUSB_ERROR_NO_DEVICE;
1462 usbi_err(HANDLE_CTX(handle),
1463 "claim interface failed, error %d errno %d", r, errno);
1464 return LIBUSB_ERROR_OTHER;
1469 static int release_interface(struct libusb_device_handle *handle, int iface)
1471 int fd = _device_handle_priv(handle)->fd;
1472 int r = ioctl(fd, IOCTL_USBFS_RELEASEINTF, &iface);
1474 if (errno == ENODEV)
1475 return LIBUSB_ERROR_NO_DEVICE;
1477 usbi_err(HANDLE_CTX(handle),
1478 "release interface failed, error %d errno %d", r, errno);
1479 return LIBUSB_ERROR_OTHER;
1484 static int op_set_interface(struct libusb_device_handle *handle, int iface,
1487 int fd = _device_handle_priv(handle)->fd;
1488 struct usbfs_setinterface setintf;
1491 setintf.interface = iface;
1492 setintf.altsetting = altsetting;
1493 r = ioctl(fd, IOCTL_USBFS_SETINTF, &setintf);
1495 if (errno == EINVAL)
1496 return LIBUSB_ERROR_NOT_FOUND;
1497 else if (errno == ENODEV)
1498 return LIBUSB_ERROR_NO_DEVICE;
1500 usbi_err(HANDLE_CTX(handle),
1501 "setintf failed error %d errno %d", r, errno);
1502 return LIBUSB_ERROR_OTHER;
1508 static int op_clear_halt(struct libusb_device_handle *handle,
1509 unsigned char endpoint)
1511 int fd = _device_handle_priv(handle)->fd;
1512 unsigned int _endpoint = endpoint;
1513 int r = ioctl(fd, IOCTL_USBFS_CLEAR_HALT, &_endpoint);
1515 if (errno == ENOENT)
1516 return LIBUSB_ERROR_NOT_FOUND;
1517 else if (errno == ENODEV)
1518 return LIBUSB_ERROR_NO_DEVICE;
1520 usbi_err(HANDLE_CTX(handle),
1521 "clear_halt failed error %d errno %d", r, errno);
1522 return LIBUSB_ERROR_OTHER;
1528 static int op_reset_device(struct libusb_device_handle *handle)
1530 int fd = _device_handle_priv(handle)->fd;
1533 /* Doing a device reset will cause the usbfs driver to get unbound
1534 from any interfaces it is bound to. By voluntarily unbinding
1535 the usbfs driver ourself, we stop the kernel from rebinding
1536 the interface after reset (which would end up with the interface
1537 getting bound to the in kernel driver if any). */
1538 for (i = 0; i < USB_MAXINTERFACES; i++) {
1539 if (handle->claimed_interfaces & (1L << i)) {
1540 release_interface(handle, i);
1544 usbi_mutex_lock(&handle->lock);
1545 r = ioctl(fd, IOCTL_USBFS_RESET, NULL);
1547 if (errno == ENODEV) {
1548 ret = LIBUSB_ERROR_NOT_FOUND;
1552 usbi_err(HANDLE_CTX(handle),
1553 "reset failed error %d errno %d", r, errno);
1554 ret = LIBUSB_ERROR_OTHER;
1558 /* And re-claim any interfaces which were claimed before the reset */
1559 for (i = 0; i < USB_MAXINTERFACES; i++) {
1560 if (handle->claimed_interfaces & (1L << i)) {
1562 * A driver may have completed modprobing during
1563 * IOCTL_USBFS_RESET, and bound itself as soon as
1564 * IOCTL_USBFS_RESET released the device lock
1566 r = detach_kernel_driver_and_claim(handle, i);
1568 usbi_warn(HANDLE_CTX(handle),
1569 "failed to re-claim interface %d after reset: %s",
1570 i, libusb_error_name(r));
1571 handle->claimed_interfaces &= ~(1L << i);
1572 ret = LIBUSB_ERROR_NOT_FOUND;
1577 usbi_mutex_unlock(&handle->lock);
1581 static int do_streams_ioctl(struct libusb_device_handle *handle, long req,
1582 uint32_t num_streams, unsigned char *endpoints, int num_endpoints)
1584 int r, fd = _device_handle_priv(handle)->fd;
1585 struct usbfs_streams *streams;
1587 if (num_endpoints > 30) /* Max 15 in + 15 out eps */
1588 return LIBUSB_ERROR_INVALID_PARAM;
1590 streams = malloc(sizeof(struct usbfs_streams) + num_endpoints);
1592 return LIBUSB_ERROR_NO_MEM;
1594 streams->num_streams = num_streams;
1595 streams->num_eps = num_endpoints;
1596 memcpy(streams->eps, endpoints, num_endpoints);
1598 r = ioctl(fd, req, streams);
1603 if (errno == ENOTTY)
1604 return LIBUSB_ERROR_NOT_SUPPORTED;
1605 else if (errno == EINVAL)
1606 return LIBUSB_ERROR_INVALID_PARAM;
1607 else if (errno == ENODEV)
1608 return LIBUSB_ERROR_NO_DEVICE;
1610 usbi_err(HANDLE_CTX(handle),
1611 "streams-ioctl failed error %d errno %d", r, errno);
1612 return LIBUSB_ERROR_OTHER;
1617 static int op_alloc_streams(struct libusb_device_handle *handle,
1618 uint32_t num_streams, unsigned char *endpoints, int num_endpoints)
1620 return do_streams_ioctl(handle, IOCTL_USBFS_ALLOC_STREAMS,
1621 num_streams, endpoints, num_endpoints);
1624 static int op_free_streams(struct libusb_device_handle *handle,
1625 unsigned char *endpoints, int num_endpoints)
1627 return do_streams_ioctl(handle, IOCTL_USBFS_FREE_STREAMS, 0,
1628 endpoints, num_endpoints);
1631 static unsigned char *op_dev_mem_alloc(struct libusb_device_handle *handle,
1634 struct linux_device_handle_priv *hpriv = _device_handle_priv(handle);
1635 unsigned char *buffer = (unsigned char *)mmap(NULL, len,
1636 PROT_READ | PROT_WRITE, MAP_SHARED, hpriv->fd, 0);
1637 if (buffer == MAP_FAILED) {
1638 usbi_err(HANDLE_CTX(handle), "alloc dev mem failed errno %d",
1645 static int op_dev_mem_free(struct libusb_device_handle *handle,
1646 unsigned char *buffer, size_t len)
1648 if (munmap(buffer, len) != 0) {
1649 usbi_err(HANDLE_CTX(handle), "free dev mem failed errno %d",
1651 return LIBUSB_ERROR_OTHER;
1653 return LIBUSB_SUCCESS;
1657 static int op_kernel_driver_active(struct libusb_device_handle *handle,
1660 int fd = _device_handle_priv(handle)->fd;
1661 struct usbfs_getdriver getdrv;
1664 getdrv.interface = interface;
1665 r = ioctl(fd, IOCTL_USBFS_GETDRIVER, &getdrv);
1667 if (errno == ENODATA)
1669 else if (errno == ENODEV)
1670 return LIBUSB_ERROR_NO_DEVICE;
1672 usbi_err(HANDLE_CTX(handle),
1673 "get driver failed error %d errno %d", r, errno);
1674 return LIBUSB_ERROR_OTHER;
1677 return (strcmp(getdrv.driver, "usbfs") == 0) ? 0 : 1;
1680 static int op_detach_kernel_driver(struct libusb_device_handle *handle,
1683 int fd = _device_handle_priv(handle)->fd;
1684 struct usbfs_ioctl command;
1685 struct usbfs_getdriver getdrv;
1688 command.ifno = interface;
1689 command.ioctl_code = IOCTL_USBFS_DISCONNECT;
1690 command.data = NULL;
1692 getdrv.interface = interface;
1693 r = ioctl(fd, IOCTL_USBFS_GETDRIVER, &getdrv);
1694 if (r == 0 && strcmp(getdrv.driver, "usbfs") == 0)
1695 return LIBUSB_ERROR_NOT_FOUND;
1697 r = ioctl(fd, IOCTL_USBFS_IOCTL, &command);
1699 if (errno == ENODATA)
1700 return LIBUSB_ERROR_NOT_FOUND;
1701 else if (errno == EINVAL)
1702 return LIBUSB_ERROR_INVALID_PARAM;
1703 else if (errno == ENODEV)
1704 return LIBUSB_ERROR_NO_DEVICE;
1706 usbi_err(HANDLE_CTX(handle),
1707 "detach failed error %d errno %d", r, errno);
1708 return LIBUSB_ERROR_OTHER;
1714 static int op_attach_kernel_driver(struct libusb_device_handle *handle,
1717 int fd = _device_handle_priv(handle)->fd;
1718 struct usbfs_ioctl command;
1721 command.ifno = interface;
1722 command.ioctl_code = IOCTL_USBFS_CONNECT;
1723 command.data = NULL;
1725 r = ioctl(fd, IOCTL_USBFS_IOCTL, &command);
1727 if (errno == ENODATA)
1728 return LIBUSB_ERROR_NOT_FOUND;
1729 else if (errno == EINVAL)
1730 return LIBUSB_ERROR_INVALID_PARAM;
1731 else if (errno == ENODEV)
1732 return LIBUSB_ERROR_NO_DEVICE;
1733 else if (errno == EBUSY)
1734 return LIBUSB_ERROR_BUSY;
1736 usbi_err(HANDLE_CTX(handle),
1737 "attach failed error %d errno %d", r, errno);
1738 return LIBUSB_ERROR_OTHER;
1739 } else if (r == 0) {
1740 return LIBUSB_ERROR_NOT_FOUND;
1746 static int detach_kernel_driver_and_claim(struct libusb_device_handle *handle,
1749 struct usbfs_disconnect_claim dc;
1750 int r, fd = _device_handle_priv(handle)->fd;
1752 dc.interface = interface;
1753 strcpy(dc.driver, "usbfs");
1754 dc.flags = USBFS_DISCONNECT_CLAIM_EXCEPT_DRIVER;
1755 r = ioctl(fd, IOCTL_USBFS_DISCONNECT_CLAIM, &dc);
1756 if (r != 0 && errno != ENOTTY) {
1759 return LIBUSB_ERROR_BUSY;
1761 return LIBUSB_ERROR_INVALID_PARAM;
1763 return LIBUSB_ERROR_NO_DEVICE;
1765 usbi_err(HANDLE_CTX(handle),
1766 "disconnect-and-claim failed errno %d", errno);
1767 return LIBUSB_ERROR_OTHER;
1771 /* Fallback code for kernels which don't support the
1772 disconnect-and-claim ioctl */
1773 r = op_detach_kernel_driver(handle, interface);
1774 if (r != 0 && r != LIBUSB_ERROR_NOT_FOUND)
1777 return claim_interface(handle, interface);
1780 static int op_claim_interface(struct libusb_device_handle *handle, int iface)
1782 if (handle->auto_detach_kernel_driver)
1783 return detach_kernel_driver_and_claim(handle, iface);
1785 return claim_interface(handle, iface);
1788 static int op_release_interface(struct libusb_device_handle *handle, int iface)
1792 r = release_interface(handle, iface);
1796 if (handle->auto_detach_kernel_driver)
1797 op_attach_kernel_driver(handle, iface);
1802 static void op_destroy_device(struct libusb_device *dev)
1804 struct linux_device_priv *priv = _device_priv(dev);
1805 if (priv->descriptors)
1806 free(priv->descriptors);
1807 if (priv->sysfs_dir)
1808 free(priv->sysfs_dir);
1811 /* URBs are discarded in reverse order of submission to avoid races. */
1812 static int discard_urbs(struct usbi_transfer *itransfer, int first, int last_plus_one)
1814 struct libusb_transfer *transfer =
1815 USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
1816 struct linux_transfer_priv *tpriv =
1817 usbi_transfer_get_os_priv(itransfer);
1818 struct linux_device_handle_priv *dpriv =
1819 _device_handle_priv(transfer->dev_handle);
1821 struct usbfs_urb *urb;
1823 for (i = last_plus_one - 1; i >= first; i--) {
1824 if (LIBUSB_TRANSFER_TYPE_ISOCHRONOUS == transfer->type)
1825 urb = tpriv->iso_urbs[i];
1827 urb = &tpriv->urbs[i];
1829 if (0 == ioctl(dpriv->fd, IOCTL_USBFS_DISCARDURB, urb))
1832 if (EINVAL == errno) {
1833 usbi_dbg("URB not found --> assuming ready to be reaped");
1834 if (i == (last_plus_one - 1))
1835 ret = LIBUSB_ERROR_NOT_FOUND;
1836 } else if (ENODEV == errno) {
1837 usbi_dbg("Device not found for URB --> assuming ready to be reaped");
1838 ret = LIBUSB_ERROR_NO_DEVICE;
1840 usbi_warn(TRANSFER_CTX(transfer),
1841 "unrecognised discard errno %d", errno);
1842 ret = LIBUSB_ERROR_OTHER;
1848 static void free_iso_urbs(struct linux_transfer_priv *tpriv)
1851 for (i = 0; i < tpriv->num_urbs; i++) {
1852 struct usbfs_urb *urb = tpriv->iso_urbs[i];
1858 free(tpriv->iso_urbs);
1859 tpriv->iso_urbs = NULL;
1862 static int submit_bulk_transfer(struct usbi_transfer *itransfer)
1864 struct libusb_transfer *transfer =
1865 USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
1866 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
1867 struct linux_device_handle_priv *dpriv =
1868 _device_handle_priv(transfer->dev_handle);
1869 struct usbfs_urb *urbs;
1870 int is_out = (transfer->endpoint & LIBUSB_ENDPOINT_DIR_MASK)
1871 == LIBUSB_ENDPOINT_OUT;
1872 int bulk_buffer_len, use_bulk_continuation;
1876 if (is_out && (transfer->flags & LIBUSB_TRANSFER_ADD_ZERO_PACKET) &&
1877 !(dpriv->caps & USBFS_CAP_ZERO_PACKET))
1878 return LIBUSB_ERROR_NOT_SUPPORTED;
1881 * Older versions of usbfs place a 16kb limit on bulk URBs. We work
1882 * around this by splitting large transfers into 16k blocks, and then
1883 * submit all urbs at once. it would be simpler to submit one urb at
1884 * a time, but there is a big performance gain doing it this way.
1886 * Newer versions lift the 16k limit (USBFS_CAP_NO_PACKET_SIZE_LIM),
1887 * using arbritary large transfers can still be a bad idea though, as
1888 * the kernel needs to allocate physical contiguous memory for this,
1889 * which may fail for large buffers.
1891 * The kernel solves this problem by splitting the transfer into
1892 * blocks itself when the host-controller is scatter-gather capable
1893 * (USBFS_CAP_BULK_SCATTER_GATHER), which most controllers are.
1895 * Last, there is the issue of short-transfers when splitting, for
1896 * short split-transfers to work reliable USBFS_CAP_BULK_CONTINUATION
1897 * is needed, but this is not always available.
1899 if (dpriv->caps & USBFS_CAP_BULK_SCATTER_GATHER) {
1900 /* Good! Just submit everything in one go */
1901 bulk_buffer_len = transfer->length ? transfer->length : 1;
1902 use_bulk_continuation = 0;
1903 } else if (dpriv->caps & USBFS_CAP_BULK_CONTINUATION) {
1904 /* Split the transfers and use bulk-continuation to
1905 avoid issues with short-transfers */
1906 bulk_buffer_len = MAX_BULK_BUFFER_LENGTH;
1907 use_bulk_continuation = 1;
1908 } else if (dpriv->caps & USBFS_CAP_NO_PACKET_SIZE_LIM) {
1909 /* Don't split, assume the kernel can alloc the buffer
1910 (otherwise the submit will fail with -ENOMEM) */
1911 bulk_buffer_len = transfer->length ? transfer->length : 1;
1912 use_bulk_continuation = 0;
1914 /* Bad, splitting without bulk-continuation, short transfers
1915 which end before the last urb will not work reliable! */
1916 /* Note we don't warn here as this is "normal" on kernels <
1917 2.6.32 and not a problem for most applications */
1918 bulk_buffer_len = MAX_BULK_BUFFER_LENGTH;
1919 use_bulk_continuation = 0;
1922 int num_urbs = transfer->length / bulk_buffer_len;
1923 int last_urb_partial = 0;
1925 if (transfer->length == 0) {
1927 } else if ((transfer->length % bulk_buffer_len) > 0) {
1928 last_urb_partial = 1;
1931 usbi_dbg("need %d urbs for new transfer with length %d", num_urbs,
1933 urbs = calloc(num_urbs, sizeof(struct usbfs_urb));
1935 return LIBUSB_ERROR_NO_MEM;
1937 tpriv->num_urbs = num_urbs;
1938 tpriv->num_retired = 0;
1939 tpriv->reap_action = NORMAL;
1940 tpriv->reap_status = LIBUSB_TRANSFER_COMPLETED;
1942 for (i = 0; i < num_urbs; i++) {
1943 struct usbfs_urb *urb = &urbs[i];
1944 urb->usercontext = itransfer;
1945 switch (transfer->type) {
1946 case LIBUSB_TRANSFER_TYPE_BULK:
1947 urb->type = USBFS_URB_TYPE_BULK;
1950 case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
1951 urb->type = USBFS_URB_TYPE_BULK;
1952 urb->stream_id = itransfer->stream_id;
1954 case LIBUSB_TRANSFER_TYPE_INTERRUPT:
1955 urb->type = USBFS_URB_TYPE_INTERRUPT;
1958 urb->endpoint = transfer->endpoint;
1959 urb->buffer = transfer->buffer + (i * bulk_buffer_len);
1960 /* don't set the short not ok flag for the last URB */
1961 if (use_bulk_continuation && !is_out && (i < num_urbs - 1))
1962 urb->flags = USBFS_URB_SHORT_NOT_OK;
1963 if (i == num_urbs - 1 && last_urb_partial)
1964 urb->buffer_length = transfer->length % bulk_buffer_len;
1965 else if (transfer->length == 0)
1966 urb->buffer_length = 0;
1968 urb->buffer_length = bulk_buffer_len;
1970 if (i > 0 && use_bulk_continuation)
1971 urb->flags |= USBFS_URB_BULK_CONTINUATION;
1973 /* we have already checked that the flag is supported */
1974 if (is_out && i == num_urbs - 1 &&
1975 transfer->flags & LIBUSB_TRANSFER_ADD_ZERO_PACKET)
1976 urb->flags |= USBFS_URB_ZERO_PACKET;
1978 r = ioctl(dpriv->fd, IOCTL_USBFS_SUBMITURB, urb);
1980 if (errno == ENODEV) {
1981 r = LIBUSB_ERROR_NO_DEVICE;
1983 usbi_err(TRANSFER_CTX(transfer),
1984 "submiturb failed error %d errno=%d", r, errno);
1985 r = LIBUSB_ERROR_IO;
1988 /* if the first URB submission fails, we can simply free up and
1989 * return failure immediately. */
1991 usbi_dbg("first URB failed, easy peasy");
1997 /* if it's not the first URB that failed, the situation is a bit
1998 * tricky. we may need to discard all previous URBs. there are
2000 * - discarding is asynchronous - discarded urbs will be reaped
2001 * later. the user must not have freed the transfer when the
2002 * discarded URBs are reaped, otherwise libusb will be using
2004 * - the earlier URBs may have completed successfully and we do
2005 * not want to throw away any data.
2006 * - this URB failing may be no error; EREMOTEIO means that
2007 * this transfer simply didn't need all the URBs we submitted
2008 * so, we report that the transfer was submitted successfully and
2009 * in case of error we discard all previous URBs. later when
2010 * the final reap completes we can report error to the user,
2011 * or success if an earlier URB was completed successfully.
2013 tpriv->reap_action = EREMOTEIO == errno ? COMPLETED_EARLY : SUBMIT_FAILED;
2015 /* The URBs we haven't submitted yet we count as already
2017 tpriv->num_retired += num_urbs - i;
2019 /* If we completed short then don't try to discard. */
2020 if (COMPLETED_EARLY == tpriv->reap_action)
2023 discard_urbs(itransfer, 0, i);
2025 usbi_dbg("reporting successful submission but waiting for %d "
2026 "discards before reporting error", i);
2034 static int submit_iso_transfer(struct usbi_transfer *itransfer)
2036 struct libusb_transfer *transfer =
2037 USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
2038 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
2039 struct linux_device_handle_priv *dpriv =
2040 _device_handle_priv(transfer->dev_handle);
2041 struct usbfs_urb **urbs;
2042 int num_packets = transfer->num_iso_packets;
2043 int num_packets_remaining;
2046 unsigned int packet_len;
2047 unsigned int total_len = 0;
2048 unsigned char *urb_buffer = transfer->buffer;
2050 if (num_packets < 1)
2051 return LIBUSB_ERROR_INVALID_PARAM;
2053 /* usbfs places arbitrary limits on iso URBs. this limit has changed
2054 * at least three times, but we attempt to detect this limit during
2055 * init and check it here. if the kernel rejects the request due to
2056 * its size, we return an error indicating such to the user.
2058 for (i = 0; i < num_packets; i++) {
2059 packet_len = transfer->iso_packet_desc[i].length;
2061 if (packet_len > max_iso_packet_len) {
2062 usbi_warn(TRANSFER_CTX(transfer),
2063 "iso packet length of %u bytes exceeds maximum of %u bytes",
2064 packet_len, max_iso_packet_len);
2065 return LIBUSB_ERROR_INVALID_PARAM;
2068 total_len += packet_len;
2071 if (transfer->length < (int)total_len)
2072 return LIBUSB_ERROR_INVALID_PARAM;
2074 /* usbfs limits the number of iso packets per URB */
2075 num_urbs = (num_packets + (MAX_ISO_PACKETS_PER_URB - 1)) / MAX_ISO_PACKETS_PER_URB;
2077 usbi_dbg("need %d urbs for new transfer with length %d", num_urbs,
2080 urbs = calloc(num_urbs, sizeof(*urbs));
2082 return LIBUSB_ERROR_NO_MEM;
2084 tpriv->iso_urbs = urbs;
2085 tpriv->num_urbs = num_urbs;
2086 tpriv->num_retired = 0;
2087 tpriv->reap_action = NORMAL;
2088 tpriv->iso_packet_offset = 0;
2090 /* allocate + initialize each URB with the correct number of packets */
2091 num_packets_remaining = num_packets;
2092 for (i = 0, j = 0; i < num_urbs; i++) {
2093 int num_packets_in_urb = MIN(num_packets_remaining, MAX_ISO_PACKETS_PER_URB);
2094 struct usbfs_urb *urb;
2098 alloc_size = sizeof(*urb)
2099 + (num_packets_in_urb * sizeof(struct usbfs_iso_packet_desc));
2100 urb = calloc(1, alloc_size);
2102 free_iso_urbs(tpriv);
2103 return LIBUSB_ERROR_NO_MEM;
2107 /* populate packet lengths */
2108 for (k = 0; k < num_packets_in_urb; j++, k++) {
2109 packet_len = transfer->iso_packet_desc[j].length;
2110 urb->buffer_length += packet_len;
2111 urb->iso_frame_desc[k].length = packet_len;
2114 urb->usercontext = itransfer;
2115 urb->type = USBFS_URB_TYPE_ISO;
2116 /* FIXME: interface for non-ASAP data? */
2117 urb->flags = USBFS_URB_ISO_ASAP;
2118 urb->endpoint = transfer->endpoint;
2119 urb->number_of_packets = num_packets_in_urb;
2120 urb->buffer = urb_buffer;
2122 urb_buffer += urb->buffer_length;
2123 num_packets_remaining -= num_packets_in_urb;
2127 for (i = 0; i < num_urbs; i++) {
2128 int r = ioctl(dpriv->fd, IOCTL_USBFS_SUBMITURB, urbs[i]);
2130 if (errno == ENODEV) {
2131 r = LIBUSB_ERROR_NO_DEVICE;
2132 } else if (errno == EINVAL) {
2133 usbi_warn(TRANSFER_CTX(transfer),
2134 "submiturb failed, transfer too large");
2135 r = LIBUSB_ERROR_INVALID_PARAM;
2136 } else if (errno == EMSGSIZE) {
2137 usbi_warn(TRANSFER_CTX(transfer),
2138 "submiturb failed, iso packet length too large");
2139 r = LIBUSB_ERROR_INVALID_PARAM;
2141 usbi_err(TRANSFER_CTX(transfer),
2142 "submiturb failed error %d errno=%d", r, errno);
2143 r = LIBUSB_ERROR_IO;
2146 /* if the first URB submission fails, we can simply free up and
2147 * return failure immediately. */
2149 usbi_dbg("first URB failed, easy peasy");
2150 free_iso_urbs(tpriv);
2154 /* if it's not the first URB that failed, the situation is a bit
2155 * tricky. we must discard all previous URBs. there are
2157 * - discarding is asynchronous - discarded urbs will be reaped
2158 * later. the user must not have freed the transfer when the
2159 * discarded URBs are reaped, otherwise libusb will be using
2161 * - the earlier URBs may have completed successfully and we do
2162 * not want to throw away any data.
2163 * so, in this case we discard all the previous URBs BUT we report
2164 * that the transfer was submitted successfully. then later when
2165 * the final discard completes we can report error to the user.
2167 tpriv->reap_action = SUBMIT_FAILED;
2169 /* The URBs we haven't submitted yet we count as already
2171 tpriv->num_retired = num_urbs - i;
2172 discard_urbs(itransfer, 0, i);
2174 usbi_dbg("reporting successful submission but waiting for %d "
2175 "discards before reporting error", i);
2183 static int submit_control_transfer(struct usbi_transfer *itransfer)
2185 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
2186 struct libusb_transfer *transfer =
2187 USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
2188 struct linux_device_handle_priv *dpriv =
2189 _device_handle_priv(transfer->dev_handle);
2190 struct usbfs_urb *urb;
2193 if (transfer->length - LIBUSB_CONTROL_SETUP_SIZE > MAX_CTRL_BUFFER_LENGTH)
2194 return LIBUSB_ERROR_INVALID_PARAM;
2196 urb = calloc(1, sizeof(struct usbfs_urb));
2198 return LIBUSB_ERROR_NO_MEM;
2200 tpriv->num_urbs = 1;
2201 tpriv->reap_action = NORMAL;
2203 urb->usercontext = itransfer;
2204 urb->type = USBFS_URB_TYPE_CONTROL;
2205 urb->endpoint = transfer->endpoint;
2206 urb->buffer = transfer->buffer;
2207 urb->buffer_length = transfer->length;
2209 r = ioctl(dpriv->fd, IOCTL_USBFS_SUBMITURB, urb);
2213 if (errno == ENODEV)
2214 return LIBUSB_ERROR_NO_DEVICE;
2216 usbi_err(TRANSFER_CTX(transfer),
2217 "submiturb failed error %d errno=%d", r, errno);
2218 return LIBUSB_ERROR_IO;
2223 static int op_submit_transfer(struct usbi_transfer *itransfer)
2225 struct libusb_transfer *transfer =
2226 USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
2228 switch (transfer->type) {
2229 case LIBUSB_TRANSFER_TYPE_CONTROL:
2230 return submit_control_transfer(itransfer);
2231 case LIBUSB_TRANSFER_TYPE_BULK:
2232 case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
2233 return submit_bulk_transfer(itransfer);
2234 case LIBUSB_TRANSFER_TYPE_INTERRUPT:
2235 return submit_bulk_transfer(itransfer);
2236 case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
2237 return submit_iso_transfer(itransfer);
2239 usbi_err(TRANSFER_CTX(transfer),
2240 "unknown endpoint type %d", transfer->type);
2241 return LIBUSB_ERROR_INVALID_PARAM;
2245 static int op_cancel_transfer(struct usbi_transfer *itransfer)
2247 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
2248 struct libusb_transfer *transfer =
2249 USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
2253 return LIBUSB_ERROR_NOT_FOUND;
2255 r = discard_urbs(itransfer, 0, tpriv->num_urbs);
2259 switch (transfer->type) {
2260 case LIBUSB_TRANSFER_TYPE_BULK:
2261 case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
2262 if (tpriv->reap_action == ERROR)
2264 /* else, fall through */
2266 tpriv->reap_action = CANCELLED;
2272 static void op_clear_transfer_priv(struct usbi_transfer *itransfer)
2274 struct libusb_transfer *transfer =
2275 USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
2276 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
2278 switch (transfer->type) {
2279 case LIBUSB_TRANSFER_TYPE_CONTROL:
2280 case LIBUSB_TRANSFER_TYPE_BULK:
2281 case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
2282 case LIBUSB_TRANSFER_TYPE_INTERRUPT:
2288 case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
2289 if (tpriv->iso_urbs) {
2290 free_iso_urbs(tpriv);
2291 tpriv->iso_urbs = NULL;
2295 usbi_err(TRANSFER_CTX(transfer),
2296 "unknown endpoint type %d", transfer->type);
2300 static int handle_bulk_completion(struct usbi_transfer *itransfer,
2301 struct usbfs_urb *urb)
2303 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
2304 struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
2305 int urb_idx = urb - tpriv->urbs;
2307 usbi_mutex_lock(&itransfer->lock);
2308 usbi_dbg("handling completion status %d of bulk urb %d/%d", urb->status,
2309 urb_idx + 1, tpriv->num_urbs);
2311 tpriv->num_retired++;
2313 if (tpriv->reap_action != NORMAL) {
2314 /* cancelled, submit_fail, or completed early */
2315 usbi_dbg("abnormal reap: urb status %d", urb->status);
2317 /* even though we're in the process of cancelling, it's possible that
2318 * we may receive some data in these URBs that we don't want to lose.
2320 * 1. while the kernel is cancelling all the packets that make up an
2321 * URB, a few of them might complete. so we get back a successful
2322 * cancellation *and* some data.
2323 * 2. we receive a short URB which marks the early completion condition,
2324 * so we start cancelling the remaining URBs. however, we're too
2325 * slow and another URB completes (or at least completes partially).
2326 * (this can't happen since we always use BULK_CONTINUATION.)
2328 * When this happens, our objectives are not to lose any "surplus" data,
2329 * and also to stick it at the end of the previously-received data
2330 * (closing any holes), so that libusb reports the total amount of
2331 * transferred data and presents it in a contiguous chunk.
2333 if (urb->actual_length > 0) {
2334 unsigned char *target = transfer->buffer + itransfer->transferred;
2335 usbi_dbg("received %d bytes of surplus data", urb->actual_length);
2336 if (urb->buffer != target) {
2337 usbi_dbg("moving surplus data from offset %d to offset %d",
2338 (unsigned char *) urb->buffer - transfer->buffer,
2339 target - transfer->buffer);
2340 memmove(target, urb->buffer, urb->actual_length);
2342 itransfer->transferred += urb->actual_length;
2345 if (tpriv->num_retired == tpriv->num_urbs) {
2346 usbi_dbg("abnormal reap: last URB handled, reporting");
2347 if (tpriv->reap_action != COMPLETED_EARLY &&
2348 tpriv->reap_status == LIBUSB_TRANSFER_COMPLETED)
2349 tpriv->reap_status = LIBUSB_TRANSFER_ERROR;
2355 itransfer->transferred += urb->actual_length;
2357 /* Many of these errors can occur on *any* urb of a multi-urb
2358 * transfer. When they do, we tear down the rest of the transfer.
2360 switch (urb->status) {
2363 case -EREMOTEIO: /* short transfer */
2365 case -ENOENT: /* cancelled */
2370 usbi_dbg("device removed");
2371 tpriv->reap_status = LIBUSB_TRANSFER_NO_DEVICE;
2372 goto cancel_remaining;
2374 usbi_dbg("detected endpoint stall");
2375 if (tpriv->reap_status == LIBUSB_TRANSFER_COMPLETED)
2376 tpriv->reap_status = LIBUSB_TRANSFER_STALL;
2377 goto cancel_remaining;
2379 /* overflow can only ever occur in the last urb */
2380 usbi_dbg("overflow, actual_length=%d", urb->actual_length);
2381 if (tpriv->reap_status == LIBUSB_TRANSFER_COMPLETED)
2382 tpriv->reap_status = LIBUSB_TRANSFER_OVERFLOW;
2389 usbi_dbg("low level error %d", urb->status);
2390 tpriv->reap_action = ERROR;
2391 goto cancel_remaining;
2393 usbi_warn(ITRANSFER_CTX(itransfer),
2394 "unrecognised urb status %d", urb->status);
2395 tpriv->reap_action = ERROR;
2396 goto cancel_remaining;
2399 /* if we're the last urb or we got less data than requested then we're
2401 if (urb_idx == tpriv->num_urbs - 1) {
2402 usbi_dbg("last URB in transfer --> complete!");
2404 } else if (urb->actual_length < urb->buffer_length) {
2405 usbi_dbg("short transfer %d/%d --> complete!",
2406 urb->actual_length, urb->buffer_length);
2407 if (tpriv->reap_action == NORMAL)
2408 tpriv->reap_action = COMPLETED_EARLY;
2413 if (ERROR == tpriv->reap_action && LIBUSB_TRANSFER_COMPLETED == tpriv->reap_status)
2414 tpriv->reap_status = LIBUSB_TRANSFER_ERROR;
2416 if (tpriv->num_retired == tpriv->num_urbs) /* nothing to cancel */
2419 /* cancel remaining urbs and wait for their completion before
2420 * reporting results */
2421 discard_urbs(itransfer, urb_idx + 1, tpriv->num_urbs);
2424 usbi_mutex_unlock(&itransfer->lock);
2430 usbi_mutex_unlock(&itransfer->lock);
2431 return CANCELLED == tpriv->reap_action ?
2432 usbi_handle_transfer_cancellation(itransfer) :
2433 usbi_handle_transfer_completion(itransfer, tpriv->reap_status);
2436 static int handle_iso_completion(struct usbi_transfer *itransfer,
2437 struct usbfs_urb *urb)
2439 struct libusb_transfer *transfer =
2440 USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
2441 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
2442 int num_urbs = tpriv->num_urbs;
2445 enum libusb_transfer_status status = LIBUSB_TRANSFER_COMPLETED;
2447 usbi_mutex_lock(&itransfer->lock);
2448 for (i = 0; i < num_urbs; i++) {
2449 if (urb == tpriv->iso_urbs[i]) {
2455 usbi_err(TRANSFER_CTX(transfer), "could not locate urb!");
2456 usbi_mutex_unlock(&itransfer->lock);
2457 return LIBUSB_ERROR_NOT_FOUND;
2460 usbi_dbg("handling completion status %d of iso urb %d/%d", urb->status,
2463 /* copy isochronous results back in */
2465 for (i = 0; i < urb->number_of_packets; i++) {
2466 struct usbfs_iso_packet_desc *urb_desc = &urb->iso_frame_desc[i];
2467 struct libusb_iso_packet_descriptor *lib_desc =
2468 &transfer->iso_packet_desc[tpriv->iso_packet_offset++];
2469 lib_desc->status = LIBUSB_TRANSFER_COMPLETED;
2470 switch (urb_desc->status) {
2473 case -ENOENT: /* cancelled */
2478 usbi_dbg("device removed");
2479 lib_desc->status = LIBUSB_TRANSFER_NO_DEVICE;
2482 usbi_dbg("detected endpoint stall");
2483 lib_desc->status = LIBUSB_TRANSFER_STALL;
2486 usbi_dbg("overflow error");
2487 lib_desc->status = LIBUSB_TRANSFER_OVERFLOW;
2495 usbi_dbg("low-level USB error %d", urb_desc->status);
2496 lib_desc->status = LIBUSB_TRANSFER_ERROR;
2499 usbi_warn(TRANSFER_CTX(transfer),
2500 "unrecognised urb status %d", urb_desc->status);
2501 lib_desc->status = LIBUSB_TRANSFER_ERROR;
2504 lib_desc->actual_length = urb_desc->actual_length;
2507 tpriv->num_retired++;
2509 if (tpriv->reap_action != NORMAL) { /* cancelled or submit_fail */
2510 usbi_dbg("CANCEL: urb status %d", urb->status);
2512 if (tpriv->num_retired == num_urbs) {
2513 usbi_dbg("CANCEL: last URB handled, reporting");
2514 free_iso_urbs(tpriv);
2515 if (tpriv->reap_action == CANCELLED) {
2516 usbi_mutex_unlock(&itransfer->lock);
2517 return usbi_handle_transfer_cancellation(itransfer);
2519 usbi_mutex_unlock(&itransfer->lock);
2520 return usbi_handle_transfer_completion(itransfer,
2521 LIBUSB_TRANSFER_ERROR);
2527 switch (urb->status) {
2530 case -ENOENT: /* cancelled */
2534 usbi_dbg("device removed");
2535 status = LIBUSB_TRANSFER_NO_DEVICE;
2538 usbi_warn(TRANSFER_CTX(transfer),
2539 "unrecognised urb status %d", urb->status);
2540 status = LIBUSB_TRANSFER_ERROR;
2544 /* if we're the last urb then we're done */
2545 if (urb_idx == num_urbs) {
2546 usbi_dbg("last URB in transfer --> complete!");
2547 free_iso_urbs(tpriv);
2548 usbi_mutex_unlock(&itransfer->lock);
2549 return usbi_handle_transfer_completion(itransfer, status);
2553 usbi_mutex_unlock(&itransfer->lock);
2557 static int handle_control_completion(struct usbi_transfer *itransfer,
2558 struct usbfs_urb *urb)
2560 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
2563 usbi_mutex_lock(&itransfer->lock);
2564 usbi_dbg("handling completion status %d", urb->status);
2566 itransfer->transferred += urb->actual_length;
2568 if (tpriv->reap_action == CANCELLED) {
2569 if (urb->status != 0 && urb->status != -ENOENT)
2570 usbi_warn(ITRANSFER_CTX(itransfer),
2571 "cancel: unrecognised urb status %d", urb->status);
2574 usbi_mutex_unlock(&itransfer->lock);
2575 return usbi_handle_transfer_cancellation(itransfer);
2578 switch (urb->status) {
2580 status = LIBUSB_TRANSFER_COMPLETED;
2582 case -ENOENT: /* cancelled */
2583 status = LIBUSB_TRANSFER_CANCELLED;
2587 usbi_dbg("device removed");
2588 status = LIBUSB_TRANSFER_NO_DEVICE;
2591 usbi_dbg("unsupported control request");
2592 status = LIBUSB_TRANSFER_STALL;
2595 usbi_dbg("control overflow error");
2596 status = LIBUSB_TRANSFER_OVERFLOW;
2603 usbi_dbg("low-level bus error occurred");
2604 status = LIBUSB_TRANSFER_ERROR;
2607 usbi_warn(ITRANSFER_CTX(itransfer),
2608 "unrecognised urb status %d", urb->status);
2609 status = LIBUSB_TRANSFER_ERROR;
2615 usbi_mutex_unlock(&itransfer->lock);
2616 return usbi_handle_transfer_completion(itransfer, status);
2619 static int reap_for_handle(struct libusb_device_handle *handle)
2621 struct linux_device_handle_priv *hpriv = _device_handle_priv(handle);
2623 struct usbfs_urb *urb;
2624 struct usbi_transfer *itransfer;
2625 struct libusb_transfer *transfer;
2627 r = ioctl(hpriv->fd, IOCTL_USBFS_REAPURBNDELAY, &urb);
2628 if (r == -1 && errno == EAGAIN)
2631 if (errno == ENODEV)
2632 return LIBUSB_ERROR_NO_DEVICE;
2634 usbi_err(HANDLE_CTX(handle), "reap failed error %d errno=%d",
2636 return LIBUSB_ERROR_IO;
2639 itransfer = urb->usercontext;
2640 transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
2642 usbi_dbg("urb type=%d status=%d transferred=%d", urb->type, urb->status,
2643 urb->actual_length);
2645 switch (transfer->type) {
2646 case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
2647 return handle_iso_completion(itransfer, urb);
2648 case LIBUSB_TRANSFER_TYPE_BULK:
2649 case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
2650 case LIBUSB_TRANSFER_TYPE_INTERRUPT:
2651 return handle_bulk_completion(itransfer, urb);
2652 case LIBUSB_TRANSFER_TYPE_CONTROL:
2653 return handle_control_completion(itransfer, urb);
2655 usbi_err(HANDLE_CTX(handle), "unrecognised endpoint type %x",
2657 return LIBUSB_ERROR_OTHER;
2661 static int op_handle_events(struct libusb_context *ctx,
2662 struct pollfd *fds, POLL_NFDS_TYPE nfds, int num_ready)
2667 usbi_mutex_lock(&ctx->open_devs_lock);
2668 for (i = 0; i < nfds && num_ready > 0; i++) {
2669 struct pollfd *pollfd = &fds[i];
2670 struct libusb_device_handle *handle;
2671 struct linux_device_handle_priv *hpriv = NULL;
2673 if (!pollfd->revents)
2677 list_for_each_entry(handle, &ctx->open_devs, list, struct libusb_device_handle) {
2678 hpriv = _device_handle_priv(handle);
2679 if (hpriv->fd == pollfd->fd)
2683 if (!hpriv || hpriv->fd != pollfd->fd) {
2684 usbi_err(ctx, "cannot find handle for fd %d",
2689 if (pollfd->revents & POLLERR) {
2690 /* remove the fd from the pollfd set so that it doesn't continuously
2691 * trigger an event, and flag that it has been removed so op_close()
2692 * doesn't try to remove it a second time */
2693 usbi_remove_pollfd(HANDLE_CTX(handle), hpriv->fd);
2694 hpriv->fd_removed = 1;
2696 /* device will still be marked as attached if hotplug monitor thread
2697 * hasn't processed remove event yet */
2698 usbi_mutex_static_lock(&linux_hotplug_lock);
2699 if (handle->dev->attached)
2700 linux_device_disconnected(handle->dev->bus_number,
2701 handle->dev->device_address);
2702 usbi_mutex_static_unlock(&linux_hotplug_lock);
2704 if (hpriv->caps & USBFS_CAP_REAP_AFTER_DISCONNECT) {
2706 r = reap_for_handle(handle);
2710 usbi_handle_disconnect(handle);
2715 r = reap_for_handle(handle);
2717 if (r == 1 || r == LIBUSB_ERROR_NO_DEVICE)
2725 usbi_mutex_unlock(&ctx->open_devs_lock);
2729 static int op_clock_gettime(int clk_id, struct timespec *tp)
2732 case USBI_CLOCK_MONOTONIC:
2733 return clock_gettime(monotonic_clkid, tp);
2734 case USBI_CLOCK_REALTIME:
2735 return clock_gettime(CLOCK_REALTIME, tp);
2737 return LIBUSB_ERROR_INVALID_PARAM;
2741 #ifdef USBI_TIMERFD_AVAILABLE
2742 static clockid_t op_get_timerfd_clockid(void)
2744 return monotonic_clkid;
2749 const struct usbi_os_backend usbi_backend = {
2750 .name = "Linux usbfs",
2751 .caps = USBI_CAP_HAS_HID_ACCESS|USBI_CAP_SUPPORTS_DETACH_KERNEL_DRIVER,
2754 .get_device_list = NULL,
2755 .hotplug_poll = op_hotplug_poll,
2756 .get_device_descriptor = op_get_device_descriptor,
2757 .get_active_config_descriptor = op_get_active_config_descriptor,
2758 .get_config_descriptor = op_get_config_descriptor,
2759 .get_config_descriptor_by_value = op_get_config_descriptor_by_value,
2763 .get_configuration = op_get_configuration,
2764 .set_configuration = op_set_configuration,
2765 .claim_interface = op_claim_interface,
2766 .release_interface = op_release_interface,
2768 .set_interface_altsetting = op_set_interface,
2769 .clear_halt = op_clear_halt,
2770 .reset_device = op_reset_device,
2772 .alloc_streams = op_alloc_streams,
2773 .free_streams = op_free_streams,
2775 .dev_mem_alloc = op_dev_mem_alloc,
2776 .dev_mem_free = op_dev_mem_free,
2778 .kernel_driver_active = op_kernel_driver_active,
2779 .detach_kernel_driver = op_detach_kernel_driver,
2780 .attach_kernel_driver = op_attach_kernel_driver,
2782 .destroy_device = op_destroy_device,
2784 .submit_transfer = op_submit_transfer,
2785 .cancel_transfer = op_cancel_transfer,
2786 .clear_transfer_priv = op_clear_transfer_priv,
2788 .handle_events = op_handle_events,
2790 .clock_gettime = op_clock_gettime,
2792 #ifdef USBI_TIMERFD_AVAILABLE
2793 .get_timerfd_clockid = op_get_timerfd_clockid,
2796 .device_priv_size = sizeof(struct linux_device_priv),
2797 .device_handle_priv_size = sizeof(struct linux_device_handle_priv),
2798 .transfer_priv_size = sizeof(struct linux_transfer_priv),