2 * Linux usbfs backend for libusb
3 * Copyright (C) 2007-2009 Daniel Drake <dsd@gentoo.org>
4 * Copyright (c) 2001 Johannes Erdfelt <johannes@erdfelt.com>
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30 #include <sys/ioctl.h>
32 #include <sys/types.h>
33 #include <sys/utsname.h>
38 #include "linux_usbfs.h"
41 * opening a usbfs node causes the device to be resumed, so we attempt to
42 * avoid this during enumeration.
44 * sysfs allows us to read the kernel's in-memory copies of device descriptors
45 * and so forth, avoiding the need to open the device:
46 * - The binary "descriptors" file was added in 2.6.23.
47 * - The "busnum" file was added in 2.6.22
48 * - The "devnum" file has been present since pre-2.6.18
49 * - the "bConfigurationValue" file has been present since pre-2.6.18
51 * If we have bConfigurationValue, busnum, and devnum, then we can determine
52 * the active configuration without having to open the usbfs node in RDWR mode.
53 * We assume this is the case if we see the busnum file (indicates 2.6.22+).
54 * The busnum file is important as that is the only way we can relate sysfs
55 * devices to usbfs nodes.
57 * If we also have descriptors, we can obtain the device descriptor and active
58 * configuration without touching usbfs at all.
60 * The descriptors file originally only contained the active configuration
61 * descriptor alongside the device descriptor, but all configurations are
62 * included as of Linux 2.6.26.
65 /* endianness for multi-byte fields:
67 * Descriptors exposed by usbfs have the multi-byte fields in the device
68 * descriptor as host endian. Multi-byte fields in the other descriptors are
69 * bus-endian. The kernel documentation says otherwise, but it is wrong.
72 static const char *usbfs_path = NULL;
74 /* Linux 2.6.32 adds support for a bulk continuation URB flag. this basically
75 * allows us to mark URBs as being part of a specific logical transfer when
76 * we submit them to the kernel. then, on any error except a cancellation, all
77 * URBs within that transfer will be cancelled and no more URBs will be
78 * accepted for the transfer, meaning that no more data can creep in.
80 * The BULK_CONTINUATION flag must be set on all URBs within a bulk transfer
81 * (in either direction) except the first.
82 * For IN transfers, we must also set SHORT_NOT_OK on all URBs except the
83 * last; it means that the kernel should treat a short reply as an error.
84 * For OUT transfers, SHORT_NOT_OK must not be set. it isn't needed (OUT
85 * transfers can't be short unless there's already some sort of error), and
86 * setting this flag is disallowed (a kernel with USB debugging enabled will
89 static int supports_flag_bulk_continuation = -1;
91 /* clock ID for monotonic clock, as not all clock sources are available on all
92 * systems. appropriate choice made at initialization time. */
93 static clockid_t monotonic_clkid = -1;
95 /* do we have a busnum to relate devices? this also implies that we can read
96 * the active configuration through bConfigurationValue */
97 static int sysfs_can_relate_devices = 0;
99 /* do we have a descriptors file? */
100 static int sysfs_has_descriptors = 0;
102 struct linux_device_priv {
104 unsigned char *dev_descriptor;
105 unsigned char *config_descriptor;
108 struct linux_device_handle_priv {
114 /* submission failed after the first URB, so await cancellation/completion
115 * of all the others */
118 /* cancelled by user or timeout */
121 /* completed multi-URB transfer in non-final URB */
124 /* one or more urbs encountered a low-level error */
128 struct linux_transfer_priv {
130 struct usbfs_urb *urbs;
131 struct usbfs_urb **iso_urbs;
134 enum reap_action reap_action;
136 unsigned int num_retired;
137 enum libusb_transfer_status reap_status;
139 /* next iso packet in user-supplied transfer to be populated */
140 int iso_packet_offset;
143 static void __get_usbfs_path(struct libusb_device *dev, char *path)
145 snprintf(path, PATH_MAX, "%s/%03d/%03d", usbfs_path, dev->bus_number,
146 dev->device_address);
149 static struct linux_device_priv *__device_priv(struct libusb_device *dev)
151 return (struct linux_device_priv *) dev->os_priv;
154 static struct linux_device_handle_priv *__device_handle_priv(
155 struct libusb_device_handle *handle)
157 return (struct linux_device_handle_priv *) handle->os_priv;
160 static int check_usb_vfs(const char *dirname)
163 struct dirent *entry;
166 dir = opendir(dirname);
170 while ((entry = readdir(dir)) != NULL) {
171 if (entry->d_name[0] == '.')
174 /* We assume if we find any files that it must be the right place */
183 static const char *find_usbfs_path(void)
185 const char *path = "/dev/bus/usb";
186 const char *ret = NULL;
188 if (check_usb_vfs(path)) {
191 path = "/proc/bus/usb";
192 if (check_usb_vfs(path))
196 usbi_dbg("found usbfs at %s", ret);
200 /* the monotonic clock is not usable on all systems (e.g. embedded ones often
201 * seem to lack it). fall back to REALTIME if we have to. */
202 static clockid_t find_monotonic_clock(void)
207 #ifdef CLOCK_MONOTONIC
208 /* Linux 2.6.28 adds CLOCK_MONOTONIC_RAW but we don't use it
209 * because it's not available through timerfd */
210 r = clock_gettime(CLOCK_MONOTONIC, &ts);
212 return CLOCK_MONOTONIC;
213 usbi_dbg("monotonic clock doesn't work, errno %d", errno);
216 return CLOCK_REALTIME;
219 /* bulk continuation URB flag available from Linux 2.6.32 */
220 static int check_flag_bulk_continuation(void)
223 int major, minor, sublevel;
227 if (strlen(uts.release) < 4)
229 if (sscanf(uts.release, "%d.%d.%d", &major, &minor, &sublevel) != 3)
244 /* Return 1 if filename exists inside dirname in sysfs.
245 SYSFS_DEVICE_PATH is assumed to be the beginning of the path. */
246 static int sysfs_has_file(const char *dirname, const char *filename)
252 snprintf(path, PATH_MAX, "%s/%s/%s", SYSFS_DEVICE_PATH, dirname, filename);
253 r = stat(path, &statbuf);
254 if (r == 0 && S_ISREG(statbuf.st_mode))
260 static int op_init(struct libusb_context *ctx)
265 usbfs_path = find_usbfs_path();
267 usbi_err(ctx, "could not find usbfs");
268 return LIBUSB_ERROR_OTHER;
271 if (monotonic_clkid == -1)
272 monotonic_clkid = find_monotonic_clock();
274 if (supports_flag_bulk_continuation == -1) {
275 supports_flag_bulk_continuation = check_flag_bulk_continuation();
276 if (supports_flag_bulk_continuation == -1) {
277 usbi_err(ctx, "error checking for bulk continuation support");
278 return LIBUSB_ERROR_OTHER;
282 if (supports_flag_bulk_continuation)
283 usbi_dbg("bulk continuation flag supported");
285 r = stat(SYSFS_DEVICE_PATH, &statbuf);
286 if (r == 0 && S_ISDIR(statbuf.st_mode)) {
287 DIR *devices = opendir(SYSFS_DEVICE_PATH);
288 struct dirent *entry;
290 usbi_dbg("found usb devices in sysfs");
293 usbi_err(ctx, "opendir devices failed errno=%d", errno);
294 return LIBUSB_ERROR_IO;
297 /* Make sure sysfs supports all the required files. If it
298 * does not, then usbfs will be used instead. Determine
299 * this by looping through the directories in
300 * SYSFS_DEVICE_PATH. With the assumption that there will
301 * always be subdirectories of the name usbN (usb1, usb2,
302 * etc) representing the root hubs, check the usbN
303 * subdirectories to see if they have all the needed files.
304 * This algorithm uses the usbN subdirectories (root hubs)
305 * because a device disconnection will cause a race
306 * condition regarding which files are available, sometimes
307 * causing an incorrect result. The root hubs are used
308 * because it is assumed that they will always be present.
309 * See the "sysfs vs usbfs" comment at the top of this file
310 * for more details. */
311 while ((entry = readdir(devices))) {
312 int has_busnum=0, has_devnum=0, has_descriptors=0;
313 int has_configuration_value=0;
315 /* Only check the usbN directories. */
316 if (strncmp(entry->d_name, "usb", 3) != 0)
319 /* Check for the files libusb needs from sysfs. */
320 has_busnum = sysfs_has_file(entry->d_name, "busnum");
321 has_devnum = sysfs_has_file(entry->d_name, "devnum");
322 has_descriptors = sysfs_has_file(entry->d_name, "descriptors");
323 has_configuration_value = sysfs_has_file(entry->d_name, "bConfigurationValue");
325 if (has_busnum && has_devnum && has_configuration_value)
326 sysfs_can_relate_devices = 1;
328 sysfs_has_descriptors = 1;
330 /* Only need to check until we've found ONE device which
331 has all the attributes. */
332 if (sysfs_has_descriptors && sysfs_can_relate_devices)
337 /* Only use sysfs descriptors if the rest of
338 sysfs will work for libusb. */
339 if (!sysfs_can_relate_devices)
340 sysfs_has_descriptors = 0;
342 usbi_dbg("sysfs usb info not available");
343 sysfs_has_descriptors = 0;
344 sysfs_can_relate_devices = 0;
350 static int usbfs_get_device_descriptor(struct libusb_device *dev,
351 unsigned char *buffer)
353 struct linux_device_priv *priv = __device_priv(dev);
355 /* return cached copy */
356 memcpy(buffer, priv->dev_descriptor, DEVICE_DESC_LENGTH);
360 static int __open_sysfs_attr(struct libusb_device *dev, const char *attr)
362 struct linux_device_priv *priv = __device_priv(dev);
363 char filename[PATH_MAX];
366 snprintf(filename, PATH_MAX, "%s/%s/%s",
367 SYSFS_DEVICE_PATH, priv->sysfs_dir, attr);
368 fd = open(filename, O_RDONLY);
370 usbi_err(DEVICE_CTX(dev),
371 "open %s failed ret=%d errno=%d", filename, fd, errno);
372 return LIBUSB_ERROR_IO;
378 /* Note only suitable for attributes which always read >= 0, < 0 is error */
379 static int __read_sysfs_attr(struct libusb_context *ctx,
380 const char *devname, const char *attr)
382 char filename[PATH_MAX];
386 snprintf(filename, PATH_MAX, "%s/%s/%s", SYSFS_DEVICE_PATH,
388 f = fopen(filename, "r");
390 if (errno == ENOENT) {
391 /* File doesn't exist. Assume the device has been
392 disconnected (see trac ticket #70). */
393 return LIBUSB_ERROR_NO_DEVICE;
395 usbi_err(ctx, "open %s failed errno=%d", filename, errno);
396 return LIBUSB_ERROR_IO;
399 r = fscanf(f, "%d", &value);
402 usbi_err(ctx, "fscanf %s returned %d, errno=%d", attr, r, errno);
403 return LIBUSB_ERROR_NO_DEVICE; /* For unplug race (trac #70) */
406 usbi_err(ctx, "%s contains a negative value", filename);
407 return LIBUSB_ERROR_IO;
413 static int sysfs_get_device_descriptor(struct libusb_device *dev,
414 unsigned char *buffer)
419 /* sysfs provides access to an in-memory copy of the device descriptor,
420 * so we use that rather than keeping our own copy */
422 fd = __open_sysfs_attr(dev, "descriptors");
426 r = read(fd, buffer, DEVICE_DESC_LENGTH);;
429 usbi_err(DEVICE_CTX(dev), "read failed, ret=%d errno=%d", fd, errno);
430 return LIBUSB_ERROR_IO;
431 } else if (r < DEVICE_DESC_LENGTH) {
432 usbi_err(DEVICE_CTX(dev), "short read %d/%d", r, DEVICE_DESC_LENGTH);
433 return LIBUSB_ERROR_IO;
439 static int op_get_device_descriptor(struct libusb_device *dev,
440 unsigned char *buffer, int *host_endian)
442 if (sysfs_has_descriptors) {
443 return sysfs_get_device_descriptor(dev, buffer);
446 return usbfs_get_device_descriptor(dev, buffer);
450 static int usbfs_get_active_config_descriptor(struct libusb_device *dev,
451 unsigned char *buffer, size_t len)
453 struct linux_device_priv *priv = __device_priv(dev);
454 if (!priv->config_descriptor)
455 return LIBUSB_ERROR_NOT_FOUND; /* device is unconfigured */
457 /* retrieve cached copy */
458 memcpy(buffer, priv->config_descriptor, len);
462 /* read the bConfigurationValue for a device */
463 static int sysfs_get_active_config(struct libusb_device *dev, int *config)
466 char tmp[4] = {0, 0, 0, 0};
471 fd = __open_sysfs_attr(dev, "bConfigurationValue");
475 r = read(fd, tmp, sizeof(tmp));
478 usbi_err(DEVICE_CTX(dev),
479 "read bConfigurationValue failed ret=%d errno=%d", r, errno);
480 return LIBUSB_ERROR_IO;
482 usbi_err(DEVICE_CTX(dev), "device unconfigured");
487 if (tmp[sizeof(tmp) - 1] != 0) {
488 usbi_err(DEVICE_CTX(dev), "not null-terminated?");
489 return LIBUSB_ERROR_IO;
490 } else if (tmp[0] == 0) {
491 usbi_err(DEVICE_CTX(dev), "no configuration value?");
492 return LIBUSB_ERROR_IO;
495 num = strtol(tmp, &endptr, 10);
497 usbi_err(DEVICE_CTX(dev), "error converting '%s' to integer", tmp);
498 return LIBUSB_ERROR_IO;
505 /* takes a usbfs/descriptors fd seeked to the start of a configuration, and
506 * seeks to the next one. */
507 static int seek_to_next_config(struct libusb_context *ctx, int fd,
510 struct libusb_config_descriptor config;
511 unsigned char tmp[6];
515 /* read first 6 bytes of descriptor */
516 r = read(fd, tmp, sizeof(tmp));
518 usbi_err(ctx, "read failed ret=%d errno=%d", r, errno);
519 return LIBUSB_ERROR_IO;
520 } else if (r < sizeof(tmp)) {
521 usbi_err(ctx, "short descriptor read %d/%d", r, sizeof(tmp));
522 return LIBUSB_ERROR_IO;
525 /* seek forward to end of config */
526 usbi_parse_descriptor(tmp, "bbwbb", &config, host_endian);
527 off = lseek(fd, config.wTotalLength - sizeof(tmp), SEEK_CUR);
529 usbi_err(ctx, "seek failed ret=%d errno=%d", off, errno);
530 return LIBUSB_ERROR_IO;
536 static int sysfs_get_active_config_descriptor(struct libusb_device *dev,
537 unsigned char *buffer, size_t len)
544 unsigned char tmp[6];
546 r = sysfs_get_active_config(dev, &config);
550 return LIBUSB_ERROR_NOT_FOUND;
552 usbi_dbg("active configuration %d", config);
554 /* sysfs provides access to an in-memory copy of the device descriptor,
555 * so we use that rather than keeping our own copy */
557 fd = __open_sysfs_attr(dev, "descriptors");
561 /* device might have been unconfigured since we read bConfigurationValue,
562 * so first check that there is any config descriptor data at all... */
563 off = lseek(fd, 0, SEEK_END);
565 usbi_err(DEVICE_CTX(dev), "end seek failed, ret=%d errno=%d",
568 return LIBUSB_ERROR_IO;
569 } else if (off == DEVICE_DESC_LENGTH) {
571 return LIBUSB_ERROR_NOT_FOUND;
574 off = lseek(fd, DEVICE_DESC_LENGTH, SEEK_SET);
576 usbi_err(DEVICE_CTX(dev), "seek failed, ret=%d errno=%d", off, errno);
578 return LIBUSB_ERROR_IO;
581 /* unbounded loop: we expect the descriptor to be present under all
584 r = read(fd, tmp, sizeof(tmp));
586 usbi_err(DEVICE_CTX(dev), "read failed, ret=%d errno=%d",
588 return LIBUSB_ERROR_IO;
589 } else if (r < sizeof(tmp)) {
590 usbi_err(DEVICE_CTX(dev), "short read %d/%d", r, sizeof(tmp));
591 return LIBUSB_ERROR_IO;
594 /* check bConfigurationValue */
595 if (tmp[5] == config)
598 /* try the next descriptor */
599 off = lseek(fd, 0 - sizeof(tmp), SEEK_CUR);
601 return LIBUSB_ERROR_IO;
603 r = seek_to_next_config(DEVICE_CTX(dev), fd, 0);
608 to_copy = (len < sizeof(tmp)) ? len : sizeof(tmp);
609 memcpy(buffer, tmp, to_copy);
610 if (len > sizeof(tmp)) {
611 r = read(fd, buffer + sizeof(tmp), len - sizeof(tmp));
613 usbi_err(DEVICE_CTX(dev), "read failed, ret=%d errno=%d",
617 usbi_dbg("device is unconfigured");
618 r = LIBUSB_ERROR_NOT_FOUND;
619 } else if (r < len - sizeof(tmp)) {
620 usbi_err(DEVICE_CTX(dev), "short read %d/%d", r, len);
631 static int op_get_active_config_descriptor(struct libusb_device *dev,
632 unsigned char *buffer, size_t len, int *host_endian)
634 if (sysfs_has_descriptors) {
635 return sysfs_get_active_config_descriptor(dev, buffer, len);
637 return usbfs_get_active_config_descriptor(dev, buffer, len);
641 /* takes a usbfs fd, attempts to find the requested config and copy a certain
642 * amount of it into an output buffer. */
643 static int get_config_descriptor(struct libusb_context *ctx, int fd,
644 uint8_t config_index, unsigned char *buffer, size_t len)
649 off = lseek(fd, DEVICE_DESC_LENGTH, SEEK_SET);
651 usbi_err(ctx, "seek failed ret=%d errno=%d", off, errno);
652 return LIBUSB_ERROR_IO;
655 /* might need to skip some configuration descriptors to reach the
656 * requested configuration */
657 while (config_index > 0) {
658 r = seek_to_next_config(ctx, fd, 1);
664 /* read the rest of the descriptor */
665 r = read(fd, buffer, len);
667 usbi_err(ctx, "read failed ret=%d errno=%d", r, errno);
668 return LIBUSB_ERROR_IO;
669 } else if (r < len) {
670 usbi_err(ctx, "short output read %d/%d", r, len);
671 return LIBUSB_ERROR_IO;
677 static int op_get_config_descriptor(struct libusb_device *dev,
678 uint8_t config_index, unsigned char *buffer, size_t len, int *host_endian)
680 char filename[PATH_MAX];
684 /* always read from usbfs: sysfs only has the active descriptor
685 * this will involve waking the device up, but oh well! */
687 /* FIXME: the above is no longer true, new kernels have all descriptors
688 * in the descriptors file. but its kinda hard to detect if the kernel
689 * is sufficiently new. */
691 __get_usbfs_path(dev, filename);
692 fd = open(filename, O_RDONLY);
694 usbi_err(DEVICE_CTX(dev),
695 "open '%s' failed, ret=%d errno=%d", filename, fd, errno);
696 return LIBUSB_ERROR_IO;
699 r = get_config_descriptor(DEVICE_CTX(dev), fd, config_index, buffer, len);
704 /* cache the active config descriptor in memory. a value of -1 means that
705 * we aren't sure which one is active, so just assume the first one.
707 static int cache_active_config(struct libusb_device *dev, int fd,
710 struct linux_device_priv *priv = __device_priv(dev);
711 struct libusb_config_descriptor config;
712 unsigned char tmp[8];
717 if (active_config == -1) {
720 r = usbi_get_config_index_by_value(dev, active_config, &idx);
724 return LIBUSB_ERROR_NOT_FOUND;
727 r = get_config_descriptor(DEVICE_CTX(dev), fd, idx, tmp, sizeof(tmp));
729 usbi_err(DEVICE_CTX(dev), "first read error %d", r);
733 usbi_parse_descriptor(tmp, "bbw", &config, 0);
734 buf = malloc(config.wTotalLength);
736 return LIBUSB_ERROR_NO_MEM;
738 r = get_config_descriptor(DEVICE_CTX(dev), fd, idx, buf,
739 config.wTotalLength);
745 if (priv->config_descriptor)
746 free(priv->config_descriptor);
747 priv->config_descriptor = buf;
751 /* send a control message to retrieve active configuration */
752 static int usbfs_get_active_config(struct libusb_device *dev, int fd)
754 unsigned char active_config = 0;
757 struct usbfs_ctrltransfer ctrl = {
758 .bmRequestType = LIBUSB_ENDPOINT_IN,
759 .bRequest = LIBUSB_REQUEST_GET_CONFIGURATION,
764 .data = &active_config
767 r = ioctl(fd, IOCTL_USBFS_CONTROL, &ctrl);
770 return LIBUSB_ERROR_NO_DEVICE;
772 /* we hit this error path frequently with buggy devices :( */
773 usbi_warn(DEVICE_CTX(dev),
774 "get_configuration failed ret=%d errno=%d", r, errno);
775 return LIBUSB_ERROR_IO;
778 return active_config;
781 static int initialize_device(struct libusb_device *dev, uint8_t busnum,
782 uint8_t devaddr, const char *sysfs_dir)
784 struct linux_device_priv *priv = __device_priv(dev);
785 unsigned char *dev_buf;
788 int active_config = 0;
789 int device_configured = 1;
792 dev->bus_number = busnum;
793 dev->device_address = devaddr;
796 priv->sysfs_dir = malloc(strlen(sysfs_dir) + 1);
797 if (!priv->sysfs_dir)
798 return LIBUSB_ERROR_NO_MEM;
799 strcpy(priv->sysfs_dir, sysfs_dir);
802 if (sysfs_has_descriptors)
805 /* cache device descriptor in memory so that we can retrieve it later
806 * without waking the device up (op_get_device_descriptor) */
808 priv->dev_descriptor = NULL;
809 priv->config_descriptor = NULL;
811 if (sysfs_can_relate_devices) {
812 int tmp = sysfs_get_active_config(dev, &active_config);
815 if (active_config == -1)
816 device_configured = 0;
819 __get_usbfs_path(dev, path);
820 fd = open(path, O_RDWR);
821 if (fd < 0 && errno == EACCES) {
822 fd = open(path, O_RDONLY);
823 /* if we only have read-only access to the device, we cannot
824 * send a control message to determine the active config. just
825 * assume the first one is active. */
830 usbi_err(DEVICE_CTX(dev), "open failed, ret=%d errno=%d", fd, errno);
831 return LIBUSB_ERROR_IO;
834 if (!sysfs_can_relate_devices) {
835 if (active_config == -1) {
836 /* if we only have read-only access to the device, we cannot
837 * send a control message to determine the active config. just
838 * assume the first one is active. */
839 usbi_warn(DEVICE_CTX(dev), "access to %s is read-only; cannot "
840 "determine active configuration descriptor", path);
842 active_config = usbfs_get_active_config(dev, fd);
843 if (active_config == LIBUSB_ERROR_IO) {
844 /* buggy devices sometimes fail to report their active config.
845 * assume unconfigured and continue the probing */
846 usbi_warn(DEVICE_CTX(dev), "couldn't query active "
847 "configuration, assumung unconfigured");
848 device_configured = 0;
849 } else if (active_config < 0) {
851 return active_config;
852 } else if (active_config == 0) {
853 /* some buggy devices have a configuration 0, but we're
854 * reaching into the corner of a corner case here, so let's
855 * not support buggy devices in these circumstances.
856 * stick to the specs: a configuration value of 0 means
858 usbi_dbg("active cfg 0? assuming unconfigured device");
859 device_configured = 0;
864 dev_buf = malloc(DEVICE_DESC_LENGTH);
867 return LIBUSB_ERROR_NO_MEM;
870 r = read(fd, dev_buf, DEVICE_DESC_LENGTH);
872 usbi_err(DEVICE_CTX(dev),
873 "read descriptor failed ret=%d errno=%d", fd, errno);
876 return LIBUSB_ERROR_IO;
877 } else if (r < DEVICE_DESC_LENGTH) {
878 usbi_err(DEVICE_CTX(dev), "short descriptor read (%d)", r);
881 return LIBUSB_ERROR_IO;
884 /* bit of a hack: set num_configurations now because cache_active_config()
885 * calls usbi_get_config_index_by_value() which uses it */
886 dev->num_configurations = dev_buf[DEVICE_DESC_LENGTH - 1];
888 if (device_configured) {
889 r = cache_active_config(dev, fd, active_config);
898 priv->dev_descriptor = dev_buf;
902 static int enumerate_device(struct libusb_context *ctx,
903 struct discovered_devs **_discdevs, uint8_t busnum, uint8_t devaddr,
904 const char *sysfs_dir)
906 struct discovered_devs *discdevs;
907 unsigned long session_id;
909 struct libusb_device *dev;
912 /* FIXME: session ID is not guaranteed unique as addresses can wrap and
913 * will be reused. instead we should add a simple sysfs attribute with
915 session_id = busnum << 8 | devaddr;
916 usbi_dbg("busnum %d devaddr %d session_id %ld", busnum, devaddr,
919 dev = usbi_get_device_by_session_id(ctx, session_id);
921 usbi_dbg("using existing device for %d/%d (session %ld)",
922 busnum, devaddr, session_id);
924 usbi_dbg("allocating new device for %d/%d (session %ld)",
925 busnum, devaddr, session_id);
926 dev = usbi_alloc_device(ctx, session_id);
928 return LIBUSB_ERROR_NO_MEM;
930 r = initialize_device(dev, busnum, devaddr, sysfs_dir);
933 r = usbi_sanitize_device(dev);
938 discdevs = discovered_devs_append(*_discdevs, dev);
940 r = LIBUSB_ERROR_NO_MEM;
942 *_discdevs = discdevs;
946 libusb_unref_device(dev);
950 /* open a bus directory and adds all discovered devices to discdevs. on
951 * failure (non-zero return) the pre-existing discdevs should be destroyed
952 * (and devices freed). on success, the new discdevs pointer should be used
953 * as it may have been moved. */
954 static int usbfs_scan_busdir(struct libusb_context *ctx,
955 struct discovered_devs **_discdevs, uint8_t busnum)
958 char dirpath[PATH_MAX];
959 struct dirent *entry;
960 struct discovered_devs *discdevs = *_discdevs;
963 snprintf(dirpath, PATH_MAX, "%s/%03d", usbfs_path, busnum);
964 usbi_dbg("%s", dirpath);
965 dir = opendir(dirpath);
967 usbi_err(ctx, "opendir '%s' failed, errno=%d", dirpath, errno);
968 /* FIXME: should handle valid race conditions like hub unplugged
969 * during directory iteration - this is not an error */
970 return LIBUSB_ERROR_IO;
973 while ((entry = readdir(dir))) {
976 if (entry->d_name[0] == '.')
979 devaddr = atoi(entry->d_name);
981 usbi_dbg("unknown dir entry %s", entry->d_name);
985 r = enumerate_device(ctx, &discdevs, busnum, (uint8_t) devaddr, NULL);
990 *_discdevs = discdevs;
996 static int usbfs_get_device_list(struct libusb_context *ctx,
997 struct discovered_devs **_discdevs)
999 struct dirent *entry;
1000 DIR *buses = opendir(usbfs_path);
1001 struct discovered_devs *discdevs = *_discdevs;
1005 usbi_err(ctx, "opendir buses failed errno=%d", errno);
1006 return LIBUSB_ERROR_IO;
1009 while ((entry = readdir(buses))) {
1010 struct discovered_devs *discdevs_new = discdevs;
1013 if (entry->d_name[0] == '.')
1016 busnum = atoi(entry->d_name);
1018 usbi_dbg("unknown dir entry %s", entry->d_name);
1022 r = usbfs_scan_busdir(ctx, &discdevs_new, busnum);
1025 discdevs = discdevs_new;
1030 *_discdevs = discdevs;
1035 static int sysfs_scan_device(struct libusb_context *ctx,
1036 struct discovered_devs **_discdevs, const char *devname)
1040 char filename[PATH_MAX];
1044 usbi_dbg("scan %s", devname);
1046 snprintf(filename, PATH_MAX, "%s/%s/busnum", SYSFS_DEVICE_PATH, devname);
1047 fd = fopen(filename, "r");
1049 if (errno == ENOENT) {
1050 /* busnum doesn't exist. Assume the device has been
1051 disconnected (unplugged). */
1052 return LIBUSB_ERROR_NO_DEVICE;
1054 usbi_err(ctx, "open busnum failed, errno=%d", errno);
1055 return LIBUSB_ERROR_IO;
1058 r = fscanf(fd, "%d", &busnum);
1061 usbi_err(ctx, "fscanf busnum returned %d, errno=%d", r, errno);
1062 return LIBUSB_ERROR_NO_DEVICE;
1065 snprintf(filename, PATH_MAX, "%s/%s/devnum", SYSFS_DEVICE_PATH, devname);
1066 fd = fopen(filename, "r");
1068 if (errno == ENOENT) {
1069 /* devnum doesn't exist. Assume the device has been
1070 disconnected (unplugged). */
1071 return LIBUSB_ERROR_NO_DEVICE;
1073 usbi_err(ctx, "open devnum failed, errno=%d", errno);
1074 return LIBUSB_ERROR_IO;
1077 r = fscanf(fd, "%d", &devaddr);
1080 usbi_err(ctx, "fscanf devnum returned %d, errno=%d", r, errno);
1081 return LIBUSB_ERROR_NO_DEVICE;
1084 usbi_dbg("bus=%d dev=%d", busnum, devaddr);
1085 if (busnum > 255 || devaddr > 255)
1086 return LIBUSB_ERROR_INVALID_PARAM;
1088 return enumerate_device(ctx, _discdevs, busnum & 0xff, devaddr & 0xff,
1092 static int sysfs_get_device_list(struct libusb_context *ctx,
1093 struct discovered_devs **_discdevs)
1095 struct discovered_devs *discdevs = *_discdevs;
1096 DIR *devices = opendir(SYSFS_DEVICE_PATH);
1097 struct dirent *entry;
1101 usbi_err(ctx, "opendir devices failed errno=%d", errno);
1102 return LIBUSB_ERROR_IO;
1105 while ((entry = readdir(devices))) {
1106 struct discovered_devs *discdevs_new = discdevs;
1108 if ((!isdigit(entry->d_name[0]) && strncmp(entry->d_name, "usb", 3))
1109 || strchr(entry->d_name, ':'))
1112 r = sysfs_scan_device(ctx, &discdevs_new, entry->d_name);
1113 if (r < 0 && r != LIBUSB_ERROR_NO_DEVICE)
1115 discdevs = discdevs_new;
1120 *_discdevs = discdevs;
1124 static int op_get_device_list(struct libusb_context *ctx,
1125 struct discovered_devs **_discdevs)
1127 /* we can retrieve device list and descriptors from sysfs or usbfs.
1128 * sysfs is preferable, because if we use usbfs we end up resuming
1129 * any autosuspended USB devices. however, sysfs is not available
1130 * everywhere, so we need a usbfs fallback too.
1132 * as described in the "sysfs vs usbfs" comment at the top of this
1133 * file, sometimes we have sysfs but not enough information to
1134 * relate sysfs devices to usbfs nodes. op_init() determines the
1135 * adequacy of sysfs and sets sysfs_can_relate_devices.
1137 if (sysfs_can_relate_devices != 0)
1138 return sysfs_get_device_list(ctx, _discdevs);
1140 return usbfs_get_device_list(ctx, _discdevs);
1143 static int op_open(struct libusb_device_handle *handle)
1145 struct linux_device_handle_priv *hpriv = __device_handle_priv(handle);
1146 char filename[PATH_MAX];
1148 __get_usbfs_path(handle->dev, filename);
1149 hpriv->fd = open(filename, O_RDWR);
1150 if (hpriv->fd < 0) {
1151 if (errno == EACCES) {
1152 usbi_err(HANDLE_CTX(handle), "libusb couldn't open USB device %s: "
1153 "Permission denied.", filename);
1154 usbi_err(HANDLE_CTX(handle),
1155 "libusb requires write access to USB device nodes.");
1156 return LIBUSB_ERROR_ACCESS;
1157 } else if (errno == ENOENT) {
1158 return LIBUSB_ERROR_NO_DEVICE;
1160 usbi_err(HANDLE_CTX(handle),
1161 "open failed, code %d errno %d", hpriv->fd, errno);
1162 return LIBUSB_ERROR_IO;
1166 return usbi_add_pollfd(HANDLE_CTX(handle), hpriv->fd, POLLOUT);
1169 static void op_close(struct libusb_device_handle *dev_handle)
1171 int fd = __device_handle_priv(dev_handle)->fd;
1172 usbi_remove_pollfd(HANDLE_CTX(dev_handle), fd);
1176 static int op_get_configuration(struct libusb_device_handle *handle,
1180 if (sysfs_can_relate_devices != 1)
1181 return LIBUSB_ERROR_NOT_SUPPORTED;
1183 r = sysfs_get_active_config(handle->dev, config);
1193 static int op_set_configuration(struct libusb_device_handle *handle, int config)
1195 struct linux_device_priv *priv = __device_priv(handle->dev);
1196 int fd = __device_handle_priv(handle)->fd;
1197 int r = ioctl(fd, IOCTL_USBFS_SETCONFIG, &config);
1199 if (errno == EINVAL)
1200 return LIBUSB_ERROR_NOT_FOUND;
1201 else if (errno == EBUSY)
1202 return LIBUSB_ERROR_BUSY;
1203 else if (errno == ENODEV)
1204 return LIBUSB_ERROR_NO_DEVICE;
1206 usbi_err(HANDLE_CTX(handle), "failed, error %d errno %d", r, errno);
1207 return LIBUSB_ERROR_OTHER;
1210 if (!sysfs_has_descriptors) {
1211 /* update our cached active config descriptor */
1213 if (priv->config_descriptor) {
1214 free(priv->config_descriptor);
1215 priv->config_descriptor = NULL;
1218 r = cache_active_config(handle->dev, fd, config);
1220 usbi_warn(HANDLE_CTX(handle),
1221 "failed to update cached config descriptor, error %d", r);
1228 static int op_claim_interface(struct libusb_device_handle *handle, int iface)
1230 int fd = __device_handle_priv(handle)->fd;
1231 int r = ioctl(fd, IOCTL_USBFS_CLAIMINTF, &iface);
1233 if (errno == ENOENT)
1234 return LIBUSB_ERROR_NOT_FOUND;
1235 else if (errno == EBUSY)
1236 return LIBUSB_ERROR_BUSY;
1237 else if (errno == ENODEV)
1238 return LIBUSB_ERROR_NO_DEVICE;
1240 usbi_err(HANDLE_CTX(handle),
1241 "claim interface failed, error %d errno %d", r, errno);
1242 return LIBUSB_ERROR_OTHER;
1247 static int op_release_interface(struct libusb_device_handle *handle, int iface)
1249 int fd = __device_handle_priv(handle)->fd;
1250 int r = ioctl(fd, IOCTL_USBFS_RELEASEINTF, &iface);
1252 if (errno == ENODEV)
1253 return LIBUSB_ERROR_NO_DEVICE;
1255 usbi_err(HANDLE_CTX(handle),
1256 "release interface failed, error %d errno %d", r, errno);
1257 return LIBUSB_ERROR_OTHER;
1262 static int op_set_interface(struct libusb_device_handle *handle, int iface,
1265 int fd = __device_handle_priv(handle)->fd;
1266 struct usbfs_setinterface setintf;
1269 setintf.interface = iface;
1270 setintf.altsetting = altsetting;
1271 r = ioctl(fd, IOCTL_USBFS_SETINTF, &setintf);
1273 if (errno == EINVAL)
1274 return LIBUSB_ERROR_NOT_FOUND;
1275 else if (errno == ENODEV)
1276 return LIBUSB_ERROR_NO_DEVICE;
1278 usbi_err(HANDLE_CTX(handle),
1279 "setintf failed error %d errno %d", r, errno);
1280 return LIBUSB_ERROR_OTHER;
1286 static int op_clear_halt(struct libusb_device_handle *handle,
1287 unsigned char endpoint)
1289 int fd = __device_handle_priv(handle)->fd;
1290 unsigned int _endpoint = endpoint;
1291 int r = ioctl(fd, IOCTL_USBFS_CLEAR_HALT, &_endpoint);
1293 if (errno == ENOENT)
1294 return LIBUSB_ERROR_NOT_FOUND;
1295 else if (errno == ENODEV)
1296 return LIBUSB_ERROR_NO_DEVICE;
1298 usbi_err(HANDLE_CTX(handle),
1299 "clear_halt failed error %d errno %d", r, errno);
1300 return LIBUSB_ERROR_OTHER;
1306 static int op_reset_device(struct libusb_device_handle *handle)
1308 int fd = __device_handle_priv(handle)->fd;
1311 /* Doing a device reset will cause the usbfs driver to get unbound
1312 from any interfaces it is bound to. By voluntarily unbinding
1313 the usbfs driver ourself, we stop the kernel from rebinding
1314 the interface after reset (which would end up with the interface
1315 getting bound to the in kernel driver if any). */
1316 for (i = 0; i < USB_MAXINTERFACES; i++) {
1317 if (handle->claimed_interfaces & (1L << i)) {
1318 op_release_interface(handle, i);
1322 usbi_mutex_lock(&handle->lock);
1323 r = ioctl(fd, IOCTL_USBFS_RESET, NULL);
1325 if (errno == ENODEV) {
1326 ret = LIBUSB_ERROR_NOT_FOUND;
1330 usbi_err(HANDLE_CTX(handle),
1331 "reset failed error %d errno %d", r, errno);
1332 ret = LIBUSB_ERROR_OTHER;
1336 /* And re-claim any interfaces which were claimed before the reset */
1337 for (i = 0; i < USB_MAXINTERFACES; i++) {
1338 if (handle->claimed_interfaces & (1L << i)) {
1339 r = op_claim_interface(handle, i);
1341 usbi_warn(HANDLE_CTX(handle),
1342 "failed to re-claim interface %d after reset", i);
1343 handle->claimed_interfaces &= ~(1L << i);
1348 usbi_mutex_unlock(&handle->lock);
1352 static int op_kernel_driver_active(struct libusb_device_handle *handle,
1355 int fd = __device_handle_priv(handle)->fd;
1356 struct usbfs_getdriver getdrv;
1359 getdrv.interface = interface;
1360 r = ioctl(fd, IOCTL_USBFS_GETDRIVER, &getdrv);
1362 if (errno == ENODATA)
1364 else if (errno == ENODEV)
1365 return LIBUSB_ERROR_NO_DEVICE;
1367 usbi_err(HANDLE_CTX(handle),
1368 "get driver failed error %d errno %d", r, errno);
1369 return LIBUSB_ERROR_OTHER;
1375 static int op_detach_kernel_driver(struct libusb_device_handle *handle,
1378 int fd = __device_handle_priv(handle)->fd;
1379 struct usbfs_ioctl command;
1382 command.ifno = interface;
1383 command.ioctl_code = IOCTL_USBFS_DISCONNECT;
1384 command.data = NULL;
1386 r = ioctl(fd, IOCTL_USBFS_IOCTL, &command);
1388 if (errno == ENODATA)
1389 return LIBUSB_ERROR_NOT_FOUND;
1390 else if (errno == EINVAL)
1391 return LIBUSB_ERROR_INVALID_PARAM;
1392 else if (errno == ENODEV)
1393 return LIBUSB_ERROR_NO_DEVICE;
1395 usbi_err(HANDLE_CTX(handle),
1396 "detach failed error %d errno %d", r, errno);
1397 return LIBUSB_ERROR_OTHER;
1403 static int op_attach_kernel_driver(struct libusb_device_handle *handle,
1406 int fd = __device_handle_priv(handle)->fd;
1407 struct usbfs_ioctl command;
1410 command.ifno = interface;
1411 command.ioctl_code = IOCTL_USBFS_CONNECT;
1412 command.data = NULL;
1414 r = ioctl(fd, IOCTL_USBFS_IOCTL, &command);
1416 if (errno == ENODATA)
1417 return LIBUSB_ERROR_NOT_FOUND;
1418 else if (errno == EINVAL)
1419 return LIBUSB_ERROR_INVALID_PARAM;
1420 else if (errno == ENODEV)
1421 return LIBUSB_ERROR_NO_DEVICE;
1422 else if (errno == EBUSY)
1423 return LIBUSB_ERROR_BUSY;
1425 usbi_err(HANDLE_CTX(handle),
1426 "attach failed error %d errno %d", r, errno);
1427 return LIBUSB_ERROR_OTHER;
1428 } else if (r == 0) {
1429 return LIBUSB_ERROR_NOT_FOUND;
1435 static void op_destroy_device(struct libusb_device *dev)
1437 struct linux_device_priv *priv = __device_priv(dev);
1438 if (!sysfs_has_descriptors) {
1439 if (priv->dev_descriptor)
1440 free(priv->dev_descriptor);
1441 if (priv->config_descriptor)
1442 free(priv->config_descriptor);
1444 if (priv->sysfs_dir)
1445 free(priv->sysfs_dir);
1448 /* URBs are discarded in reverse order of submission to avoid races. */
1449 static int discard_urbs(struct usbi_transfer *itransfer, int first, int last_plus_one)
1451 struct libusb_transfer *transfer =
1452 __USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
1453 struct linux_transfer_priv *tpriv =
1454 usbi_transfer_get_os_priv(itransfer);
1455 struct linux_device_handle_priv *dpriv =
1456 __device_handle_priv(transfer->dev_handle);
1458 struct usbfs_urb *urb;
1460 for (i = last_plus_one - 1; i >= first; i--) {
1461 if (LIBUSB_TRANSFER_TYPE_ISOCHRONOUS == transfer->type)
1462 urb = tpriv->iso_urbs[i];
1464 urb = &tpriv->urbs[i];
1466 if (0 == ioctl(dpriv->fd, IOCTL_USBFS_DISCARDURB, urb))
1469 if (EINVAL == errno) {
1470 usbi_dbg("URB not found --> assuming ready to be reaped");
1471 ret = LIBUSB_ERROR_NOT_FOUND;
1472 } else if (ENODEV == errno) {
1473 usbi_dbg("Device not found for URB --> assuming ready to be reaped");
1474 ret = LIBUSB_ERROR_NO_DEVICE;
1476 usbi_warn(TRANSFER_CTX(transfer),
1477 "unrecognised discard errno %d", errno);
1478 ret = LIBUSB_ERROR_OTHER;
1484 static void free_iso_urbs(struct linux_transfer_priv *tpriv)
1487 for (i = 0; i < tpriv->num_urbs; i++) {
1488 struct usbfs_urb *urb = tpriv->iso_urbs[i];
1494 free(tpriv->iso_urbs);
1495 tpriv->iso_urbs = NULL;
1498 static int submit_bulk_transfer(struct usbi_transfer *itransfer,
1499 unsigned char urb_type)
1501 struct libusb_transfer *transfer =
1502 __USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
1503 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
1504 struct linux_device_handle_priv *dpriv =
1505 __device_handle_priv(transfer->dev_handle);
1506 struct usbfs_urb *urbs;
1507 int is_out = (transfer->endpoint & LIBUSB_ENDPOINT_DIR_MASK)
1508 == LIBUSB_ENDPOINT_OUT;
1514 return LIBUSB_ERROR_BUSY;
1516 /* usbfs places a 16kb limit on bulk URBs. we divide up larger requests
1517 * into smaller units to meet such restriction, then fire off all the
1518 * units at once. it would be simpler if we just fired one unit at a time,
1519 * but there is a big performance gain through doing it this way. */
1520 int num_urbs = transfer->length / MAX_BULK_BUFFER_LENGTH;
1521 int last_urb_partial = 0;
1523 if (transfer->length == 0) {
1525 } else if ((transfer->length % MAX_BULK_BUFFER_LENGTH) > 0) {
1526 last_urb_partial = 1;
1529 usbi_dbg("need %d urbs for new transfer with length %d", num_urbs,
1531 alloc_size = num_urbs * sizeof(struct usbfs_urb);
1532 urbs = malloc(alloc_size);
1534 return LIBUSB_ERROR_NO_MEM;
1535 memset(urbs, 0, alloc_size);
1537 tpriv->num_urbs = num_urbs;
1538 tpriv->num_retired = 0;
1539 tpriv->reap_action = NORMAL;
1540 tpriv->reap_status = LIBUSB_TRANSFER_COMPLETED;
1542 for (i = 0; i < num_urbs; i++) {
1543 struct usbfs_urb *urb = &urbs[i];
1544 urb->usercontext = itransfer;
1545 urb->type = urb_type;
1546 urb->endpoint = transfer->endpoint;
1547 urb->buffer = transfer->buffer + (i * MAX_BULK_BUFFER_LENGTH);
1548 if (supports_flag_bulk_continuation && !is_out)
1549 urb->flags = USBFS_URB_SHORT_NOT_OK;
1550 if (i == num_urbs - 1 && last_urb_partial)
1551 urb->buffer_length = transfer->length % MAX_BULK_BUFFER_LENGTH;
1552 else if (transfer->length == 0)
1553 urb->buffer_length = 0;
1555 urb->buffer_length = MAX_BULK_BUFFER_LENGTH;
1557 if (i > 0 && supports_flag_bulk_continuation)
1558 urb->flags |= USBFS_URB_BULK_CONTINUATION;
1560 r = ioctl(dpriv->fd, IOCTL_USBFS_SUBMITURB, urb);
1562 if (errno == ENODEV) {
1563 r = LIBUSB_ERROR_NO_DEVICE;
1565 usbi_err(TRANSFER_CTX(transfer),
1566 "submiturb failed error %d errno=%d", r, errno);
1567 r = LIBUSB_ERROR_IO;
1570 /* if the first URB submission fails, we can simply free up and
1571 * return failure immediately. */
1573 usbi_dbg("first URB failed, easy peasy");
1579 /* if it's not the first URB that failed, the situation is a bit
1580 * tricky. we may need to discard all previous URBs. there are
1582 * - discarding is asynchronous - discarded urbs will be reaped
1583 * later. the user must not have freed the transfer when the
1584 * discarded URBs are reaped, otherwise libusb will be using
1586 * - the earlier URBs may have completed successfully and we do
1587 * not want to throw away any data.
1588 * - this URB failing may be no error; EREMOTEIO means that
1589 * this transfer simply didn't need all the URBs we submitted
1590 * so, we report that the transfer was submitted successfully and
1591 * in case of error we discard all previous URBs. later when
1592 * the final reap completes we can report error to the user,
1593 * or success if an earlier URB was completed successfully.
1595 tpriv->reap_action = EREMOTEIO == errno ? COMPLETED_EARLY : SUBMIT_FAILED;
1597 /* The URBs we haven't submitted yet we count as already
1599 tpriv->num_retired += num_urbs - i;
1601 /* If we completed short then don't try to discard. */
1602 if (COMPLETED_EARLY == tpriv->reap_action)
1605 discard_urbs(itransfer, 0, i);
1607 usbi_dbg("reporting successful submission but waiting for %d "
1608 "discards before reporting error", i);
1616 static int submit_iso_transfer(struct usbi_transfer *itransfer)
1618 struct libusb_transfer *transfer =
1619 __USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
1620 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
1621 struct linux_device_handle_priv *dpriv =
1622 __device_handle_priv(transfer->dev_handle);
1623 struct usbfs_urb **urbs;
1625 int num_packets = transfer->num_iso_packets;
1627 int this_urb_len = 0;
1629 int packet_offset = 0;
1630 unsigned int packet_len;
1631 unsigned char *urb_buffer = transfer->buffer;
1633 if (tpriv->iso_urbs)
1634 return LIBUSB_ERROR_BUSY;
1636 /* usbfs places a 32kb limit on iso URBs. we divide up larger requests
1637 * into smaller units to meet such restriction, then fire off all the
1638 * units at once. it would be simpler if we just fired one unit at a time,
1639 * but there is a big performance gain through doing it this way. */
1641 /* calculate how many URBs we need */
1642 for (i = 0; i < num_packets; i++) {
1643 int space_remaining = MAX_ISO_BUFFER_LENGTH - this_urb_len;
1644 packet_len = transfer->iso_packet_desc[i].length;
1646 if (packet_len > space_remaining) {
1648 this_urb_len = packet_len;
1650 this_urb_len += packet_len;
1653 usbi_dbg("need %d 32k URBs for transfer", num_urbs);
1655 alloc_size = num_urbs * sizeof(*urbs);
1656 urbs = malloc(alloc_size);
1658 return LIBUSB_ERROR_NO_MEM;
1659 memset(urbs, 0, alloc_size);
1661 tpriv->iso_urbs = urbs;
1662 tpriv->num_urbs = num_urbs;
1663 tpriv->num_retired = 0;
1664 tpriv->reap_action = NORMAL;
1665 tpriv->iso_packet_offset = 0;
1667 /* allocate + initialize each URB with the correct number of packets */
1668 for (i = 0; i < num_urbs; i++) {
1669 struct usbfs_urb *urb;
1670 int space_remaining_in_urb = MAX_ISO_BUFFER_LENGTH;
1671 int urb_packet_offset = 0;
1672 unsigned char *urb_buffer_orig = urb_buffer;
1676 /* swallow up all the packets we can fit into this URB */
1677 while (packet_offset < transfer->num_iso_packets) {
1678 packet_len = transfer->iso_packet_desc[packet_offset].length;
1679 if (packet_len <= space_remaining_in_urb) {
1681 urb_packet_offset++;
1683 space_remaining_in_urb -= packet_len;
1684 urb_buffer += packet_len;
1686 /* it can't fit, save it for the next URB */
1691 alloc_size = sizeof(*urb)
1692 + (urb_packet_offset * sizeof(struct usbfs_iso_packet_desc));
1693 urb = malloc(alloc_size);
1695 free_iso_urbs(tpriv);
1696 return LIBUSB_ERROR_NO_MEM;
1698 memset(urb, 0, alloc_size);
1701 /* populate packet lengths */
1702 for (j = 0, k = packet_offset - urb_packet_offset;
1703 k < packet_offset; k++, j++) {
1704 packet_len = transfer->iso_packet_desc[k].length;
1705 urb->iso_frame_desc[j].length = packet_len;
1708 urb->usercontext = itransfer;
1709 urb->type = USBFS_URB_TYPE_ISO;
1710 /* FIXME: interface for non-ASAP data? */
1711 urb->flags = USBFS_URB_ISO_ASAP;
1712 urb->endpoint = transfer->endpoint;
1713 urb->number_of_packets = urb_packet_offset;
1714 urb->buffer = urb_buffer_orig;
1718 for (i = 0; i < num_urbs; i++) {
1719 int r = ioctl(dpriv->fd, IOCTL_USBFS_SUBMITURB, urbs[i]);
1721 if (errno == ENODEV) {
1722 r = LIBUSB_ERROR_NO_DEVICE;
1724 usbi_err(TRANSFER_CTX(transfer),
1725 "submiturb failed error %d errno=%d", r, errno);
1726 r = LIBUSB_ERROR_IO;
1729 /* if the first URB submission fails, we can simply free up and
1730 * return failure immediately. */
1732 usbi_dbg("first URB failed, easy peasy");
1733 free_iso_urbs(tpriv);
1737 /* if it's not the first URB that failed, the situation is a bit
1738 * tricky. we must discard all previous URBs. there are
1740 * - discarding is asynchronous - discarded urbs will be reaped
1741 * later. the user must not have freed the transfer when the
1742 * discarded URBs are reaped, otherwise libusb will be using
1744 * - the earlier URBs may have completed successfully and we do
1745 * not want to throw away any data.
1746 * so, in this case we discard all the previous URBs BUT we report
1747 * that the transfer was submitted successfully. then later when
1748 * the final discard completes we can report error to the user.
1750 tpriv->reap_action = SUBMIT_FAILED;
1752 /* The URBs we haven't submitted yet we count as already
1754 tpriv->num_retired = num_urbs - i;
1755 discard_urbs(itransfer, 0, i);
1757 usbi_dbg("reporting successful submission but waiting for %d "
1758 "discards before reporting error", i);
1766 static int submit_control_transfer(struct usbi_transfer *itransfer)
1768 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
1769 struct libusb_transfer *transfer =
1770 __USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
1771 struct linux_device_handle_priv *dpriv =
1772 __device_handle_priv(transfer->dev_handle);
1773 struct usbfs_urb *urb;
1777 return LIBUSB_ERROR_BUSY;
1779 if (transfer->length - LIBUSB_CONTROL_SETUP_SIZE > MAX_CTRL_BUFFER_LENGTH)
1780 return LIBUSB_ERROR_INVALID_PARAM;
1782 urb = malloc(sizeof(struct usbfs_urb));
1784 return LIBUSB_ERROR_NO_MEM;
1785 memset(urb, 0, sizeof(struct usbfs_urb));
1787 tpriv->num_urbs = 1;
1788 tpriv->reap_action = NORMAL;
1790 urb->usercontext = itransfer;
1791 urb->type = USBFS_URB_TYPE_CONTROL;
1792 urb->endpoint = transfer->endpoint;
1793 urb->buffer = transfer->buffer;
1794 urb->buffer_length = transfer->length;
1796 r = ioctl(dpriv->fd, IOCTL_USBFS_SUBMITURB, urb);
1800 if (errno == ENODEV)
1801 return LIBUSB_ERROR_NO_DEVICE;
1803 usbi_err(TRANSFER_CTX(transfer),
1804 "submiturb failed error %d errno=%d", r, errno);
1805 return LIBUSB_ERROR_IO;
1810 static int op_submit_transfer(struct usbi_transfer *itransfer)
1812 struct libusb_transfer *transfer =
1813 __USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
1815 switch (transfer->type) {
1816 case LIBUSB_TRANSFER_TYPE_CONTROL:
1817 return submit_control_transfer(itransfer);
1818 case LIBUSB_TRANSFER_TYPE_BULK:
1819 return submit_bulk_transfer(itransfer, USBFS_URB_TYPE_BULK);
1820 case LIBUSB_TRANSFER_TYPE_INTERRUPT:
1821 return submit_bulk_transfer(itransfer, USBFS_URB_TYPE_INTERRUPT);
1822 case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
1823 return submit_iso_transfer(itransfer);
1825 usbi_err(TRANSFER_CTX(transfer),
1826 "unknown endpoint type %d", transfer->type);
1827 return LIBUSB_ERROR_INVALID_PARAM;
1831 static int op_cancel_transfer(struct usbi_transfer *itransfer)
1833 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
1834 struct libusb_transfer *transfer =
1835 __USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
1837 switch (transfer->type) {
1838 case LIBUSB_TRANSFER_TYPE_BULK:
1839 if (tpriv->reap_action == ERROR)
1841 /* else, fall through */
1842 case LIBUSB_TRANSFER_TYPE_CONTROL:
1843 case LIBUSB_TRANSFER_TYPE_INTERRUPT:
1844 case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
1845 tpriv->reap_action = CANCELLED;
1848 usbi_err(TRANSFER_CTX(transfer),
1849 "unknown endpoint type %d", transfer->type);
1850 return LIBUSB_ERROR_INVALID_PARAM;
1854 return LIBUSB_ERROR_NOT_FOUND;
1856 return discard_urbs(itransfer, 0, tpriv->num_urbs);
1859 static void op_clear_transfer_priv(struct usbi_transfer *itransfer)
1861 struct libusb_transfer *transfer =
1862 __USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
1863 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
1865 switch (transfer->type) {
1866 case LIBUSB_TRANSFER_TYPE_CONTROL:
1867 case LIBUSB_TRANSFER_TYPE_BULK:
1868 case LIBUSB_TRANSFER_TYPE_INTERRUPT:
1872 case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
1873 free_iso_urbs(tpriv);
1876 usbi_err(TRANSFER_CTX(transfer),
1877 "unknown endpoint type %d", transfer->type);
1881 static int handle_bulk_completion(struct usbi_transfer *itransfer,
1882 struct usbfs_urb *urb)
1884 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
1885 struct libusb_transfer *transfer = __USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
1886 int urb_idx = urb - tpriv->urbs;
1888 usbi_mutex_lock(&itransfer->lock);
1889 usbi_dbg("handling completion status %d of bulk urb %d/%d", urb->status,
1890 urb_idx + 1, tpriv->num_urbs);
1892 tpriv->num_retired++;
1894 if (tpriv->reap_action != NORMAL) {
1895 /* cancelled, submit_fail, or completed early */
1896 usbi_dbg("abnormal reap: urb status %d", urb->status);
1898 /* even though we're in the process of cancelling, it's possible that
1899 * we may receive some data in these URBs that we don't want to lose.
1901 * 1. while the kernel is cancelling all the packets that make up an
1902 * URB, a few of them might complete. so we get back a successful
1903 * cancellation *and* some data.
1904 * 2. we receive a short URB which marks the early completion condition,
1905 * so we start cancelling the remaining URBs. however, we're too
1906 * slow and another URB completes (or at least completes partially).
1907 * (this can't happen since we always use BULK_CONTINUATION.)
1909 * When this happens, our objectives are not to lose any "surplus" data,
1910 * and also to stick it at the end of the previously-received data
1911 * (closing any holes), so that libusb reports the total amount of
1912 * transferred data and presents it in a contiguous chunk.
1914 if (urb->actual_length > 0) {
1915 unsigned char *target = transfer->buffer + itransfer->transferred;
1916 usbi_dbg("received %d bytes of surplus data", urb->actual_length);
1917 if (urb->buffer != target) {
1918 usbi_dbg("moving surplus data from offset %d to offset %d",
1919 (unsigned char *) urb->buffer - transfer->buffer,
1920 target - transfer->buffer);
1921 memmove(target, urb->buffer, urb->actual_length);
1923 itransfer->transferred += urb->actual_length;
1926 if (tpriv->num_retired == tpriv->num_urbs) {
1927 usbi_dbg("abnormal reap: last URB handled, reporting");
1928 if (tpriv->reap_action != COMPLETED_EARLY &&
1929 tpriv->reap_status == LIBUSB_TRANSFER_COMPLETED)
1930 tpriv->reap_status = LIBUSB_TRANSFER_ERROR;
1936 itransfer->transferred += urb->actual_length;
1938 /* Many of these errors can occur on *any* urb of a multi-urb
1939 * transfer. When they do, we tear down the rest of the transfer.
1941 switch (urb->status) {
1944 case -EREMOTEIO: /* short transfer */
1946 case -ENOENT: /* cancelled */
1950 usbi_dbg("device removed");
1951 tpriv->reap_status = LIBUSB_TRANSFER_NO_DEVICE;
1952 goto cancel_remaining;
1954 usbi_dbg("detected endpoint stall");
1955 if (tpriv->reap_status == LIBUSB_TRANSFER_COMPLETED)
1956 tpriv->reap_status = LIBUSB_TRANSFER_STALL;
1957 goto cancel_remaining;
1959 /* overflow can only ever occur in the last urb */
1960 usbi_dbg("overflow, actual_length=%d", urb->actual_length);
1961 if (tpriv->reap_status == LIBUSB_TRANSFER_COMPLETED)
1962 tpriv->reap_status = LIBUSB_TRANSFER_OVERFLOW;
1967 usbi_dbg("low level error %d", urb->status);
1968 tpriv->reap_action = ERROR;
1969 goto cancel_remaining;
1971 usbi_warn(ITRANSFER_CTX(itransfer),
1972 "unrecognised urb status %d", urb->status);
1973 tpriv->reap_action = ERROR;
1974 goto cancel_remaining;
1977 /* if we're the last urb or we got less data than requested then we're
1979 if (urb_idx == tpriv->num_urbs - 1) {
1980 usbi_dbg("last URB in transfer --> complete!");
1982 } else if (urb->actual_length < urb->buffer_length) {
1983 usbi_dbg("short transfer %d/%d --> complete!",
1984 urb->actual_length, urb->buffer_length);
1985 if (tpriv->reap_action == NORMAL)
1986 tpriv->reap_action = COMPLETED_EARLY;
1991 if (ERROR == tpriv->reap_action && LIBUSB_TRANSFER_COMPLETED == tpriv->reap_status)
1992 tpriv->reap_status = LIBUSB_TRANSFER_ERROR;
1994 if (tpriv->num_retired == tpriv->num_urbs) /* nothing to cancel */
1997 /* cancel remaining urbs and wait for their completion before
1998 * reporting results */
1999 discard_urbs(itransfer, urb_idx + 1, tpriv->num_urbs);
2002 usbi_mutex_unlock(&itransfer->lock);
2008 usbi_mutex_unlock(&itransfer->lock);
2009 return CANCELLED == tpriv->reap_action ?
2010 usbi_handle_transfer_cancellation(itransfer) :
2011 usbi_handle_transfer_completion(itransfer, tpriv->reap_status);
2014 static int handle_iso_completion(struct usbi_transfer *itransfer,
2015 struct usbfs_urb *urb)
2017 struct libusb_transfer *transfer =
2018 __USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
2019 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
2020 int num_urbs = tpriv->num_urbs;
2023 enum libusb_transfer_status status = LIBUSB_TRANSFER_COMPLETED;
2025 usbi_mutex_lock(&itransfer->lock);
2026 for (i = 0; i < num_urbs; i++) {
2027 if (urb == tpriv->iso_urbs[i]) {
2033 usbi_err(TRANSFER_CTX(transfer), "could not locate urb!");
2034 usbi_mutex_unlock(&itransfer->lock);
2035 return LIBUSB_ERROR_NOT_FOUND;
2038 usbi_dbg("handling completion status %d of iso urb %d/%d", urb->status,
2041 /* copy isochronous results back in */
2043 for (i = 0; i < urb->number_of_packets; i++) {
2044 struct usbfs_iso_packet_desc *urb_desc = &urb->iso_frame_desc[i];
2045 struct libusb_iso_packet_descriptor *lib_desc =
2046 &transfer->iso_packet_desc[tpriv->iso_packet_offset++];
2047 lib_desc->status = urb_desc->status;
2048 lib_desc->actual_length = urb_desc->actual_length;
2051 tpriv->num_retired++;
2053 if (tpriv->reap_action != NORMAL) { /* cancelled or submit_fail */
2054 usbi_dbg("CANCEL: urb status %d", urb->status);
2056 if (status == LIBUSB_TRANSFER_COMPLETED)
2057 status = LIBUSB_TRANSFER_ERROR;
2059 if (tpriv->num_retired == num_urbs) {
2060 usbi_dbg("CANCEL: last URB handled, reporting");
2061 free_iso_urbs(tpriv);
2062 if (tpriv->reap_action == CANCELLED) {
2063 usbi_mutex_unlock(&itransfer->lock);
2064 return usbi_handle_transfer_cancellation(itransfer);
2066 usbi_mutex_unlock(&itransfer->lock);
2067 return usbi_handle_transfer_completion(itransfer,
2068 LIBUSB_TRANSFER_ERROR);
2074 switch (urb->status) {
2077 case -ENOENT: /* cancelled */
2080 usbi_dbg("device removed");
2081 status = LIBUSB_TRANSFER_NO_DEVICE;
2086 usbi_dbg("low-level USB error %d", urb->status);
2089 usbi_warn(TRANSFER_CTX(transfer),
2090 "unrecognised urb status %d", urb->status);
2094 /* if we're the last urb or we got less data than requested then we're
2096 if (urb_idx == num_urbs) {
2097 usbi_dbg("last URB in transfer --> complete!");
2098 free_iso_urbs(tpriv);
2099 usbi_mutex_unlock(&itransfer->lock);
2100 return usbi_handle_transfer_completion(itransfer, status);
2104 usbi_mutex_unlock(&itransfer->lock);
2108 static int handle_control_completion(struct usbi_transfer *itransfer,
2109 struct usbfs_urb *urb)
2111 struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
2114 usbi_mutex_lock(&itransfer->lock);
2115 usbi_dbg("handling completion status %d", urb->status);
2117 itransfer->transferred += urb->actual_length;
2119 if (tpriv->reap_action == CANCELLED) {
2120 if (urb->status != 0 && urb->status != -ENOENT)
2121 usbi_warn(ITRANSFER_CTX(itransfer),
2122 "cancel: unrecognised urb status %d", urb->status);
2125 usbi_mutex_unlock(&itransfer->lock);
2126 return usbi_handle_transfer_cancellation(itransfer);
2129 switch (urb->status) {
2131 status = LIBUSB_TRANSFER_COMPLETED;
2133 case -ENOENT: /* cancelled */
2134 status = LIBUSB_TRANSFER_CANCELLED;
2137 usbi_dbg("device removed");
2138 status = LIBUSB_TRANSFER_NO_DEVICE;
2141 usbi_dbg("unsupported control request");
2142 status = LIBUSB_TRANSFER_STALL;
2147 usbi_dbg("low-level bus error occurred");
2148 status = LIBUSB_TRANSFER_ERROR;
2151 usbi_warn(ITRANSFER_CTX(itransfer),
2152 "unrecognised urb status %d", urb->status);
2153 status = LIBUSB_TRANSFER_ERROR;
2159 usbi_mutex_unlock(&itransfer->lock);
2160 return usbi_handle_transfer_completion(itransfer, status);
2163 static int reap_for_handle(struct libusb_device_handle *handle)
2165 struct linux_device_handle_priv *hpriv = __device_handle_priv(handle);
2167 struct usbfs_urb *urb;
2168 struct usbi_transfer *itransfer;
2169 struct libusb_transfer *transfer;
2171 r = ioctl(hpriv->fd, IOCTL_USBFS_REAPURBNDELAY, &urb);
2172 if (r == -1 && errno == EAGAIN)
2175 if (errno == ENODEV)
2176 return LIBUSB_ERROR_NO_DEVICE;
2178 usbi_err(HANDLE_CTX(handle), "reap failed error %d errno=%d",
2180 return LIBUSB_ERROR_IO;
2183 itransfer = urb->usercontext;
2184 transfer = __USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
2186 usbi_dbg("urb type=%d status=%d transferred=%d", urb->type, urb->status,
2187 urb->actual_length);
2189 switch (transfer->type) {
2190 case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
2191 return handle_iso_completion(itransfer, urb);
2192 case LIBUSB_TRANSFER_TYPE_BULK:
2193 case LIBUSB_TRANSFER_TYPE_INTERRUPT:
2194 return handle_bulk_completion(itransfer, urb);
2195 case LIBUSB_TRANSFER_TYPE_CONTROL:
2196 return handle_control_completion(itransfer, urb);
2198 usbi_err(HANDLE_CTX(handle), "unrecognised endpoint type %x",
2200 return LIBUSB_ERROR_OTHER;
2204 static int op_handle_events(struct libusb_context *ctx,
2205 struct pollfd *fds, POLL_NFDS_TYPE nfds, int num_ready)
2210 usbi_mutex_lock(&ctx->open_devs_lock);
2211 for (i = 0; i < nfds && num_ready > 0; i++) {
2212 struct pollfd *pollfd = &fds[i];
2213 struct libusb_device_handle *handle;
2214 struct linux_device_handle_priv *hpriv = NULL;
2216 if (!pollfd->revents)
2220 list_for_each_entry(handle, &ctx->open_devs, list, struct libusb_device_handle) {
2221 hpriv = __device_handle_priv(handle);
2222 if (hpriv->fd == pollfd->fd)
2226 if (pollfd->revents & POLLERR) {
2227 usbi_remove_pollfd(HANDLE_CTX(handle), hpriv->fd);
2228 usbi_handle_disconnect(handle);
2232 r = reap_for_handle(handle);
2233 if (r == 1 || r == LIBUSB_ERROR_NO_DEVICE)
2241 usbi_mutex_unlock(&ctx->open_devs_lock);
2245 static int op_clock_gettime(int clk_id, struct timespec *tp)
2248 case USBI_CLOCK_MONOTONIC:
2249 return clock_gettime(monotonic_clkid, tp);
2250 case USBI_CLOCK_REALTIME:
2251 return clock_gettime(CLOCK_REALTIME, tp);
2253 return LIBUSB_ERROR_INVALID_PARAM;
2257 #ifdef USBI_TIMERFD_AVAILABLE
2258 static clockid_t op_get_timerfd_clockid(void)
2260 return monotonic_clkid;
2265 const struct usbi_os_backend linux_usbfs_backend = {
2266 .name = "Linux usbfs",
2269 .get_device_list = op_get_device_list,
2270 .get_device_descriptor = op_get_device_descriptor,
2271 .get_active_config_descriptor = op_get_active_config_descriptor,
2272 .get_config_descriptor = op_get_config_descriptor,
2276 .get_configuration = op_get_configuration,
2277 .set_configuration = op_set_configuration,
2278 .claim_interface = op_claim_interface,
2279 .release_interface = op_release_interface,
2281 .set_interface_altsetting = op_set_interface,
2282 .clear_halt = op_clear_halt,
2283 .reset_device = op_reset_device,
2285 .kernel_driver_active = op_kernel_driver_active,
2286 .detach_kernel_driver = op_detach_kernel_driver,
2287 .attach_kernel_driver = op_attach_kernel_driver,
2289 .destroy_device = op_destroy_device,
2291 .submit_transfer = op_submit_transfer,
2292 .cancel_transfer = op_cancel_transfer,
2293 .clear_transfer_priv = op_clear_transfer_priv,
2295 .handle_events = op_handle_events,
2297 .clock_gettime = op_clock_gettime,
2299 #ifdef USBI_TIMERFD_AVAILABLE
2300 .get_timerfd_clockid = op_get_timerfd_clockid,
2303 .device_priv_size = sizeof(struct linux_device_priv),
2304 .device_handle_priv_size = sizeof(struct linux_device_handle_priv),
2305 .transfer_priv_size = sizeof(struct linux_transfer_priv),
2306 .add_iso_packet_size = 0,