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 */
166 struct linux_device_handle_priv {
174 /* submission failed after the first URB, so await cancellation/completion
175 * of all the others */
178 /* cancelled by user or timeout */
181 /* completed multi-URB transfer in non-final URB */
184 /* one or more urbs encountered a low-level error */
188 struct linux_transfer_priv {
190 struct usbfs_urb *urbs;
191 struct usbfs_urb **iso_urbs;
194 enum reap_action reap_action;
197 enum libusb_transfer_status reap_status;
199 /* next iso packet in user-supplied transfer to be populated */
200 int iso_packet_offset;
203 static int _open(const char *path, int flags)
205 #if defined(O_CLOEXEC)
206 if (supports_flag_cloexec)
207 return open(path, flags | O_CLOEXEC);
210 return open(path, flags);
213 static int _get_usbfs_fd(struct libusb_device *dev, mode_t mode, int silent)
215 struct libusb_context *ctx = DEVICE_CTX(dev);
221 snprintf(path, PATH_MAX, "%s/usbdev%d.%d",
222 usbfs_path, dev->bus_number, dev->device_address);
224 snprintf(path, PATH_MAX, "%s/%03d/%03d",
225 usbfs_path, dev->bus_number, dev->device_address);
227 fd = _open(path, mode);
229 return fd; /* Success */
231 if (errno == ENOENT) {
233 usbi_err(ctx, "File doesn't exist, wait %d ms and try again", delay/1000);
235 /* Wait 10ms for USB device path creation.*/
236 nanosleep(&(struct timespec){delay / 1000000, (delay * 1000) % 1000000000UL}, NULL);
238 fd = _open(path, mode);
240 return fd; /* Success */
244 usbi_err(ctx, "libusb couldn't open USB device %s: %s",
245 path, strerror(errno));
246 if (errno == EACCES && mode == O_RDWR)
247 usbi_err(ctx, "libusb requires write access to USB "
252 return LIBUSB_ERROR_ACCESS;
254 return LIBUSB_ERROR_NO_DEVICE;
255 return LIBUSB_ERROR_IO;
258 static struct linux_device_priv *_device_priv(struct libusb_device *dev)
260 return (struct linux_device_priv *) dev->os_priv;
263 static struct linux_device_handle_priv *_device_handle_priv(
264 struct libusb_device_handle *handle)
266 return (struct linux_device_handle_priv *) handle->os_priv;
269 /* check dirent for a /dev/usbdev%d.%d name
270 * optionally return bus/device on success */
271 static int _is_usbdev_entry(struct dirent *entry, int *bus_p, int *dev_p)
275 if (sscanf(entry->d_name, "usbdev%d.%d", &busnum, &devnum) != 2)
278 usbi_dbg("found: %s", entry->d_name);
286 static int check_usb_vfs(const char *dirname)
289 struct dirent *entry;
292 dir = opendir(dirname);
296 while ((entry = readdir(dir)) != NULL) {
297 if (entry->d_name[0] == '.')
300 /* We assume if we find any files that it must be the right place */
309 static const char *find_usbfs_path(void)
311 const char *path = "/dev/bus/usb";
312 const char *ret = NULL;
314 if (check_usb_vfs(path)) {
317 path = "/proc/bus/usb";
318 if (check_usb_vfs(path))
322 /* look for /dev/usbdev*.* if the normal places fail */
324 struct dirent *entry;
330 while ((entry = readdir(dir)) != NULL) {
331 if (_is_usbdev_entry(entry, NULL, NULL)) {
332 /* found one; that's enough */
342 /* On udev based systems without any usb-devices /dev/bus/usb will not
343 * exist. So if we've not found anything and we're using udev for hotplug
344 * simply assume /dev/bus/usb rather then making libusb_init fail. */
345 #if defined(USE_UDEV)
347 ret = "/dev/bus/usb";
351 usbi_dbg("found usbfs at %s", ret);
356 /* the monotonic clock is not usable on all systems (e.g. embedded ones often
357 * seem to lack it). fall back to REALTIME if we have to. */
358 static clockid_t find_monotonic_clock(void)
360 #ifdef CLOCK_MONOTONIC
364 /* Linux 2.6.28 adds CLOCK_MONOTONIC_RAW but we don't use it
365 * because it's not available through timerfd */
366 r = clock_gettime(CLOCK_MONOTONIC, &ts);
368 return CLOCK_MONOTONIC;
369 usbi_dbg("monotonic clock doesn't work, errno %d", errno);
372 return CLOCK_REALTIME;
375 static int get_kernel_version(struct libusb_context *ctx,
376 struct kernel_version *ver)
381 if (uname(&uts) < 0) {
382 usbi_err(ctx, "uname failed, errno %d", errno);
386 atoms = sscanf(uts.release, "%d.%d.%d", &ver->major, &ver->minor, &ver->sublevel);
388 usbi_err(ctx, "failed to parse uname release '%s'", uts.release);
397 usbi_dbg("reported kernel version is %s", uts.release);
402 static int kernel_version_ge(const struct kernel_version *ver,
403 int major, int minor, int sublevel)
405 if (ver->major > major)
407 else if (ver->major < major)
410 /* kmajor == major */
411 if (ver->minor == -1 && ver->sublevel == -1)
412 return 0 == minor && 0 == sublevel;
413 else if (ver->minor > minor)
415 else if (ver->minor < minor)
418 /* kminor == minor */
419 if (ver->sublevel == -1)
420 return 0 == sublevel;
422 return ver->sublevel >= sublevel;
425 static int op_init(struct libusb_context *ctx)
427 struct kernel_version kversion;
431 usbfs_path = find_usbfs_path();
433 usbi_err(ctx, "could not find usbfs");
434 return LIBUSB_ERROR_OTHER;
437 if (monotonic_clkid == -1)
438 monotonic_clkid = find_monotonic_clock();
440 if (get_kernel_version(ctx, &kversion) < 0)
441 return LIBUSB_ERROR_OTHER;
443 if (supports_flag_cloexec == -1) {
444 /* O_CLOEXEC flag available from Linux 2.6.23 */
445 supports_flag_cloexec = kernel_version_ge(&kversion,2,6,23);
448 if (supports_flag_bulk_continuation == -1) {
449 /* bulk continuation URB flag available from Linux 2.6.32 */
450 supports_flag_bulk_continuation = kernel_version_ge(&kversion,2,6,32);
453 if (supports_flag_bulk_continuation)
454 usbi_dbg("bulk continuation flag supported");
456 if (-1 == supports_flag_zero_packet) {
457 /* zero length packet URB flag fixed since Linux 2.6.31 */
458 supports_flag_zero_packet = kernel_version_ge(&kversion,2,6,31);
461 if (supports_flag_zero_packet)
462 usbi_dbg("zero length packet flag supported");
464 if (!max_iso_packet_len) {
465 if (kernel_version_ge(&kversion,3,10,0))
466 max_iso_packet_len = 49152;
467 else if (kernel_version_ge(&kversion,2,6,18))
468 max_iso_packet_len = 8192;
470 max_iso_packet_len = 1023;
473 usbi_dbg("max iso packet length is (likely) %u bytes", max_iso_packet_len);
475 if (-1 == sysfs_has_descriptors) {
476 /* sysfs descriptors has all descriptors since Linux 2.6.26 */
477 sysfs_has_descriptors = kernel_version_ge(&kversion,2,6,26);
480 if (-1 == sysfs_can_relate_devices) {
481 /* sysfs has busnum since Linux 2.6.22 */
482 sysfs_can_relate_devices = kernel_version_ge(&kversion,2,6,22);
485 if (sysfs_can_relate_devices || sysfs_has_descriptors) {
486 r = stat(SYSFS_DEVICE_PATH, &statbuf);
487 if (r != 0 || !S_ISDIR(statbuf.st_mode)) {
488 usbi_warn(ctx, "sysfs not mounted");
489 sysfs_can_relate_devices = 0;
490 sysfs_has_descriptors = 0;
494 if (sysfs_can_relate_devices)
495 usbi_dbg("sysfs can relate devices");
497 if (sysfs_has_descriptors)
498 usbi_dbg("sysfs has complete descriptors");
500 usbi_mutex_static_lock(&linux_hotplug_startstop_lock);
502 if (init_count == 0) {
503 /* start up hotplug event handler */
504 r = linux_start_event_monitor();
506 if (r == LIBUSB_SUCCESS) {
507 r = linux_scan_devices(ctx);
508 if (r == LIBUSB_SUCCESS)
510 else if (init_count == 0)
511 linux_stop_event_monitor();
513 usbi_err(ctx, "error starting hotplug event monitor");
514 usbi_mutex_static_unlock(&linux_hotplug_startstop_lock);
519 static void op_exit(struct libusb_context *ctx)
522 usbi_mutex_static_lock(&linux_hotplug_startstop_lock);
523 assert(init_count != 0);
525 /* tear down event handler */
526 (void)linux_stop_event_monitor();
528 usbi_mutex_static_unlock(&linux_hotplug_startstop_lock);
531 static int linux_start_event_monitor(void)
533 #if defined(USE_UDEV)
534 return linux_udev_start_event_monitor();
536 return linux_netlink_start_event_monitor();
540 static int linux_stop_event_monitor(void)
542 #if defined(USE_UDEV)
543 return linux_udev_stop_event_monitor();
545 return linux_netlink_stop_event_monitor();
549 static int linux_scan_devices(struct libusb_context *ctx)
553 usbi_mutex_static_lock(&linux_hotplug_lock);
555 #if defined(USE_UDEV)
556 ret = linux_udev_scan_devices(ctx);
558 ret = linux_default_scan_devices(ctx);
561 usbi_mutex_static_unlock(&linux_hotplug_lock);
566 static void op_hotplug_poll(void)
568 #if defined(USE_UDEV)
569 linux_udev_hotplug_poll();
571 linux_netlink_hotplug_poll();
575 static int _open_sysfs_attr(struct libusb_device *dev, const char *attr)
577 struct linux_device_priv *priv = _device_priv(dev);
578 char filename[PATH_MAX];
581 snprintf(filename, PATH_MAX, "%s/%s/%s",
582 SYSFS_DEVICE_PATH, priv->sysfs_dir, attr);
583 fd = _open(filename, O_RDONLY);
585 usbi_err(DEVICE_CTX(dev),
586 "open %s failed ret=%d errno=%d", filename, fd, errno);
587 return LIBUSB_ERROR_IO;
593 /* Note only suitable for attributes which always read >= 0, < 0 is error */
594 static int __read_sysfs_attr(struct libusb_context *ctx,
595 const char *devname, const char *attr)
597 char filename[PATH_MAX];
601 snprintf(filename, PATH_MAX, "%s/%s/%s", SYSFS_DEVICE_PATH,
603 fd = _open(filename, O_RDONLY);
605 if (errno == ENOENT) {
606 /* File doesn't exist. Assume the device has been
607 disconnected (see trac ticket #70). */
608 return LIBUSB_ERROR_NO_DEVICE;
610 usbi_err(ctx, "open %s failed errno=%d", filename, errno);
611 return LIBUSB_ERROR_IO;
616 usbi_err(ctx, "fdopen %s failed errno=%d", filename, errno);
618 return LIBUSB_ERROR_OTHER;
621 r = fscanf(f, "%d", &value);
624 usbi_err(ctx, "fscanf %s returned %d, errno=%d", attr, r, errno);
625 return LIBUSB_ERROR_NO_DEVICE; /* For unplug race (trac #70) */
628 usbi_err(ctx, "%s contains a negative value", filename);
629 return LIBUSB_ERROR_IO;
635 static int op_get_device_descriptor(struct libusb_device *dev,
636 unsigned char *buffer, int *host_endian)
638 struct linux_device_priv *priv = _device_priv(dev);
640 *host_endian = sysfs_has_descriptors ? 0 : 1;
641 memcpy(buffer, priv->descriptors, DEVICE_DESC_LENGTH);
646 /* read the bConfigurationValue for a device */
647 static int sysfs_get_active_config(struct libusb_device *dev, int *config)
650 char tmp[5] = {0, 0, 0, 0, 0};
655 fd = _open_sysfs_attr(dev, "bConfigurationValue");
659 r = read(fd, tmp, sizeof(tmp));
662 usbi_err(DEVICE_CTX(dev),
663 "read bConfigurationValue failed ret=%d errno=%d", r, errno);
664 return LIBUSB_ERROR_IO;
666 usbi_dbg("device unconfigured");
671 if (tmp[sizeof(tmp) - 1] != 0) {
672 usbi_err(DEVICE_CTX(dev), "not null-terminated?");
673 return LIBUSB_ERROR_IO;
674 } else if (tmp[0] == 0) {
675 usbi_err(DEVICE_CTX(dev), "no configuration value?");
676 return LIBUSB_ERROR_IO;
679 num = strtol(tmp, &endptr, 10);
681 usbi_err(DEVICE_CTX(dev), "error converting '%s' to integer", tmp);
682 return LIBUSB_ERROR_IO;
689 int linux_get_device_address (struct libusb_context *ctx, int detached,
690 uint8_t *busnum, uint8_t *devaddr,const char *dev_node,
691 const char *sys_name)
695 usbi_dbg("getting address for device: %s detached: %d", sys_name, detached);
696 /* can't use sysfs to read the bus and device number if the
697 * device has been detached */
698 if (!sysfs_can_relate_devices || detached || NULL == sys_name) {
699 if (NULL == dev_node) {
700 return LIBUSB_ERROR_OTHER;
703 /* will this work with all supported kernel versions? */
704 if (!strncmp(dev_node, "/dev/bus/usb", 12)) {
705 sscanf (dev_node, "/dev/bus/usb/%hhu/%hhu", busnum, devaddr);
706 } else if (!strncmp(dev_node, "/proc/bus/usb", 13)) {
707 sscanf (dev_node, "/proc/bus/usb/%hhu/%hhu", busnum, devaddr);
710 return LIBUSB_SUCCESS;
713 usbi_dbg("scan %s", sys_name);
715 sysfs_attr = __read_sysfs_attr(ctx, sys_name, "busnum");
718 if (sysfs_attr > 255)
719 return LIBUSB_ERROR_INVALID_PARAM;
720 *busnum = (uint8_t) sysfs_attr;
722 sysfs_attr = __read_sysfs_attr(ctx, sys_name, "devnum");
725 if (sysfs_attr > 255)
726 return LIBUSB_ERROR_INVALID_PARAM;
728 *devaddr = (uint8_t) sysfs_attr;
730 usbi_dbg("bus=%d dev=%d", *busnum, *devaddr);
732 return LIBUSB_SUCCESS;
735 /* Return offset of the next descriptor with the given type */
736 static int seek_to_next_descriptor(struct libusb_context *ctx,
737 uint8_t descriptor_type, unsigned char *buffer, int size)
739 struct usb_descriptor_header header;
742 for (i = 0; size >= 0; i += header.bLength, size -= header.bLength) {
744 return LIBUSB_ERROR_NOT_FOUND;
747 usbi_err(ctx, "short descriptor read %d/2", size);
748 return LIBUSB_ERROR_IO;
750 usbi_parse_descriptor(buffer + i, "bb", &header, 0);
752 if (i && header.bDescriptorType == descriptor_type)
755 usbi_err(ctx, "bLength overflow by %d bytes", -size);
756 return LIBUSB_ERROR_IO;
759 /* Return offset to next config */
760 static int seek_to_next_config(struct libusb_context *ctx,
761 unsigned char *buffer, int size)
763 struct libusb_config_descriptor config;
766 return LIBUSB_ERROR_NOT_FOUND;
768 if (size < LIBUSB_DT_CONFIG_SIZE) {
769 usbi_err(ctx, "short descriptor read %d/%d",
770 size, LIBUSB_DT_CONFIG_SIZE);
771 return LIBUSB_ERROR_IO;
774 usbi_parse_descriptor(buffer, "bbwbbbbb", &config, 0);
775 if (config.bDescriptorType != LIBUSB_DT_CONFIG) {
776 usbi_err(ctx, "descriptor is not a config desc (type 0x%02x)",
777 config.bDescriptorType);
778 return LIBUSB_ERROR_IO;
782 * In usbfs the config descriptors are config.wTotalLength bytes apart,
783 * with any short reads from the device appearing as holes in the file.
785 * In sysfs wTotalLength is ignored, instead the kernel returns a
786 * config descriptor with verified bLength fields, with descriptors
787 * with an invalid bLength removed.
789 if (sysfs_has_descriptors) {
790 int next = seek_to_next_descriptor(ctx, LIBUSB_DT_CONFIG,
792 if (next == LIBUSB_ERROR_NOT_FOUND)
797 if (next != config.wTotalLength)
798 usbi_warn(ctx, "config length mismatch wTotalLength "
799 "%d real %d", config.wTotalLength, next);
802 if (config.wTotalLength < LIBUSB_DT_CONFIG_SIZE) {
803 usbi_err(ctx, "invalid wTotalLength %d",
804 config.wTotalLength);
805 return LIBUSB_ERROR_IO;
806 } else if (config.wTotalLength > size) {
807 usbi_warn(ctx, "short descriptor read %d/%d",
808 size, config.wTotalLength);
811 return config.wTotalLength;
815 static int op_get_config_descriptor_by_value(struct libusb_device *dev,
816 uint8_t value, unsigned char **buffer, int *host_endian)
818 struct libusb_context *ctx = DEVICE_CTX(dev);
819 struct linux_device_priv *priv = _device_priv(dev);
820 unsigned char *descriptors = priv->descriptors;
821 int size = priv->descriptors_len;
822 struct libusb_config_descriptor *config;
825 /* Unlike the device desc. config descs. are always in raw format */
828 /* Skip device header */
829 descriptors += DEVICE_DESC_LENGTH;
830 size -= DEVICE_DESC_LENGTH;
832 /* Seek till the config is found, or till "EOF" */
834 int next = seek_to_next_config(ctx, descriptors, size);
837 config = (struct libusb_config_descriptor *)descriptors;
838 if (config->bConfigurationValue == value) {
839 *buffer = descriptors;
847 static int op_get_active_config_descriptor(struct libusb_device *dev,
848 unsigned char *buffer, size_t len, int *host_endian)
851 unsigned char *config_desc;
853 if (sysfs_can_relate_devices) {
854 r = sysfs_get_active_config(dev, &config);
858 /* Use cached bConfigurationValue */
859 struct linux_device_priv *priv = _device_priv(dev);
860 config = priv->active_config;
863 return LIBUSB_ERROR_NOT_FOUND;
865 r = op_get_config_descriptor_by_value(dev, config, &config_desc,
870 len = MIN(len, (size_t)r);
871 memcpy(buffer, config_desc, len);
875 static int op_get_config_descriptor(struct libusb_device *dev,
876 uint8_t config_index, unsigned char *buffer, size_t len, int *host_endian)
878 struct linux_device_priv *priv = _device_priv(dev);
879 unsigned char *descriptors = priv->descriptors;
880 int i, r, size = priv->descriptors_len;
882 /* Unlike the device desc. config descs. are always in raw format */
885 /* Skip device header */
886 descriptors += DEVICE_DESC_LENGTH;
887 size -= DEVICE_DESC_LENGTH;
889 /* Seek till the config is found, or till "EOF" */
891 r = seek_to_next_config(DEVICE_CTX(dev), descriptors, size);
894 if (i == config_index)
900 len = MIN(len, (size_t)r);
901 memcpy(buffer, descriptors, len);
905 /* send a control message to retrieve active configuration */
906 static int usbfs_get_active_config(struct libusb_device *dev, int fd)
908 struct linux_device_priv *priv = _device_priv(dev);
909 unsigned char active_config = 0;
912 struct usbfs_ctrltransfer ctrl = {
913 .bmRequestType = LIBUSB_ENDPOINT_IN,
914 .bRequest = LIBUSB_REQUEST_GET_CONFIGURATION,
919 .data = &active_config
922 r = ioctl(fd, IOCTL_USBFS_CONTROL, &ctrl);
925 return LIBUSB_ERROR_NO_DEVICE;
927 /* we hit this error path frequently with buggy devices :( */
928 usbi_warn(DEVICE_CTX(dev),
929 "get_configuration failed ret=%d errno=%d", r, errno);
930 //priv->active_config = -1;
931 return LIBUSB_ERROR_IO;
934 // if (active_config > 0) {
935 // priv->active_config = active_config;
937 // /* some buggy devices have a configuration 0, but we're
938 // * reaching into the corner of a corner case here, so let's
939 // * not support buggy devices in these circumstances.
940 // * stick to the specs: a configuration value of 0 means
941 // * unconfigured. */
942 // usbi_warn(DEVICE_CTX(dev),
943 // "active cfg 0? assuming unconfigured device");
944 // priv->active_config = -1;
948 return active_config;
949 // return LIBUSB_SUCCESS;
952 static int initialize_device(struct libusb_device *dev, uint8_t busnum,
953 uint8_t devaddr, const char *sysfs_dir)
955 struct linux_device_priv *priv = _device_priv(dev);
956 struct libusb_context *ctx = DEVICE_CTX(dev);
957 int descriptors_size = 512; /* Begin with a 1024 byte alloc */
961 dev->bus_number = busnum;
962 dev->device_address = devaddr;
965 priv->sysfs_dir = strdup(sysfs_dir);
966 if (!priv->sysfs_dir)
967 return LIBUSB_ERROR_NO_MEM;
969 /* Note speed can contain 1.5, in this case __read_sysfs_attr
970 will stop parsing at the '.' and return 1 */
971 speed = __read_sysfs_attr(DEVICE_CTX(dev), sysfs_dir, "speed");
974 case 1: dev->speed = LIBUSB_SPEED_LOW; break;
975 case 12: dev->speed = LIBUSB_SPEED_FULL; break;
976 case 480: dev->speed = LIBUSB_SPEED_HIGH; break;
977 case 5000: dev->speed = LIBUSB_SPEED_SUPER; break;
978 case 10000: dev->speed = LIBUSB_SPEED_SUPER_PLUS; break;
980 usbi_warn(DEVICE_CTX(dev), "Unknown device speed: %d Mbps", speed);
985 /* cache descriptors in memory */
986 if (sysfs_has_descriptors)
987 fd = _open_sysfs_attr(dev, "descriptors");
989 fd = _get_usbfs_fd(dev, O_RDONLY, 0);
994 descriptors_size *= 2;
995 priv->descriptors = usbi_reallocf(priv->descriptors,
997 if (!priv->descriptors) {
999 return LIBUSB_ERROR_NO_MEM;
1001 /* usbfs has holes in the file */
1002 if (!sysfs_has_descriptors) {
1003 memset(priv->descriptors + priv->descriptors_len,
1004 0, descriptors_size - priv->descriptors_len);
1006 r = read(fd, priv->descriptors + priv->descriptors_len,
1007 descriptors_size - priv->descriptors_len);
1009 usbi_err(ctx, "read descriptor failed ret=%d errno=%d",
1012 return LIBUSB_ERROR_IO;
1014 priv->descriptors_len += r;
1015 } while (priv->descriptors_len == descriptors_size);
1019 if (priv->descriptors_len < DEVICE_DESC_LENGTH) {
1020 usbi_err(ctx, "short descriptor read (%d)",
1021 priv->descriptors_len);
1022 return LIBUSB_ERROR_IO;
1025 if (sysfs_can_relate_devices)
1026 return LIBUSB_SUCCESS;
1028 /* cache active config */
1029 fd = _get_usbfs_fd(dev, O_RDWR, 1);
1031 /* cannot send a control message to determine the active
1032 * config. just assume the first one is active. */
1033 usbi_warn(ctx, "Missing rw usbfs access; cannot determine "
1034 "active configuration descriptor");
1035 if (priv->descriptors_len >=
1036 (DEVICE_DESC_LENGTH + LIBUSB_DT_CONFIG_SIZE)) {
1037 struct libusb_config_descriptor config;
1038 usbi_parse_descriptor(
1039 priv->descriptors + DEVICE_DESC_LENGTH,
1040 "bbwbbbbb", &config, 0);
1041 priv->active_config = config.bConfigurationValue;
1043 priv->active_config = -1; /* No config dt */
1045 return LIBUSB_SUCCESS;
1048 r = usbfs_get_active_config(dev, fd);
1054 static int linux_get_parent_info(struct libusb_device *dev, const char *sysfs_dir)
1056 struct libusb_context *ctx = DEVICE_CTX(dev);
1057 struct libusb_device *it;
1058 char *parent_sysfs_dir, *tmp;
1059 int ret, add_parent = 1;
1061 /* XXX -- can we figure out the topology when using usbfs? */
1062 if (NULL == sysfs_dir || 0 == strncmp(sysfs_dir, "usb", 3)) {
1063 /* either using usbfs or finding the parent of a root hub */
1064 return LIBUSB_SUCCESS;
1067 parent_sysfs_dir = strdup(sysfs_dir);
1068 if (NULL == parent_sysfs_dir) {
1069 return LIBUSB_ERROR_NO_MEM;
1071 if (NULL != (tmp = strrchr(parent_sysfs_dir, '.')) ||
1072 NULL != (tmp = strrchr(parent_sysfs_dir, '-'))) {
1073 dev->port_number = atoi(tmp + 1);
1076 usbi_warn(ctx, "Can not parse sysfs_dir: %s, no parent info",
1078 free (parent_sysfs_dir);
1079 return LIBUSB_SUCCESS;
1082 /* is the parent a root hub? */
1083 if (NULL == strchr(parent_sysfs_dir, '-')) {
1084 tmp = parent_sysfs_dir;
1085 ret = asprintf (&parent_sysfs_dir, "usb%s", tmp);
1088 return LIBUSB_ERROR_NO_MEM;
1093 /* find the parent in the context */
1094 usbi_mutex_lock(&ctx->usb_devs_lock);
1095 list_for_each_entry(it, &ctx->usb_devs, list, struct libusb_device) {
1096 struct linux_device_priv *priv = _device_priv(it);
1097 if (priv->sysfs_dir) {
1098 if (0 == strcmp (priv->sysfs_dir, parent_sysfs_dir)) {
1099 dev->parent_dev = libusb_ref_device(it);
1104 usbi_mutex_unlock(&ctx->usb_devs_lock);
1106 if (!dev->parent_dev && add_parent) {
1107 usbi_dbg("parent_dev %s not enumerated yet, enumerating now",
1109 sysfs_scan_device(ctx, parent_sysfs_dir);
1114 usbi_dbg("Dev %p (%s) has parent %p (%s) port %d", dev, sysfs_dir,
1115 dev->parent_dev, parent_sysfs_dir, dev->port_number);
1117 free (parent_sysfs_dir);
1119 return LIBUSB_SUCCESS;
1122 static int linux_initialize_device(struct libusb_device *dev,
1123 uint8_t busnum, uint8_t devaddr, int fd) {
1125 usbi_dbg("linux_initialize_device");
1127 struct linux_device_priv *priv = _device_priv(dev);
1128 struct libusb_context *ctx = DEVICE_CTX(dev);
1129 uint8_t desc[4096]; // max descriptor size is 4096 bytes
1133 dev->bus_number = busnum;
1134 dev->device_address = devaddr;
1136 usbi_dbg("cache descriptors in memory");
1138 priv->descriptors_len = 0;
1140 memset(desc, 0, sizeof(desc));
1141 if (!lseek(fd, 0, SEEK_SET)) {
1142 // ディスクリプタを読み込んでローカルキャッシュする
1143 int length = read(fd, desc, sizeof(desc));
1144 usbi_dbg("Device::init read returned %d errno %d\n", length, errno);
1147 priv->descriptors = usbi_reallocf(priv->descriptors, length);
1148 if (!priv->descriptors) {
1149 return (int)LIBUSB_ERROR_NO_MEM;
1150 //RETURN(LIBUSB_ERROR_NO_MEM, int);
1152 priv->descriptors_len = length;
1153 memcpy(priv->descriptors, desc, length);
1157 if (priv->descriptors_len < DEVICE_DESC_LENGTH) {
1158 usbi_err(ctx, "short descriptor read (%d)", priv->descriptors_len);
1159 //LOGE("short descriptor read (%d)", priv->descriptors_len);
1160 return (int)LIBUSB_ERROR_IO;
1161 //RETURN(LIBUSB_ERROR_IO, int);
1164 if (fd < 0) { // if could not get fd of usbfs with read/write access
1165 /* cannot send a control message to determine the active
1166 * config. just assume the first one is active. */
1167 usbi_warn(ctx, "Missing rw usbfs access; cannot determine "
1168 "active configuration descriptor");
1169 if (priv->descriptors_len
1170 >= (DEVICE_DESC_LENGTH + LIBUSB_DT_CONFIG_SIZE)) {
1171 struct libusb_config_descriptor config;
1172 usbi_parse_descriptor(priv->descriptors + DEVICE_DESC_LENGTH,
1173 "bbwbbbbb", &config, 0);
1174 priv->active_config = config.bConfigurationValue;
1176 priv->active_config = -1; /* No config dt */
1178 return (int)LIBUSB_SUCCESS;
1179 //RETURN(LIBUSB_SUCCESS, int);
1181 // if we could get fd of usbfs with read/write access
1182 r = usbfs_get_active_config(dev, fd);
1184 priv->active_config = r;
1186 } else if (r == 0) {
1187 /* some buggy devices have a configuration 0, but we're
1188 * reaching into the corner of a corner case here, so let's
1189 * not support buggy devices in these circumstances.
1190 * stick to the specs: a configuration value of 0 means
1192 usbi_dbg("active cfg 0? assuming unconfigured device");
1193 priv->active_config = -1;
1195 } else if (r == LIBUSB_ERROR_IO) {
1196 /* buggy devices sometimes fail to report their active config.
1197 * assume unconfigured and continue the probing */
1198 usbi_warn(ctx, "couldn't query active configuration, assuming"
1200 priv->active_config = -1;
1202 } /* else r < 0, just return the error code */
1210 int linux_generate_device(struct libusb_context *ctx, struct libusb_device **dev,
1211 int vid, int pid, const char *serial, int fd, int busnum, int devaddr) {
1213 usbi_dbg("linux_generate_device, fd:%d, serial:%s", fd, serial);
1214 unsigned long session_id;
1218 /* FIXME: session ID is not guaranteed unique as addresses can wrap and
1219 * will be reused. instead we should add a simple sysfs attribute with
1221 session_id = busnum << 8 | devaddr;
1222 usbi_dbg("allocating new device for %d/%d (session %ld)", busnum, devaddr, session_id);
1223 *dev = usbi_alloc_device(ctx, session_id); // この時点で参照カウンタ=1
1225 usbi_dbg("ret %d", LIBUSB_ERROR_NO_MEM);
1226 return (int)LIBUSB_ERROR_NO_MEM;
1229 r = linux_initialize_device(*dev, busnum, devaddr, fd);
1231 usbi_err("initialize_device failed: ret=%d", r);
1234 r = usbi_sanitize_device(*dev);
1236 usbi_err("usbi_sanitize_device failed: ret=%d", r);
1242 libusb_unref_device(*dev); // ここで参照カウンタが0になって破棄される
1245 usbi_connect_device(*dev);
1248 usbi_dbg("linux_generate_device ret=%d", r);
1253 int linux_enumerate_device(struct libusb_context *ctx,
1254 uint8_t busnum, uint8_t devaddr, const char *sysfs_dir)
1256 unsigned long session_id;
1257 struct libusb_device *dev;
1260 /* FIXME: session ID is not guaranteed unique as addresses can wrap and
1261 * will be reused. instead we should add a simple sysfs attribute with
1263 session_id = busnum << 8 | devaddr;
1264 usbi_dbg("busnum %d devaddr %d session_id %ld", busnum, devaddr,
1267 dev = usbi_get_device_by_session_id(ctx, session_id);
1269 /* device already exists in the context */
1270 usbi_dbg("session_id %ld already exists", session_id);
1271 libusb_unref_device(dev);
1272 return LIBUSB_SUCCESS;
1275 usbi_dbg("allocating new device for %d/%d (session %ld)",
1276 busnum, devaddr, session_id);
1277 dev = usbi_alloc_device(ctx, session_id);
1279 return LIBUSB_ERROR_NO_MEM;
1281 r = initialize_device(dev, busnum, devaddr, sysfs_dir);
1284 r = usbi_sanitize_device(dev);
1288 r = linux_get_parent_info(dev, sysfs_dir);
1293 libusb_unref_device(dev);
1295 usbi_connect_device(dev);
1300 void linux_hotplug_enumerate(uint8_t busnum, uint8_t devaddr, const char *sys_name)
1302 struct libusb_context *ctx;
1304 usbi_mutex_static_lock(&active_contexts_lock);
1305 list_for_each_entry(ctx, &active_contexts_list, list, struct libusb_context) {
1306 linux_enumerate_device(ctx, busnum, devaddr, sys_name);
1308 usbi_mutex_static_unlock(&active_contexts_lock);
1311 void linux_device_disconnected(uint8_t busnum, uint8_t devaddr)
1313 struct libusb_context *ctx;
1314 struct libusb_device *dev;
1315 unsigned long session_id = busnum << 8 | devaddr;
1317 usbi_mutex_static_lock(&active_contexts_lock);
1318 list_for_each_entry(ctx, &active_contexts_list, list, struct libusb_context) {
1319 dev = usbi_get_device_by_session_id (ctx, session_id);
1321 usbi_disconnect_device (dev);
1322 libusb_unref_device(dev);
1324 usbi_dbg("device not found for session %x", session_id);
1327 usbi_mutex_static_unlock(&active_contexts_lock);
1330 #if !defined(USE_UDEV)
1331 /* open a bus directory and adds all discovered devices to the context */
1332 static int usbfs_scan_busdir(struct libusb_context *ctx, uint8_t busnum)
1335 char dirpath[PATH_MAX];
1336 struct dirent *entry;
1337 int r = LIBUSB_ERROR_IO;
1339 snprintf(dirpath, PATH_MAX, "%s/%03d", usbfs_path, busnum);
1340 usbi_dbg("%s", dirpath);
1341 dir = opendir(dirpath);
1343 usbi_err(ctx, "opendir '%s' failed, errno=%d", dirpath, errno);
1344 /* FIXME: should handle valid race conditions like hub unplugged
1345 * during directory iteration - this is not an error */
1349 while ((entry = readdir(dir))) {
1352 if (entry->d_name[0] == '.')
1355 devaddr = atoi(entry->d_name);
1357 usbi_dbg("unknown dir entry %s", entry->d_name);
1361 if (linux_enumerate_device(ctx, busnum, (uint8_t) devaddr, NULL)) {
1362 usbi_dbg("failed to enumerate dir entry %s", entry->d_name);
1373 static int usbfs_get_device_list(struct libusb_context *ctx)
1375 struct dirent *entry;
1376 DIR *buses = opendir(usbfs_path);
1380 usbi_err(ctx, "opendir buses failed errno=%d", errno);
1381 return LIBUSB_ERROR_IO;
1384 while ((entry = readdir(buses))) {
1387 if (entry->d_name[0] == '.')
1392 if (!_is_usbdev_entry(entry, &busnum, &devaddr))
1395 r = linux_enumerate_device(ctx, busnum, (uint8_t) devaddr, NULL);
1397 usbi_dbg("failed to enumerate dir entry %s", entry->d_name);
1401 busnum = atoi(entry->d_name);
1403 usbi_dbg("unknown dir entry %s", entry->d_name);
1407 r = usbfs_scan_busdir(ctx, busnum);
1419 static int sysfs_scan_device(struct libusb_context *ctx, const char *devname)
1421 uint8_t busnum, devaddr;
1424 ret = linux_get_device_address (ctx, 0, &busnum, &devaddr, NULL, devname);
1425 if (LIBUSB_SUCCESS != ret) {
1429 return linux_enumerate_device(ctx, busnum & 0xff, devaddr & 0xff,
1433 #if !defined(USE_UDEV)
1434 static int sysfs_get_device_list(struct libusb_context *ctx)
1436 DIR *devices = opendir(SYSFS_DEVICE_PATH);
1437 struct dirent *entry;
1438 int num_devices = 0;
1439 int num_enumerated = 0;
1442 usbi_err(ctx, "opendir devices failed errno=%d", errno);
1443 return LIBUSB_ERROR_IO;
1446 while ((entry = readdir(devices))) {
1447 if ((!isdigit(entry->d_name[0]) && strncmp(entry->d_name, "usb", 3))
1448 || strchr(entry->d_name, ':'))
1453 if (sysfs_scan_device(ctx, entry->d_name)) {
1454 usbi_dbg("failed to enumerate dir entry %s", entry->d_name);
1463 /* successful if at least one device was enumerated or no devices were found */
1464 if (num_enumerated || !num_devices)
1465 return LIBUSB_SUCCESS;
1467 return LIBUSB_ERROR_IO;
1470 static int linux_default_scan_devices (struct libusb_context *ctx)
1472 /* we can retrieve device list and descriptors from sysfs or usbfs.
1473 * sysfs is preferable, because if we use usbfs we end up resuming
1474 * any autosuspended USB devices. however, sysfs is not available
1475 * everywhere, so we need a usbfs fallback too.
1477 * as described in the "sysfs vs usbfs" comment at the top of this
1478 * file, sometimes we have sysfs but not enough information to
1479 * relate sysfs devices to usbfs nodes. op_init() determines the
1480 * adequacy of sysfs and sets sysfs_can_relate_devices.
1482 if (sysfs_can_relate_devices != 0)
1483 return sysfs_get_device_list(ctx);
1485 return usbfs_get_device_list(ctx);
1489 static int op_open(struct libusb_device_handle *handle)
1491 struct linux_device_handle_priv *hpriv = _device_handle_priv(handle);
1494 hpriv->fd = _get_usbfs_fd(handle->dev, O_RDWR, 0);
1495 if (hpriv->fd < 0) {
1496 if (hpriv->fd == LIBUSB_ERROR_NO_DEVICE) {
1497 /* device will still be marked as attached if hotplug monitor thread
1498 * hasn't processed remove event yet */
1499 usbi_mutex_static_lock(&linux_hotplug_lock);
1500 if (handle->dev->attached) {
1501 usbi_dbg("open failed with no device, but device still attached");
1502 linux_device_disconnected(handle->dev->bus_number,
1503 handle->dev->device_address);
1505 usbi_mutex_static_unlock(&linux_hotplug_lock);
1510 r = ioctl(hpriv->fd, IOCTL_USBFS_GET_CAPABILITIES, &hpriv->caps);
1512 if (errno == ENOTTY)
1513 usbi_dbg("getcap not available");
1515 usbi_err(HANDLE_CTX(handle), "getcap failed (%d)", errno);
1517 if (supports_flag_zero_packet)
1518 hpriv->caps |= USBFS_CAP_ZERO_PACKET;
1519 if (supports_flag_bulk_continuation)
1520 hpriv->caps |= USBFS_CAP_BULK_CONTINUATION;
1523 r = usbi_add_pollfd(HANDLE_CTX(handle), hpriv->fd, POLLOUT);
1530 static void op_close(struct libusb_device_handle *dev_handle)
1532 struct linux_device_handle_priv *hpriv = _device_handle_priv(dev_handle);
1533 /* fd may have already been removed by POLLERR condition in op_handle_events() */
1534 if (!hpriv->fd_removed)
1535 usbi_remove_pollfd(HANDLE_CTX(dev_handle), hpriv->fd);
1539 static int op_get_configuration(struct libusb_device_handle *handle,
1544 if (sysfs_can_relate_devices) {
1545 r = sysfs_get_active_config(handle->dev, config);
1547 r = usbfs_get_active_config(handle->dev,
1548 _device_handle_priv(handle)->fd);
1549 if (r == LIBUSB_SUCCESS)
1550 *config = _device_priv(handle->dev)->active_config;
1555 if (*config == -1) {
1556 usbi_err(HANDLE_CTX(handle), "device unconfigured");
1563 static int op_set_configuration(struct libusb_device_handle *handle, int config)
1565 struct linux_device_priv *priv = _device_priv(handle->dev);
1566 int fd = _device_handle_priv(handle)->fd;
1567 int r = ioctl(fd, IOCTL_USBFS_SETCONFIG, &config);
1569 if (errno == EINVAL)
1570 return LIBUSB_ERROR_NOT_FOUND;
1571 else if (errno == EBUSY)
1572 return LIBUSB_ERROR_BUSY;
1573 else if (errno == ENODEV)
1574 return LIBUSB_ERROR_NO_DEVICE;
1576 usbi_err(HANDLE_CTX(handle), "failed, error %d errno %d", r, errno);
1577 return LIBUSB_ERROR_OTHER;
1580 /* update our cached active config descriptor */
1581 priv->active_config = config;
1583 return LIBUSB_SUCCESS;
1586 static int claim_interface(struct libusb_device_handle *handle, int iface)
1588 int fd = _device_handle_priv(handle)->fd;
1589 int r = ioctl(fd, IOCTL_USBFS_CLAIMINTF, &iface);
1591 if (errno == ENOENT)
1592 return LIBUSB_ERROR_NOT_FOUND;
1593 else if (errno == EBUSY)
1594 return LIBUSB_ERROR_BUSY;
1595 else if (errno == ENODEV)
1596 return LIBUSB_ERROR_NO_DEVICE;
1598 usbi_err(HANDLE_CTX(handle),
1599 "claim interface failed, error %d errno %d", r, errno);
1600 return LIBUSB_ERROR_OTHER;
1605 static int release_interface(struct libusb_device_handle *handle, int iface)
1607 int fd = _device_handle_priv(handle)->fd;
1608 int r = ioctl(fd, IOCTL_USBFS_RELEASEINTF, &iface);
1610 if (errno == ENODEV)
1611 return LIBUSB_ERROR_NO_DEVICE;
1613 usbi_err(HANDLE_CTX(handle),
1614 "release interface failed, error %d errno %d", r, errno);
1615 return LIBUSB_ERROR_OTHER;
1620 static int op_set_interface(struct libusb_device_handle *handle, int iface,
1623 int fd = _device_handle_priv(handle)->fd;
1624 struct usbfs_setinterface setintf;
1627 setintf.interface = iface;
1628 setintf.altsetting = altsetting;
1629 r = ioctl(fd, IOCTL_USBFS_SETINTF, &setintf);
1631 if (errno == EINVAL)
1632 return LIBUSB_ERROR_NOT_FOUND;
1633 else if (errno == ENODEV)
1634 return LIBUSB_ERROR_NO_DEVICE;
1636 usbi_err(HANDLE_CTX(handle),
1637 "setintf failed error %d errno %d", r, errno);
1638 return LIBUSB_ERROR_OTHER;
1644 static int op_clear_halt(struct libusb_device_handle *handle,
1645 unsigned char endpoint)
1647 int fd = _device_handle_priv(handle)->fd;
1648 unsigned int _endpoint = endpoint;
1649 int r = ioctl(fd, IOCTL_USBFS_CLEAR_HALT, &_endpoint);
1651 if (errno == ENOENT)
1652 return LIBUSB_ERROR_NOT_FOUND;
1653 else if (errno == ENODEV)
1654 return LIBUSB_ERROR_NO_DEVICE;
1656 usbi_err(HANDLE_CTX(handle),
1657 "clear_halt failed error %d errno %d", r, errno);
1658 return LIBUSB_ERROR_OTHER;
1664 static int op_reset_device(struct libusb_device_handle *handle)
1666 int fd = _device_handle_priv(handle)->fd;
1669 /* Doing a device reset will cause the usbfs driver to get unbound
1670 from any interfaces it is bound to. By voluntarily unbinding
1671 the usbfs driver ourself, we stop the kernel from rebinding
1672 the interface after reset (which would end up with the interface
1673 getting bound to the in kernel driver if any). */
1674 for (i = 0; i < USB_MAXINTERFACES; i++) {
1675 if (handle->claimed_interfaces & (1L << i)) {
1676 release_interface(handle, i);
1680 usbi_mutex_lock(&handle->lock);
1681 r = ioctl(fd, IOCTL_USBFS_RESET, NULL);
1683 if (errno == ENODEV) {
1684 ret = LIBUSB_ERROR_NOT_FOUND;
1688 usbi_err(HANDLE_CTX(handle),
1689 "reset failed error %d errno %d", r, errno);
1690 ret = LIBUSB_ERROR_OTHER;
1694 /* And re-claim any interfaces which were claimed before the reset */
1695 for (i = 0; i < USB_MAXINTERFACES; i++) {
1696 if (handle->claimed_interfaces & (1L << i)) {
1698 * A driver may have completed modprobing during
1699 * IOCTL_USBFS_RESET, and bound itself as soon as
1700 * IOCTL_USBFS_RESET released the device lock
1702 r = detach_kernel_driver_and_claim(handle, i);
1704 usbi_warn(HANDLE_CTX(handle),
1705 "failed to re-claim interface %d after reset: %s",
1706 i, libusb_error_name(r));
1707 handle->claimed_interfaces &= ~(1L << i);
1708 ret = LIBUSB_ERROR_NOT_FOUND;
1713 usbi_mutex_unlock(&handle->lock);
1717 static int do_streams_ioctl(struct libusb_device_handle *handle, long req,
1718 uint32_t num_streams, unsigned char *endpoints, int num_endpoints)
1720 int r, fd = _device_handle_priv(handle)->fd;
1721 struct usbfs_streams *streams;
1723 if (num_endpoints > 30) /* Max 15 in + 15 out eps */
1724 return LIBUSB_ERROR_INVALID_PARAM;
1726 streams = malloc(sizeof(struct usbfs_streams) + num_endpoints);
1728 return LIBUSB_ERROR_NO_MEM;
1730 streams->num_streams = num_streams;
1731 streams->num_eps = num_endpoints;
1732 memcpy(streams->eps, endpoints, num_endpoints);
1734 r = ioctl(fd, req, streams);
1739 if (errno == ENOTTY)
1740 return LIBUSB_ERROR_NOT_SUPPORTED;
1741 else if (errno == EINVAL)
1742 return LIBUSB_ERROR_INVALID_PARAM;
1743 else if (errno == ENODEV)
1744 return LIBUSB_ERROR_NO_DEVICE;
1746 usbi_err(HANDLE_CTX(handle),
1747 "streams-ioctl failed error %d errno %d", r, errno);
1748 return LIBUSB_ERROR_OTHER;
1753 static int op_alloc_streams(struct libusb_device_handle *handle,
1754 uint32_t num_streams, unsigned char *endpoints, int num_endpoints)
1756 return do_streams_ioctl(handle, IOCTL_USBFS_ALLOC_STREAMS,
1757 num_streams, endpoints, num_endpoints);
1760 static int op_free_streams(struct libusb_device_handle *handle,
1761 unsigned char *endpoints, int num_endpoints)
1763 return do_streams_ioctl(handle, IOCTL_USBFS_FREE_STREAMS, 0,
1764 endpoints, num_endpoints);
1767 static unsigned char *op_dev_mem_alloc(struct libusb_device_handle *handle,
1770 struct linux_device_handle_priv *hpriv = _device_handle_priv(handle);
1771 unsigned char *buffer = (unsigned char *)mmap(NULL, len,
1772 PROT_READ | PROT_WRITE, MAP_SHARED, hpriv->fd, 0);
1773 if (buffer == MAP_FAILED) {
1774 usbi_err(HANDLE_CTX(handle), "alloc dev mem failed errno %d",
1781 static int op_dev_mem_free(struct libusb_device_handle *handle,
1782 unsigned char *buffer, size_t len)
1784 if (munmap(buffer, len) != 0) {
1785 usbi_err(HANDLE_CTX(handle), "free dev mem failed errno %d",
1787 return LIBUSB_ERROR_OTHER;
1789 return LIBUSB_SUCCESS;
1793 static int op_kernel_driver_active(struct libusb_device_handle *handle,
1796 int fd = _device_handle_priv(handle)->fd;
1797 struct usbfs_getdriver getdrv;
1800 getdrv.interface = interface;
1801 r = ioctl(fd, IOCTL_USBFS_GETDRIVER, &getdrv);
1803 if (errno == ENODATA)
1805 else if (errno == ENODEV)
1806 return LIBUSB_ERROR_NO_DEVICE;
1808 usbi_err(HANDLE_CTX(handle),
1809 "get driver failed error %d errno %d", r, errno);
1810 return LIBUSB_ERROR_OTHER;
1813 return (strcmp(getdrv.driver, "usbfs") == 0) ? 0 : 1;
1816 static int op_detach_kernel_driver(struct libusb_device_handle *handle,
1819 int fd = _device_handle_priv(handle)->fd;
1820 struct usbfs_ioctl command;
1821 struct usbfs_getdriver getdrv;
1824 command.ifno = interface;
1825 command.ioctl_code = IOCTL_USBFS_DISCONNECT;
1826 command.data = NULL;
1828 getdrv.interface = interface;
1829 r = ioctl(fd, IOCTL_USBFS_GETDRIVER, &getdrv);
1830 if (r == 0 && strcmp(getdrv.driver, "usbfs") == 0)
1831 return LIBUSB_ERROR_NOT_FOUND;
1833 r = ioctl(fd, IOCTL_USBFS_IOCTL, &command);
1835 if (errno == ENODATA)
1836 return LIBUSB_ERROR_NOT_FOUND;
1837 else if (errno == EINVAL)
1838 return LIBUSB_ERROR_INVALID_PARAM;
1839 else if (errno == ENODEV)
1840 return LIBUSB_ERROR_NO_DEVICE;
1842 usbi_err(HANDLE_CTX(handle),
1843 "detach failed error %d errno %d", r, errno);
1844 return LIBUSB_ERROR_OTHER;
1850 static int op_attach_kernel_driver(struct libusb_device_handle *handle,
1853 int fd = _device_handle_priv(handle)->fd;
1854 struct usbfs_ioctl command;
1857 command.ifno = interface;
1858 command.ioctl_code = IOCTL_USBFS_CONNECT;
1859 command.data = NULL;
1861 r = ioctl(fd, IOCTL_USBFS_IOCTL, &command);
1863 if (errno == ENODATA)
1864 return LIBUSB_ERROR_NOT_FOUND;
1865 else if (errno == EINVAL)
1866 return LIBUSB_ERROR_INVALID_PARAM;
1867 else if (errno == ENODEV)
1868 return LIBUSB_ERROR_NO_DEVICE;
1869 else if (errno == EBUSY)
1870 return LIBUSB_ERROR_BUSY;
1872 usbi_err(HANDLE_CTX(handle),
1873 "attach failed error %d errno %d", r, errno);
1874 return LIBUSB_ERROR_OTHER;
1875 } else if (r == 0) {
1876 return LIBUSB_ERROR_NOT_FOUND;
1882 static int detach_kernel_driver_and_claim(struct libusb_device_handle *handle,
1885 struct usbfs_disconnect_claim dc;
1886 int r, fd = _device_handle_priv(handle)->fd;
1888 dc.interface = interface;
1889 strcpy(dc.driver, "usbfs");
1890 dc.flags = USBFS_DISCONNECT_CLAIM_EXCEPT_DRIVER;
1891 r = ioctl(fd, IOCTL_USBFS_DISCONNECT_CLAIM, &dc);
1892 if (r != 0 && errno != ENOTTY) {
1895 return LIBUSB_ERROR_BUSY;
1897 return LIBUSB_ERROR_INVALID_PARAM;
1899 return LIBUSB_ERROR_NO_DEVICE;
1901 usbi_err(HANDLE_CTX(handle),
1902 "disconnect-and-claim failed errno %d", errno);
1903 return LIBUSB_ERROR_OTHER;
1907 /* Fallback code for kernels which don't support the
1908 disconnect-and-claim ioctl */
1909 r = op_detach_kernel_driver(handle, interface);
1910 if (r != 0 && r != LIBUSB_ERROR_NOT_FOUND)
1913 return claim_interface(handle, interface);
1916 static int op_claim_interface(struct libusb_device_handle *handle, int iface)
1918 if (handle->auto_detach_kernel_driver)
1919 return detach_kernel_driver_and_claim(handle, iface);
1921 return claim_interface(handle, iface);
1924 static int op_release_interface(struct libusb_device_handle *handle, int iface)
1928 r = release_interface(handle, iface);
1932 if (handle->auto_detach_kernel_driver)
1933 op_attach_kernel_driver(handle, iface);
1938 static void op_destroy_device(struct libusb_device *dev)
1940 struct linux_device_priv *priv = _device_priv(dev);
1941 if (priv->descriptors)
1942 free(priv->descriptors);
1943 if (priv->sysfs_dir)
1944 free(priv->sysfs_dir);
1947 /* URBs are discarded in reverse order of submission to avoid races. */
1948 static int discard_urbs(struct usbi_transfer *itransfer, int first, int last_plus_one)
1950 struct libusb_transfer *transfer =
1951 USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
1952 struct linux_transfer_priv *tpriv =
1953 usbi_transfer_get_os_priv(itransfer);
1954 struct linux_device_handle_priv *dpriv =
1955 _device_handle_priv(transfer->dev_handle);
1957 struct usbfs_urb *urb;
1959 for (i = last_plus_one - 1; i >= first; i--) {
1960 if (LIBUSB_TRANSFER_TYPE_ISOCHRONOUS == transfer->type)
1961 urb = tpriv->iso_urbs[i];
1963 urb = &tpriv->urbs[i];
1965 if (0 == ioctl(dpriv->fd, IOCTL_USBFS_DISCARDURB, urb))
1968 if (EINVAL == errno) {
1969 usbi_dbg("URB not found --> assuming ready to be reaped");
1970 if (i == (last_plus_one - 1))
1971 ret = LIBUSB_ERROR_NOT_FOUND;
1972 } else if (ENODEV == errno) {
1973 usbi_dbg("Device not found for URB --> assuming ready to be reaped");
1974 ret = LIBUSB_ERROR_NO_DEVICE;
1976 usbi_warn(TRANSFER_CTX(transfer),
1977 "unrecognised discard errno %d", errno);
1978 ret = LIBUSB_ERROR_OTHER;
1984 static void free_iso_urbs(struct linux_transfer_priv *tpriv)
1987 for (i = 0; i < tpriv->num_urbs; i++) {
1988 struct usbfs_urb *urb = tpriv->iso_urbs[i];
1994 free(tpriv->iso_urbs);
1995 tpriv->iso_urbs = NULL;
1998 static int submit_bulk_transfer(struct usbi_transfer *itransfer)
2000 struct libusb_transfer *transfer =
2001 USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
2002 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
2003 struct linux_device_handle_priv *dpriv =
2004 _device_handle_priv(transfer->dev_handle);
2005 struct usbfs_urb *urbs;
2006 int is_out = (transfer->endpoint & LIBUSB_ENDPOINT_DIR_MASK)
2007 == LIBUSB_ENDPOINT_OUT;
2008 int bulk_buffer_len, use_bulk_continuation;
2012 if (is_out && (transfer->flags & LIBUSB_TRANSFER_ADD_ZERO_PACKET) &&
2013 !(dpriv->caps & USBFS_CAP_ZERO_PACKET))
2014 return LIBUSB_ERROR_NOT_SUPPORTED;
2017 * Older versions of usbfs place a 16kb limit on bulk URBs. We work
2018 * around this by splitting large transfers into 16k blocks, and then
2019 * submit all urbs at once. it would be simpler to submit one urb at
2020 * a time, but there is a big performance gain doing it this way.
2022 * Newer versions lift the 16k limit (USBFS_CAP_NO_PACKET_SIZE_LIM),
2023 * using arbritary large transfers can still be a bad idea though, as
2024 * the kernel needs to allocate physical contiguous memory for this,
2025 * which may fail for large buffers.
2027 * The kernel solves this problem by splitting the transfer into
2028 * blocks itself when the host-controller is scatter-gather capable
2029 * (USBFS_CAP_BULK_SCATTER_GATHER), which most controllers are.
2031 * Last, there is the issue of short-transfers when splitting, for
2032 * short split-transfers to work reliable USBFS_CAP_BULK_CONTINUATION
2033 * is needed, but this is not always available.
2035 if (dpriv->caps & USBFS_CAP_BULK_SCATTER_GATHER) {
2036 /* Good! Just submit everything in one go */
2037 bulk_buffer_len = transfer->length ? transfer->length : 1;
2038 use_bulk_continuation = 0;
2039 } else if (dpriv->caps & USBFS_CAP_BULK_CONTINUATION) {
2040 /* Split the transfers and use bulk-continuation to
2041 avoid issues with short-transfers */
2042 bulk_buffer_len = MAX_BULK_BUFFER_LENGTH;
2043 use_bulk_continuation = 1;
2044 } else if (dpriv->caps & USBFS_CAP_NO_PACKET_SIZE_LIM) {
2045 /* Don't split, assume the kernel can alloc the buffer
2046 (otherwise the submit will fail with -ENOMEM) */
2047 bulk_buffer_len = transfer->length ? transfer->length : 1;
2048 use_bulk_continuation = 0;
2050 /* Bad, splitting without bulk-continuation, short transfers
2051 which end before the last urb will not work reliable! */
2052 /* Note we don't warn here as this is "normal" on kernels <
2053 2.6.32 and not a problem for most applications */
2054 bulk_buffer_len = MAX_BULK_BUFFER_LENGTH;
2055 use_bulk_continuation = 0;
2058 int num_urbs = transfer->length / bulk_buffer_len;
2059 int last_urb_partial = 0;
2061 if (transfer->length == 0) {
2063 } else if ((transfer->length % bulk_buffer_len) > 0) {
2064 last_urb_partial = 1;
2067 usbi_dbg("need %d urbs for new transfer with length %d", num_urbs,
2069 urbs = calloc(num_urbs, sizeof(struct usbfs_urb));
2071 return LIBUSB_ERROR_NO_MEM;
2073 tpriv->num_urbs = num_urbs;
2074 tpriv->num_retired = 0;
2075 tpriv->reap_action = NORMAL;
2076 tpriv->reap_status = LIBUSB_TRANSFER_COMPLETED;
2078 for (i = 0; i < num_urbs; i++) {
2079 struct usbfs_urb *urb = &urbs[i];
2080 urb->usercontext = itransfer;
2081 switch (transfer->type) {
2082 case LIBUSB_TRANSFER_TYPE_BULK:
2083 urb->type = USBFS_URB_TYPE_BULK;
2086 case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
2087 urb->type = USBFS_URB_TYPE_BULK;
2088 urb->stream_id = itransfer->stream_id;
2090 case LIBUSB_TRANSFER_TYPE_INTERRUPT:
2091 urb->type = USBFS_URB_TYPE_INTERRUPT;
2094 urb->endpoint = transfer->endpoint;
2095 urb->buffer = transfer->buffer + (i * bulk_buffer_len);
2096 /* don't set the short not ok flag for the last URB */
2097 if (use_bulk_continuation && !is_out && (i < num_urbs - 1))
2098 urb->flags = USBFS_URB_SHORT_NOT_OK;
2099 if (i == num_urbs - 1 && last_urb_partial)
2100 urb->buffer_length = transfer->length % bulk_buffer_len;
2101 else if (transfer->length == 0)
2102 urb->buffer_length = 0;
2104 urb->buffer_length = bulk_buffer_len;
2106 if (i > 0 && use_bulk_continuation)
2107 urb->flags |= USBFS_URB_BULK_CONTINUATION;
2109 /* we have already checked that the flag is supported */
2110 if (is_out && i == num_urbs - 1 &&
2111 transfer->flags & LIBUSB_TRANSFER_ADD_ZERO_PACKET)
2112 urb->flags |= USBFS_URB_ZERO_PACKET;
2114 r = ioctl(dpriv->fd, IOCTL_USBFS_SUBMITURB, urb);
2116 if (errno == ENODEV) {
2117 r = LIBUSB_ERROR_NO_DEVICE;
2119 usbi_err(TRANSFER_CTX(transfer),
2120 "submiturb failed error %d errno=%d", r, errno);
2121 r = LIBUSB_ERROR_IO;
2124 /* if the first URB submission fails, we can simply free up and
2125 * return failure immediately. */
2127 usbi_dbg("first URB failed, easy peasy");
2133 /* if it's not the first URB that failed, the situation is a bit
2134 * tricky. we may need to discard all previous URBs. there are
2136 * - discarding is asynchronous - discarded urbs will be reaped
2137 * later. the user must not have freed the transfer when the
2138 * discarded URBs are reaped, otherwise libusb will be using
2140 * - the earlier URBs may have completed successfully and we do
2141 * not want to throw away any data.
2142 * - this URB failing may be no error; EREMOTEIO means that
2143 * this transfer simply didn't need all the URBs we submitted
2144 * so, we report that the transfer was submitted successfully and
2145 * in case of error we discard all previous URBs. later when
2146 * the final reap completes we can report error to the user,
2147 * or success if an earlier URB was completed successfully.
2149 tpriv->reap_action = EREMOTEIO == errno ? COMPLETED_EARLY : SUBMIT_FAILED;
2151 /* The URBs we haven't submitted yet we count as already
2153 tpriv->num_retired += num_urbs - i;
2155 /* If we completed short then don't try to discard. */
2156 if (COMPLETED_EARLY == tpriv->reap_action)
2159 discard_urbs(itransfer, 0, i);
2161 usbi_dbg("reporting successful submission but waiting for %d "
2162 "discards before reporting error", i);
2170 static int submit_iso_transfer(struct usbi_transfer *itransfer)
2172 struct libusb_transfer *transfer =
2173 USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
2174 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
2175 struct linux_device_handle_priv *dpriv =
2176 _device_handle_priv(transfer->dev_handle);
2177 struct usbfs_urb **urbs;
2178 int num_packets = transfer->num_iso_packets;
2179 int num_packets_remaining;
2182 unsigned int packet_len;
2183 unsigned int total_len = 0;
2184 unsigned char *urb_buffer = transfer->buffer;
2186 if (num_packets < 1)
2187 return LIBUSB_ERROR_INVALID_PARAM;
2189 /* usbfs places arbitrary limits on iso URBs. this limit has changed
2190 * at least three times, but we attempt to detect this limit during
2191 * init and check it here. if the kernel rejects the request due to
2192 * its size, we return an error indicating such to the user.
2194 for (i = 0; i < num_packets; i++) {
2195 packet_len = transfer->iso_packet_desc[i].length;
2197 if (packet_len > max_iso_packet_len) {
2198 usbi_warn(TRANSFER_CTX(transfer),
2199 "iso packet length of %u bytes exceeds maximum of %u bytes",
2200 packet_len, max_iso_packet_len);
2201 return LIBUSB_ERROR_INVALID_PARAM;
2204 total_len += packet_len;
2207 if (transfer->length < (int)total_len)
2208 return LIBUSB_ERROR_INVALID_PARAM;
2210 /* usbfs limits the number of iso packets per URB */
2211 num_urbs = (num_packets + (MAX_ISO_PACKETS_PER_URB - 1)) / MAX_ISO_PACKETS_PER_URB;
2213 usbi_dbg("need %d urbs for new transfer with length %d", num_urbs,
2216 urbs = calloc(num_urbs, sizeof(*urbs));
2218 return LIBUSB_ERROR_NO_MEM;
2220 tpriv->iso_urbs = urbs;
2221 tpriv->num_urbs = num_urbs;
2222 tpriv->num_retired = 0;
2223 tpriv->reap_action = NORMAL;
2224 tpriv->iso_packet_offset = 0;
2226 /* allocate + initialize each URB with the correct number of packets */
2227 num_packets_remaining = num_packets;
2228 for (i = 0, j = 0; i < num_urbs; i++) {
2229 int num_packets_in_urb = MIN(num_packets_remaining, MAX_ISO_PACKETS_PER_URB);
2230 struct usbfs_urb *urb;
2234 alloc_size = sizeof(*urb)
2235 + (num_packets_in_urb * sizeof(struct usbfs_iso_packet_desc));
2236 urb = calloc(1, alloc_size);
2238 free_iso_urbs(tpriv);
2239 return LIBUSB_ERROR_NO_MEM;
2243 /* populate packet lengths */
2244 for (k = 0; k < num_packets_in_urb; j++, k++) {
2245 packet_len = transfer->iso_packet_desc[j].length;
2246 urb->buffer_length += packet_len;
2247 urb->iso_frame_desc[k].length = packet_len;
2250 urb->usercontext = itransfer;
2251 urb->type = USBFS_URB_TYPE_ISO;
2252 /* FIXME: interface for non-ASAP data? */
2253 urb->flags = USBFS_URB_ISO_ASAP;
2254 urb->endpoint = transfer->endpoint;
2255 urb->number_of_packets = num_packets_in_urb;
2256 urb->buffer = urb_buffer;
2258 urb_buffer += urb->buffer_length;
2259 num_packets_remaining -= num_packets_in_urb;
2263 for (i = 0; i < num_urbs; i++) {
2264 int r = ioctl(dpriv->fd, IOCTL_USBFS_SUBMITURB, urbs[i]);
2266 if (errno == ENODEV) {
2267 r = LIBUSB_ERROR_NO_DEVICE;
2268 } else if (errno == EINVAL) {
2269 usbi_warn(TRANSFER_CTX(transfer),
2270 "submiturb failed, transfer too large");
2271 r = LIBUSB_ERROR_INVALID_PARAM;
2272 } else if (errno == EMSGSIZE) {
2273 usbi_warn(TRANSFER_CTX(transfer),
2274 "submiturb failed, iso packet length too large");
2275 r = LIBUSB_ERROR_INVALID_PARAM;
2277 usbi_err(TRANSFER_CTX(transfer),
2278 "submiturb failed error %d errno=%d", r, errno);
2279 r = LIBUSB_ERROR_IO;
2282 /* if the first URB submission fails, we can simply free up and
2283 * return failure immediately. */
2285 usbi_dbg("first URB failed, easy peasy");
2286 free_iso_urbs(tpriv);
2290 /* if it's not the first URB that failed, the situation is a bit
2291 * tricky. we must discard all previous URBs. there are
2293 * - discarding is asynchronous - discarded urbs will be reaped
2294 * later. the user must not have freed the transfer when the
2295 * discarded URBs are reaped, otherwise libusb will be using
2297 * - the earlier URBs may have completed successfully and we do
2298 * not want to throw away any data.
2299 * so, in this case we discard all the previous URBs BUT we report
2300 * that the transfer was submitted successfully. then later when
2301 * the final discard completes we can report error to the user.
2303 tpriv->reap_action = SUBMIT_FAILED;
2305 /* The URBs we haven't submitted yet we count as already
2307 tpriv->num_retired = num_urbs - i;
2308 discard_urbs(itransfer, 0, i);
2310 usbi_dbg("reporting successful submission but waiting for %d "
2311 "discards before reporting error", i);
2319 static int submit_control_transfer(struct usbi_transfer *itransfer)
2321 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
2322 struct libusb_transfer *transfer =
2323 USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
2324 struct linux_device_handle_priv *dpriv =
2325 _device_handle_priv(transfer->dev_handle);
2326 struct usbfs_urb *urb;
2329 if (transfer->length - LIBUSB_CONTROL_SETUP_SIZE > MAX_CTRL_BUFFER_LENGTH)
2330 return LIBUSB_ERROR_INVALID_PARAM;
2332 urb = calloc(1, sizeof(struct usbfs_urb));
2334 return LIBUSB_ERROR_NO_MEM;
2336 tpriv->num_urbs = 1;
2337 tpriv->reap_action = NORMAL;
2339 urb->usercontext = itransfer;
2340 urb->type = USBFS_URB_TYPE_CONTROL;
2341 urb->endpoint = transfer->endpoint;
2342 urb->buffer = transfer->buffer;
2343 urb->buffer_length = transfer->length;
2345 r = ioctl(dpriv->fd, IOCTL_USBFS_SUBMITURB, urb);
2349 if (errno == ENODEV)
2350 return LIBUSB_ERROR_NO_DEVICE;
2352 usbi_err(TRANSFER_CTX(transfer),
2353 "submiturb failed error %d errno=%d", r, errno);
2354 return LIBUSB_ERROR_IO;
2359 static int op_submit_transfer(struct usbi_transfer *itransfer)
2361 struct libusb_transfer *transfer =
2362 USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
2364 switch (transfer->type) {
2365 case LIBUSB_TRANSFER_TYPE_CONTROL:
2366 return submit_control_transfer(itransfer);
2367 case LIBUSB_TRANSFER_TYPE_BULK:
2368 case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
2369 return submit_bulk_transfer(itransfer);
2370 case LIBUSB_TRANSFER_TYPE_INTERRUPT:
2371 return submit_bulk_transfer(itransfer);
2372 case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
2373 return submit_iso_transfer(itransfer);
2375 usbi_err(TRANSFER_CTX(transfer),
2376 "unknown endpoint type %d", transfer->type);
2377 return LIBUSB_ERROR_INVALID_PARAM;
2381 static int op_cancel_transfer(struct usbi_transfer *itransfer)
2383 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
2384 struct libusb_transfer *transfer =
2385 USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
2389 return LIBUSB_ERROR_NOT_FOUND;
2391 r = discard_urbs(itransfer, 0, tpriv->num_urbs);
2395 switch (transfer->type) {
2396 case LIBUSB_TRANSFER_TYPE_BULK:
2397 case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
2398 if (tpriv->reap_action == ERROR)
2400 /* else, fall through */
2402 tpriv->reap_action = CANCELLED;
2408 static void op_clear_transfer_priv(struct usbi_transfer *itransfer)
2410 struct libusb_transfer *transfer =
2411 USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
2412 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
2414 switch (transfer->type) {
2415 case LIBUSB_TRANSFER_TYPE_CONTROL:
2416 case LIBUSB_TRANSFER_TYPE_BULK:
2417 case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
2418 case LIBUSB_TRANSFER_TYPE_INTERRUPT:
2424 case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
2425 if (tpriv->iso_urbs) {
2426 free_iso_urbs(tpriv);
2427 tpriv->iso_urbs = NULL;
2431 usbi_err(TRANSFER_CTX(transfer),
2432 "unknown endpoint type %d", transfer->type);
2436 static int handle_bulk_completion(struct usbi_transfer *itransfer,
2437 struct usbfs_urb *urb)
2439 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
2440 struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
2441 int urb_idx = urb - tpriv->urbs;
2443 usbi_mutex_lock(&itransfer->lock);
2444 usbi_dbg("handling completion status %d of bulk urb %d/%d", urb->status,
2445 urb_idx + 1, tpriv->num_urbs);
2447 tpriv->num_retired++;
2449 if (tpriv->reap_action != NORMAL) {
2450 /* cancelled, submit_fail, or completed early */
2451 usbi_dbg("abnormal reap: urb status %d", urb->status);
2453 /* even though we're in the process of cancelling, it's possible that
2454 * we may receive some data in these URBs that we don't want to lose.
2456 * 1. while the kernel is cancelling all the packets that make up an
2457 * URB, a few of them might complete. so we get back a successful
2458 * cancellation *and* some data.
2459 * 2. we receive a short URB which marks the early completion condition,
2460 * so we start cancelling the remaining URBs. however, we're too
2461 * slow and another URB completes (or at least completes partially).
2462 * (this can't happen since we always use BULK_CONTINUATION.)
2464 * When this happens, our objectives are not to lose any "surplus" data,
2465 * and also to stick it at the end of the previously-received data
2466 * (closing any holes), so that libusb reports the total amount of
2467 * transferred data and presents it in a contiguous chunk.
2469 if (urb->actual_length > 0) {
2470 unsigned char *target = transfer->buffer + itransfer->transferred;
2471 usbi_dbg("received %d bytes of surplus data", urb->actual_length);
2472 if (urb->buffer != target) {
2473 usbi_dbg("moving surplus data from offset %d to offset %d",
2474 (unsigned char *) urb->buffer - transfer->buffer,
2475 target - transfer->buffer);
2476 memmove(target, urb->buffer, urb->actual_length);
2478 itransfer->transferred += urb->actual_length;
2481 if (tpriv->num_retired == tpriv->num_urbs) {
2482 usbi_dbg("abnormal reap: last URB handled, reporting");
2483 if (tpriv->reap_action != COMPLETED_EARLY &&
2484 tpriv->reap_status == LIBUSB_TRANSFER_COMPLETED)
2485 tpriv->reap_status = LIBUSB_TRANSFER_ERROR;
2491 itransfer->transferred += urb->actual_length;
2493 /* Many of these errors can occur on *any* urb of a multi-urb
2494 * transfer. When they do, we tear down the rest of the transfer.
2496 switch (urb->status) {
2499 case -EREMOTEIO: /* short transfer */
2501 case -ENOENT: /* cancelled */
2506 usbi_dbg("device removed");
2507 tpriv->reap_status = LIBUSB_TRANSFER_NO_DEVICE;
2508 goto cancel_remaining;
2510 usbi_dbg("detected endpoint stall");
2511 if (tpriv->reap_status == LIBUSB_TRANSFER_COMPLETED)
2512 tpriv->reap_status = LIBUSB_TRANSFER_STALL;
2513 goto cancel_remaining;
2515 /* overflow can only ever occur in the last urb */
2516 usbi_dbg("overflow, actual_length=%d", urb->actual_length);
2517 if (tpriv->reap_status == LIBUSB_TRANSFER_COMPLETED)
2518 tpriv->reap_status = LIBUSB_TRANSFER_OVERFLOW;
2525 usbi_dbg("low level error %d", urb->status);
2526 tpriv->reap_action = ERROR;
2527 goto cancel_remaining;
2529 usbi_warn(ITRANSFER_CTX(itransfer),
2530 "unrecognised urb status %d", urb->status);
2531 tpriv->reap_action = ERROR;
2532 goto cancel_remaining;
2535 /* if we're the last urb or we got less data than requested then we're
2537 if (urb_idx == tpriv->num_urbs - 1) {
2538 usbi_dbg("last URB in transfer --> complete!");
2540 } else if (urb->actual_length < urb->buffer_length) {
2541 usbi_dbg("short transfer %d/%d --> complete!",
2542 urb->actual_length, urb->buffer_length);
2543 if (tpriv->reap_action == NORMAL)
2544 tpriv->reap_action = COMPLETED_EARLY;
2549 if (ERROR == tpriv->reap_action && LIBUSB_TRANSFER_COMPLETED == tpriv->reap_status)
2550 tpriv->reap_status = LIBUSB_TRANSFER_ERROR;
2552 if (tpriv->num_retired == tpriv->num_urbs) /* nothing to cancel */
2555 /* cancel remaining urbs and wait for their completion before
2556 * reporting results */
2557 discard_urbs(itransfer, urb_idx + 1, tpriv->num_urbs);
2560 usbi_mutex_unlock(&itransfer->lock);
2566 usbi_mutex_unlock(&itransfer->lock);
2567 return CANCELLED == tpriv->reap_action ?
2568 usbi_handle_transfer_cancellation(itransfer) :
2569 usbi_handle_transfer_completion(itransfer, tpriv->reap_status);
2572 static int handle_iso_completion(struct usbi_transfer *itransfer,
2573 struct usbfs_urb *urb)
2575 struct libusb_transfer *transfer =
2576 USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
2577 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
2578 int num_urbs = tpriv->num_urbs;
2581 enum libusb_transfer_status status = LIBUSB_TRANSFER_COMPLETED;
2583 usbi_mutex_lock(&itransfer->lock);
2584 for (i = 0; i < num_urbs; i++) {
2585 if (urb == tpriv->iso_urbs[i]) {
2591 usbi_err(TRANSFER_CTX(transfer), "could not locate urb!");
2592 usbi_mutex_unlock(&itransfer->lock);
2593 return LIBUSB_ERROR_NOT_FOUND;
2596 usbi_dbg("handling completion status %d of iso urb %d/%d", urb->status,
2599 /* copy isochronous results back in */
2601 for (i = 0; i < urb->number_of_packets; i++) {
2602 struct usbfs_iso_packet_desc *urb_desc = &urb->iso_frame_desc[i];
2603 struct libusb_iso_packet_descriptor *lib_desc =
2604 &transfer->iso_packet_desc[tpriv->iso_packet_offset++];
2605 lib_desc->status = LIBUSB_TRANSFER_COMPLETED;
2606 switch (urb_desc->status) {
2609 case -ENOENT: /* cancelled */
2614 usbi_dbg("device removed");
2615 lib_desc->status = LIBUSB_TRANSFER_NO_DEVICE;
2618 usbi_dbg("detected endpoint stall");
2619 lib_desc->status = LIBUSB_TRANSFER_STALL;
2622 usbi_dbg("overflow error");
2623 lib_desc->status = LIBUSB_TRANSFER_OVERFLOW;
2631 usbi_dbg("low-level USB error %d", urb_desc->status);
2632 lib_desc->status = LIBUSB_TRANSFER_ERROR;
2635 usbi_warn(TRANSFER_CTX(transfer),
2636 "unrecognised urb status %d", urb_desc->status);
2637 lib_desc->status = LIBUSB_TRANSFER_ERROR;
2640 lib_desc->actual_length = urb_desc->actual_length;
2643 tpriv->num_retired++;
2645 if (tpriv->reap_action != NORMAL) { /* cancelled or submit_fail */
2646 usbi_dbg("CANCEL: urb status %d", urb->status);
2648 if (tpriv->num_retired == num_urbs) {
2649 usbi_dbg("CANCEL: last URB handled, reporting");
2650 free_iso_urbs(tpriv);
2651 if (tpriv->reap_action == CANCELLED) {
2652 usbi_mutex_unlock(&itransfer->lock);
2653 return usbi_handle_transfer_cancellation(itransfer);
2655 usbi_mutex_unlock(&itransfer->lock);
2656 return usbi_handle_transfer_completion(itransfer,
2657 LIBUSB_TRANSFER_ERROR);
2663 switch (urb->status) {
2666 case -ENOENT: /* cancelled */
2670 usbi_dbg("device removed");
2671 status = LIBUSB_TRANSFER_NO_DEVICE;
2674 usbi_warn(TRANSFER_CTX(transfer),
2675 "unrecognised urb status %d", urb->status);
2676 status = LIBUSB_TRANSFER_ERROR;
2680 /* if we're the last urb then we're done */
2681 if (urb_idx == num_urbs) {
2682 usbi_dbg("last URB in transfer --> complete!");
2683 free_iso_urbs(tpriv);
2684 usbi_mutex_unlock(&itransfer->lock);
2685 return usbi_handle_transfer_completion(itransfer, status);
2689 usbi_mutex_unlock(&itransfer->lock);
2693 static int handle_control_completion(struct usbi_transfer *itransfer,
2694 struct usbfs_urb *urb)
2696 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
2699 usbi_mutex_lock(&itransfer->lock);
2700 usbi_dbg("handling completion status %d", urb->status);
2702 itransfer->transferred += urb->actual_length;
2704 if (tpriv->reap_action == CANCELLED) {
2705 if (urb->status != 0 && urb->status != -ENOENT)
2706 usbi_warn(ITRANSFER_CTX(itransfer),
2707 "cancel: unrecognised urb status %d", urb->status);
2710 usbi_mutex_unlock(&itransfer->lock);
2711 return usbi_handle_transfer_cancellation(itransfer);
2714 switch (urb->status) {
2716 status = LIBUSB_TRANSFER_COMPLETED;
2718 case -ENOENT: /* cancelled */
2719 status = LIBUSB_TRANSFER_CANCELLED;
2723 usbi_dbg("device removed");
2724 status = LIBUSB_TRANSFER_NO_DEVICE;
2727 usbi_dbg("unsupported control request");
2728 status = LIBUSB_TRANSFER_STALL;
2731 usbi_dbg("control overflow error");
2732 status = LIBUSB_TRANSFER_OVERFLOW;
2739 usbi_dbg("low-level bus error occurred");
2740 status = LIBUSB_TRANSFER_ERROR;
2743 usbi_warn(ITRANSFER_CTX(itransfer),
2744 "unrecognised urb status %d", urb->status);
2745 status = LIBUSB_TRANSFER_ERROR;
2751 usbi_mutex_unlock(&itransfer->lock);
2752 return usbi_handle_transfer_completion(itransfer, status);
2755 static int reap_for_handle(struct libusb_device_handle *handle)
2757 struct linux_device_handle_priv *hpriv = _device_handle_priv(handle);
2759 struct usbfs_urb *urb;
2760 struct usbi_transfer *itransfer;
2761 struct libusb_transfer *transfer;
2763 r = ioctl(hpriv->fd, IOCTL_USBFS_REAPURBNDELAY, &urb);
2764 if (r == -1 && errno == EAGAIN)
2767 if (errno == ENODEV)
2768 return LIBUSB_ERROR_NO_DEVICE;
2770 usbi_err(HANDLE_CTX(handle), "reap failed error %d errno=%d",
2772 return LIBUSB_ERROR_IO;
2775 itransfer = urb->usercontext;
2776 transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
2778 usbi_dbg("urb type=%d status=%d transferred=%d", urb->type, urb->status,
2779 urb->actual_length);
2781 switch (transfer->type) {
2782 case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
2783 return handle_iso_completion(itransfer, urb);
2784 case LIBUSB_TRANSFER_TYPE_BULK:
2785 case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
2786 case LIBUSB_TRANSFER_TYPE_INTERRUPT:
2787 return handle_bulk_completion(itransfer, urb);
2788 case LIBUSB_TRANSFER_TYPE_CONTROL:
2789 return handle_control_completion(itransfer, urb);
2791 usbi_err(HANDLE_CTX(handle), "unrecognised endpoint type %x",
2793 return LIBUSB_ERROR_OTHER;
2797 static int op_handle_events(struct libusb_context *ctx,
2798 struct pollfd *fds, POLL_NFDS_TYPE nfds, int num_ready)
2803 usbi_mutex_lock(&ctx->open_devs_lock);
2804 for (i = 0; i < nfds && num_ready > 0; i++) {
2805 struct pollfd *pollfd = &fds[i];
2806 struct libusb_device_handle *handle;
2807 struct linux_device_handle_priv *hpriv = NULL;
2809 if (!pollfd->revents)
2813 list_for_each_entry(handle, &ctx->open_devs, list, struct libusb_device_handle) {
2814 hpriv = _device_handle_priv(handle);
2815 if (hpriv->fd == pollfd->fd)
2819 if (!hpriv || hpriv->fd != pollfd->fd) {
2820 usbi_err(ctx, "cannot find handle for fd %d",
2825 if (pollfd->revents & POLLERR) {
2826 /* remove the fd from the pollfd set so that it doesn't continuously
2827 * trigger an event, and flag that it has been removed so op_close()
2828 * doesn't try to remove it a second time */
2829 usbi_remove_pollfd(HANDLE_CTX(handle), hpriv->fd);
2830 hpriv->fd_removed = 1;
2832 /* device will still be marked as attached if hotplug monitor thread
2833 * hasn't processed remove event yet */
2834 usbi_mutex_static_lock(&linux_hotplug_lock);
2835 if (handle->dev->attached)
2836 linux_device_disconnected(handle->dev->bus_number,
2837 handle->dev->device_address);
2838 usbi_mutex_static_unlock(&linux_hotplug_lock);
2840 if (hpriv->caps & USBFS_CAP_REAP_AFTER_DISCONNECT) {
2842 r = reap_for_handle(handle);
2846 usbi_handle_disconnect(handle);
2851 r = reap_for_handle(handle);
2853 if (r == 1 || r == LIBUSB_ERROR_NO_DEVICE)
2861 usbi_mutex_unlock(&ctx->open_devs_lock);
2865 static int op_clock_gettime(int clk_id, struct timespec *tp)
2868 case USBI_CLOCK_MONOTONIC:
2869 return clock_gettime(monotonic_clkid, tp);
2870 case USBI_CLOCK_REALTIME:
2871 return clock_gettime(CLOCK_REALTIME, tp);
2873 return LIBUSB_ERROR_INVALID_PARAM;
2877 #ifdef USBI_TIMERFD_AVAILABLE
2878 static clockid_t op_get_timerfd_clockid(void)
2880 return monotonic_clkid;
2885 const struct usbi_os_backend usbi_backend = {
2886 .name = "Linux usbfs",
2887 .caps = USBI_CAP_HAS_HID_ACCESS|USBI_CAP_SUPPORTS_DETACH_KERNEL_DRIVER,
2890 .get_device_list = NULL,
2891 .hotplug_poll = op_hotplug_poll,
2892 .get_device_descriptor = op_get_device_descriptor,
2893 .get_active_config_descriptor = op_get_active_config_descriptor,
2894 .get_config_descriptor = op_get_config_descriptor,
2895 .get_config_descriptor_by_value = op_get_config_descriptor_by_value,
2899 .get_configuration = op_get_configuration,
2900 .set_configuration = op_set_configuration,
2901 .claim_interface = op_claim_interface,
2902 .release_interface = op_release_interface,
2904 .set_interface_altsetting = op_set_interface,
2905 .clear_halt = op_clear_halt,
2906 .reset_device = op_reset_device,
2908 .alloc_streams = op_alloc_streams,
2909 .free_streams = op_free_streams,
2911 .dev_mem_alloc = op_dev_mem_alloc,
2912 .dev_mem_free = op_dev_mem_free,
2914 .kernel_driver_active = op_kernel_driver_active,
2915 .detach_kernel_driver = op_detach_kernel_driver,
2916 .attach_kernel_driver = op_attach_kernel_driver,
2918 .destroy_device = op_destroy_device,
2920 .submit_transfer = op_submit_transfer,
2921 .cancel_transfer = op_cancel_transfer,
2922 .clear_transfer_priv = op_clear_transfer_priv,
2924 .handle_events = op_handle_events,
2926 .clock_gettime = op_clock_gettime,
2928 #ifdef USBI_TIMERFD_AVAILABLE
2929 .get_timerfd_clockid = op_get_timerfd_clockid,
2932 .device_priv_size = sizeof(struct linux_device_priv),
2933 .device_handle_priv_size = sizeof(struct linux_device_handle_priv),
2934 .transfer_priv_size = sizeof(struct linux_transfer_priv),