Home | History | Annotate | Download | only in os
      1 /*
      2  * Linux usbfs backend for libusbx
      3  * Copyright  2007-2009 Daniel Drake <dsd (at) gentoo.org>
      4  * Copyright  2001 Johannes Erdfelt <johannes (at) erdfelt.com>
      5  * Copyright  2013 Nathan Hjelm <hjelmn (at) mac.com>
      6  * Copyright  2012-2013 Hans de Goede <hdegoede (at) redhat.com>
      7  *
      8  * This library is free software; you can redistribute it and/or
      9  * modify it under the terms of the GNU Lesser General Public
     10  * License as published by the Free Software Foundation; either
     11  * version 2.1 of the License, or (at your option) any later version.
     12  *
     13  * This library is distributed in the hope that it will be useful,
     14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     16  * Lesser General Public License for more details.
     17  *
     18  * You should have received a copy of the GNU Lesser General Public
     19  * License along with this library; if not, write to the Free Software
     20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
     21  */
     22 
     23 #include "config.h"
     24 
     25 #include <assert.h>
     26 #include <ctype.h>
     27 #include <dirent.h>
     28 #include <errno.h>
     29 #include <fcntl.h>
     30 #include <poll.h>
     31 #include <stdio.h>
     32 #include <stdlib.h>
     33 #include <string.h>
     34 #include <sys/ioctl.h>
     35 #include <sys/stat.h>
     36 #include <sys/types.h>
     37 #include <sys/utsname.h>
     38 #include <unistd.h>
     39 
     40 #include "libusb.h"
     41 #include "libusbi.h"
     42 #include "linux_usbfs.h"
     43 
     44 /* sysfs vs usbfs:
     45  * opening a usbfs node causes the device to be resumed, so we attempt to
     46  * avoid this during enumeration.
     47  *
     48  * sysfs allows us to read the kernel's in-memory copies of device descriptors
     49  * and so forth, avoiding the need to open the device:
     50  *  - The binary "descriptors" file contains all config descriptors since
     51  *    2.6.26, commit 217a9081d8e69026186067711131b77f0ce219ed
     52  *  - The binary "descriptors" file was added in 2.6.23, commit
     53  *    69d42a78f935d19384d1f6e4f94b65bb162b36df, but it only contains the
     54  *    active config descriptors
     55  *  - The "busnum" file was added in 2.6.22, commit
     56  *    83f7d958eab2fbc6b159ee92bf1493924e1d0f72
     57  *  - The "devnum" file has been present since pre-2.6.18
     58  *  - the "bConfigurationValue" file has been present since pre-2.6.18
     59  *
     60  * If we have bConfigurationValue, busnum, and devnum, then we can determine
     61  * the active configuration without having to open the usbfs node in RDWR mode.
     62  * The busnum file is important as that is the only way we can relate sysfs
     63  * devices to usbfs nodes.
     64  *
     65  * If we also have all descriptors, we can obtain the device descriptor and
     66  * configuration without touching usbfs at all.
     67  */
     68 
     69 /* endianness for multi-byte fields:
     70  *
     71  * Descriptors exposed by usbfs have the multi-byte fields in the device
     72  * descriptor as host endian. Multi-byte fields in the other descriptors are
     73  * bus-endian. The kernel documentation says otherwise, but it is wrong.
     74  *
     75  * In sysfs all descriptors are bus-endian.
     76  */
     77 
     78 static const char *usbfs_path = NULL;
     79 
     80 /* use usbdev*.* device names in /dev instead of the usbfs bus directories */
     81 static int usbdev_names = 0;
     82 
     83 /* Linux 2.6.32 adds support for a bulk continuation URB flag. this basically
     84  * allows us to mark URBs as being part of a specific logical transfer when
     85  * we submit them to the kernel. then, on any error except a cancellation, all
     86  * URBs within that transfer will be cancelled and no more URBs will be
     87  * accepted for the transfer, meaning that no more data can creep in.
     88  *
     89  * The BULK_CONTINUATION flag must be set on all URBs within a bulk transfer
     90  * (in either direction) except the first.
     91  * For IN transfers, we must also set SHORT_NOT_OK on all URBs except the
     92  * last; it means that the kernel should treat a short reply as an error.
     93  * For OUT transfers, SHORT_NOT_OK must not be set. it isn't needed (OUT
     94  * transfers can't be short unless there's already some sort of error), and
     95  * setting this flag is disallowed (a kernel with USB debugging enabled will
     96  * reject such URBs).
     97  */
     98 static int supports_flag_bulk_continuation = -1;
     99 
    100 /* Linux 2.6.31 fixes support for the zero length packet URB flag. This
    101  * allows us to mark URBs that should be followed by a zero length data
    102  * packet, which can be required by device- or class-specific protocols.
    103  */
    104 static int supports_flag_zero_packet = -1;
    105 
    106 /* clock ID for monotonic clock, as not all clock sources are available on all
    107  * systems. appropriate choice made at initialization time. */
    108 static clockid_t monotonic_clkid = -1;
    109 
    110 /* Linux 2.6.22 (commit 83f7d958eab2fbc6b159ee92bf1493924e1d0f72) adds a busnum
    111  * to sysfs, so we can relate devices. This also implies that we can read
    112  * the active configuration through bConfigurationValue */
    113 static int sysfs_can_relate_devices = -1;
    114 
    115 /* Linux 2.6.26 (commit 217a9081d8e69026186067711131b77f0ce219ed) adds all
    116  * config descriptors (rather then just the active config) to the sysfs
    117  * descriptors file, so from then on we can use them. */
    118 static int sysfs_has_descriptors = -1;
    119 
    120 /* how many times have we initted (and not exited) ? */
    121 static volatile int init_count = 0;
    122 
    123 /* Serialize hotplug start/stop, scan-devices, event-thread, and poll */
    124 usbi_mutex_static_t linux_hotplug_lock = USBI_MUTEX_INITIALIZER;
    125 
    126 static int linux_start_event_monitor(void);
    127 static int linux_stop_event_monitor(void);
    128 static int linux_scan_devices(struct libusb_context *ctx);
    129 static int sysfs_scan_device(struct libusb_context *ctx, const char *devname);
    130 static int detach_kernel_driver_and_claim(struct libusb_device_handle *, int);
    131 
    132 #if !defined(USE_UDEV)
    133 static int linux_default_scan_devices (struct libusb_context *ctx);
    134 #endif
    135 
    136 struct linux_device_priv {
    137 	char *sysfs_dir;
    138 	unsigned char *descriptors;
    139 	int descriptors_len;
    140 	int active_config; /* cache val for !sysfs_can_relate_devices  */
    141 };
    142 
    143 struct linux_device_handle_priv {
    144 	int fd;
    145 	uint32_t caps;
    146 };
    147 
    148 enum reap_action {
    149 	NORMAL = 0,
    150 	/* submission failed after the first URB, so await cancellation/completion
    151 	 * of all the others */
    152 	SUBMIT_FAILED,
    153 
    154 	/* cancelled by user or timeout */
    155 	CANCELLED,
    156 
    157 	/* completed multi-URB transfer in non-final URB */
    158 	COMPLETED_EARLY,
    159 
    160 	/* one or more urbs encountered a low-level error */
    161 	ERROR,
    162 };
    163 
    164 struct linux_transfer_priv {
    165 	union {
    166 		struct usbfs_urb *urbs;
    167 		struct usbfs_urb **iso_urbs;
    168 	};
    169 
    170 	enum reap_action reap_action;
    171 	int num_urbs;
    172 	int num_retired;
    173 	enum libusb_transfer_status reap_status;
    174 
    175 	/* next iso packet in user-supplied transfer to be populated */
    176 	int iso_packet_offset;
    177 };
    178 
    179 static int _get_usbfs_fd(struct libusb_device *dev, mode_t mode, int silent)
    180 {
    181 	struct libusb_context *ctx = DEVICE_CTX(dev);
    182 	char path[PATH_MAX];
    183 	int fd;
    184 
    185 	if (usbdev_names)
    186 		snprintf(path, PATH_MAX, "%s/usbdev%d.%d",
    187 			usbfs_path, dev->bus_number, dev->device_address);
    188 	else
    189 		snprintf(path, PATH_MAX, "%s/%03d/%03d",
    190 			usbfs_path, dev->bus_number, dev->device_address);
    191 
    192 	fd = open(path, mode);
    193 	if (fd != -1)
    194 		return fd; /* Success */
    195 
    196 	if (!silent) {
    197 		usbi_err(ctx, "libusbx couldn't open USB device %s: %s",
    198 			 path, strerror(errno));
    199 		if (errno == EACCES && mode == O_RDWR)
    200 			usbi_err(ctx, "libusbx requires write access to USB "
    201 				      "device nodes.");
    202 	}
    203 
    204 	if (errno == EACCES)
    205 		return LIBUSB_ERROR_ACCESS;
    206 	if (errno == ENOENT)
    207 		return LIBUSB_ERROR_NO_DEVICE;
    208 	return LIBUSB_ERROR_IO;
    209 }
    210 
    211 static struct linux_device_priv *_device_priv(struct libusb_device *dev)
    212 {
    213 	return (struct linux_device_priv *) dev->os_priv;
    214 }
    215 
    216 static struct linux_device_handle_priv *_device_handle_priv(
    217 	struct libusb_device_handle *handle)
    218 {
    219 	return (struct linux_device_handle_priv *) handle->os_priv;
    220 }
    221 
    222 /* check dirent for a /dev/usbdev%d.%d name
    223  * optionally return bus/device on success */
    224 static int _is_usbdev_entry(struct dirent *entry, int *bus_p, int *dev_p)
    225 {
    226 	int busnum, devnum;
    227 
    228 	if (sscanf(entry->d_name, "usbdev%d.%d", &busnum, &devnum) != 2)
    229 		return 0;
    230 
    231 	usbi_dbg("found: %s", entry->d_name);
    232 	if (bus_p != NULL)
    233 		*bus_p = busnum;
    234 	if (dev_p != NULL)
    235 		*dev_p = devnum;
    236 	return 1;
    237 }
    238 
    239 static int check_usb_vfs(const char *dirname)
    240 {
    241 	DIR *dir;
    242 	struct dirent *entry;
    243 	int found = 0;
    244 
    245 	dir = opendir(dirname);
    246 	if (!dir)
    247 		return 0;
    248 
    249 	while ((entry = readdir(dir)) != NULL) {
    250 		if (entry->d_name[0] == '.')
    251 			continue;
    252 
    253 		/* We assume if we find any files that it must be the right place */
    254 		found = 1;
    255 		break;
    256 	}
    257 
    258 	closedir(dir);
    259 	return found;
    260 }
    261 
    262 static const char *find_usbfs_path(void)
    263 {
    264 	const char *path = "/dev/bus/usb";
    265 	const char *ret = NULL;
    266 
    267 	if (check_usb_vfs(path)) {
    268 		ret = path;
    269 	} else {
    270 		path = "/proc/bus/usb";
    271 		if (check_usb_vfs(path))
    272 			ret = path;
    273 	}
    274 
    275 	/* look for /dev/usbdev*.* if the normal places fail */
    276 	if (ret == NULL) {
    277 		struct dirent *entry;
    278 		DIR *dir;
    279 
    280 		path = "/dev";
    281 		dir = opendir(path);
    282 		if (dir != NULL) {
    283 			while ((entry = readdir(dir)) != NULL) {
    284 				if (_is_usbdev_entry(entry, NULL, NULL)) {
    285 					/* found one; that's enough */
    286 					ret = path;
    287 					usbdev_names = 1;
    288 					break;
    289 				}
    290 			}
    291 			closedir(dir);
    292 		}
    293 	}
    294 
    295 	if (ret != NULL)
    296 		usbi_dbg("found usbfs at %s", ret);
    297 
    298 	return ret;
    299 }
    300 
    301 /* the monotonic clock is not usable on all systems (e.g. embedded ones often
    302  * seem to lack it). fall back to REALTIME if we have to. */
    303 static clockid_t find_monotonic_clock(void)
    304 {
    305 #ifdef CLOCK_MONOTONIC
    306 	struct timespec ts;
    307 	int r;
    308 
    309 	/* Linux 2.6.28 adds CLOCK_MONOTONIC_RAW but we don't use it
    310 	 * because it's not available through timerfd */
    311 	r = clock_gettime(CLOCK_MONOTONIC, &ts);
    312 	if (r == 0)
    313 		return CLOCK_MONOTONIC;
    314 	usbi_dbg("monotonic clock doesn't work, errno %d", errno);
    315 #endif
    316 
    317 	return CLOCK_REALTIME;
    318 }
    319 
    320 static int kernel_version_ge(int major, int minor, int sublevel)
    321 {
    322 	struct utsname uts;
    323 	int atoms, kmajor, kminor, ksublevel;
    324 
    325 	if (uname(&uts) < 0)
    326 		return -1;
    327 	atoms = sscanf(uts.release, "%d.%d.%d", &kmajor, &kminor, &ksublevel);
    328 	if (atoms < 1)
    329 		return -1;
    330 
    331 	if (kmajor > major)
    332 		return 1;
    333 	if (kmajor < major)
    334 		return 0;
    335 
    336 	/* kmajor == major */
    337 	if (atoms < 2)
    338 		return 0 == minor && 0 == sublevel;
    339 	if (kminor > minor)
    340 		return 1;
    341 	if (kminor < minor)
    342 		return 0;
    343 
    344 	/* kminor == minor */
    345 	if (atoms < 3)
    346 		return 0 == sublevel;
    347 
    348 	return ksublevel >= sublevel;
    349 }
    350 
    351 static int op_init(struct libusb_context *ctx)
    352 {
    353 	struct stat statbuf;
    354 	int r;
    355 
    356 	usbfs_path = find_usbfs_path();
    357 	if (!usbfs_path) {
    358 		usbi_err(ctx, "could not find usbfs");
    359 		return LIBUSB_ERROR_OTHER;
    360 	}
    361 
    362 	if (monotonic_clkid == -1)
    363 		monotonic_clkid = find_monotonic_clock();
    364 
    365 	if (supports_flag_bulk_continuation == -1) {
    366 		/* bulk continuation URB flag available from Linux 2.6.32 */
    367 		supports_flag_bulk_continuation = kernel_version_ge(2,6,32);
    368 		if (supports_flag_bulk_continuation == -1) {
    369 			usbi_err(ctx, "error checking for bulk continuation support");
    370 			return LIBUSB_ERROR_OTHER;
    371 		}
    372 	}
    373 
    374 	if (supports_flag_bulk_continuation)
    375 		usbi_dbg("bulk continuation flag supported");
    376 
    377 	if (-1 == supports_flag_zero_packet) {
    378 		/* zero length packet URB flag fixed since Linux 2.6.31 */
    379 		supports_flag_zero_packet = kernel_version_ge(2,6,31);
    380 		if (-1 == supports_flag_zero_packet) {
    381 			usbi_err(ctx, "error checking for zero length packet support");
    382 			return LIBUSB_ERROR_OTHER;
    383 		}
    384 	}
    385 
    386 	if (supports_flag_zero_packet)
    387 		usbi_dbg("zero length packet flag supported");
    388 
    389 	if (-1 == sysfs_has_descriptors) {
    390 		/* sysfs descriptors has all descriptors since Linux 2.6.26 */
    391 		sysfs_has_descriptors = kernel_version_ge(2,6,26);
    392 		if (-1 == sysfs_has_descriptors) {
    393 			usbi_err(ctx, "error checking for sysfs descriptors");
    394 			return LIBUSB_ERROR_OTHER;
    395 		}
    396 	}
    397 
    398 	if (-1 == sysfs_can_relate_devices) {
    399 		/* sysfs has busnum since Linux 2.6.22 */
    400 		sysfs_can_relate_devices = kernel_version_ge(2,6,22);
    401 		if (-1 == sysfs_can_relate_devices) {
    402 			usbi_err(ctx, "error checking for sysfs busnum");
    403 			return LIBUSB_ERROR_OTHER;
    404 		}
    405 	}
    406 
    407 	if (sysfs_can_relate_devices || sysfs_has_descriptors) {
    408 		r = stat(SYSFS_DEVICE_PATH, &statbuf);
    409 		if (r != 0 || !S_ISDIR(statbuf.st_mode)) {
    410 			usbi_warn(ctx, "sysfs not mounted");
    411 			sysfs_can_relate_devices = 0;
    412 			sysfs_has_descriptors = 0;
    413 		}
    414 	}
    415 
    416 	if (sysfs_can_relate_devices)
    417 		usbi_dbg("sysfs can relate devices");
    418 
    419 	if (sysfs_has_descriptors)
    420 		usbi_dbg("sysfs has complete descriptors");
    421 
    422 	usbi_mutex_static_lock(&linux_hotplug_lock);
    423 	r = LIBUSB_SUCCESS;
    424 	if (init_count == 0) {
    425 		/* start up hotplug event handler */
    426 		r = linux_start_event_monitor();
    427 	}
    428 	if (r == LIBUSB_SUCCESS) {
    429 		r = linux_scan_devices(ctx);
    430 		if (r == LIBUSB_SUCCESS)
    431 			init_count++;
    432 		else if (init_count == 0)
    433 			linux_stop_event_monitor();
    434 	} else
    435 		usbi_err(ctx, "error starting hotplug event monitor");
    436 	usbi_mutex_static_unlock(&linux_hotplug_lock);
    437 
    438 	return r;
    439 }
    440 
    441 static void op_exit(void)
    442 {
    443 	usbi_mutex_static_lock(&linux_hotplug_lock);
    444 	assert(init_count != 0);
    445 	if (!--init_count) {
    446 		/* tear down event handler */
    447 		(void)linux_stop_event_monitor();
    448 	}
    449 	usbi_mutex_static_unlock(&linux_hotplug_lock);
    450 }
    451 
    452 static int linux_start_event_monitor(void)
    453 {
    454 #if defined(USE_UDEV)
    455 	return linux_udev_start_event_monitor();
    456 #else
    457 	return linux_netlink_start_event_monitor();
    458 #endif
    459 }
    460 
    461 static int linux_stop_event_monitor(void)
    462 {
    463 #if defined(USE_UDEV)
    464 	return linux_udev_stop_event_monitor();
    465 #else
    466 	return linux_netlink_stop_event_monitor();
    467 #endif
    468 }
    469 
    470 static int linux_scan_devices(struct libusb_context *ctx)
    471 {
    472 #if defined(USE_UDEV)
    473 	return linux_udev_scan_devices(ctx);
    474 #else
    475 	return linux_default_scan_devices(ctx);
    476 #endif
    477 }
    478 
    479 static void op_hotplug_poll(void)
    480 {
    481 #if defined(USE_UDEV)
    482 	linux_udev_hotplug_poll();
    483 #else
    484 	linux_netlink_hotplug_poll();
    485 #endif
    486 }
    487 
    488 static int _open_sysfs_attr(struct libusb_device *dev, const char *attr)
    489 {
    490 	struct linux_device_priv *priv = _device_priv(dev);
    491 	char filename[PATH_MAX];
    492 	int fd;
    493 
    494 	snprintf(filename, PATH_MAX, "%s/%s/%s",
    495 		SYSFS_DEVICE_PATH, priv->sysfs_dir, attr);
    496 	fd = open(filename, O_RDONLY);
    497 	if (fd < 0) {
    498 		usbi_err(DEVICE_CTX(dev),
    499 			"open %s failed ret=%d errno=%d", filename, fd, errno);
    500 		return LIBUSB_ERROR_IO;
    501 	}
    502 
    503 	return fd;
    504 }
    505 
    506 /* Note only suitable for attributes which always read >= 0, < 0 is error */
    507 static int __read_sysfs_attr(struct libusb_context *ctx,
    508 	const char *devname, const char *attr)
    509 {
    510 	char filename[PATH_MAX];
    511 	FILE *f;
    512 	int r, value;
    513 
    514 	snprintf(filename, PATH_MAX, "%s/%s/%s", SYSFS_DEVICE_PATH,
    515 		 devname, attr);
    516 	f = fopen(filename, "r");
    517 	if (f == NULL) {
    518 		if (errno == ENOENT) {
    519 			/* File doesn't exist. Assume the device has been
    520 			   disconnected (see trac ticket #70). */
    521 			return LIBUSB_ERROR_NO_DEVICE;
    522 		}
    523 		usbi_err(ctx, "open %s failed errno=%d", filename, errno);
    524 		return LIBUSB_ERROR_IO;
    525 	}
    526 
    527 	r = fscanf(f, "%d", &value);
    528 	fclose(f);
    529 	if (r != 1) {
    530 		usbi_err(ctx, "fscanf %s returned %d, errno=%d", attr, r, errno);
    531 		return LIBUSB_ERROR_NO_DEVICE; /* For unplug race (trac #70) */
    532 	}
    533 	if (value < 0) {
    534 		usbi_err(ctx, "%s contains a negative value", filename);
    535 		return LIBUSB_ERROR_IO;
    536 	}
    537 
    538 	return value;
    539 }
    540 
    541 static int op_get_device_descriptor(struct libusb_device *dev,
    542 	unsigned char *buffer, int *host_endian)
    543 {
    544 	struct linux_device_priv *priv = _device_priv(dev);
    545 
    546 	*host_endian = sysfs_has_descriptors ? 0 : 1;
    547 	memcpy(buffer, priv->descriptors, DEVICE_DESC_LENGTH);
    548 
    549 	return 0;
    550 }
    551 
    552 /* read the bConfigurationValue for a device */
    553 static int sysfs_get_active_config(struct libusb_device *dev, int *config)
    554 {
    555 	char *endptr;
    556 	char tmp[4] = {0, 0, 0, 0};
    557 	long num;
    558 	int fd;
    559 	ssize_t r;
    560 
    561 	fd = _open_sysfs_attr(dev, "bConfigurationValue");
    562 	if (fd < 0)
    563 		return fd;
    564 
    565 	r = read(fd, tmp, sizeof(tmp));
    566 	close(fd);
    567 	if (r < 0) {
    568 		usbi_err(DEVICE_CTX(dev),
    569 			"read bConfigurationValue failed ret=%d errno=%d", r, errno);
    570 		return LIBUSB_ERROR_IO;
    571 	} else if (r == 0) {
    572 		usbi_dbg("device unconfigured");
    573 		*config = -1;
    574 		return 0;
    575 	}
    576 
    577 	if (tmp[sizeof(tmp) - 1] != 0) {
    578 		usbi_err(DEVICE_CTX(dev), "not null-terminated?");
    579 		return LIBUSB_ERROR_IO;
    580 	} else if (tmp[0] == 0) {
    581 		usbi_err(DEVICE_CTX(dev), "no configuration value?");
    582 		return LIBUSB_ERROR_IO;
    583 	}
    584 
    585 	num = strtol(tmp, &endptr, 10);
    586 	if (endptr == tmp) {
    587 		usbi_err(DEVICE_CTX(dev), "error converting '%s' to integer", tmp);
    588 		return LIBUSB_ERROR_IO;
    589 	}
    590 
    591 	*config = (int) num;
    592 	return 0;
    593 }
    594 
    595 int linux_get_device_address (struct libusb_context *ctx, int detached,
    596 	uint8_t *busnum, uint8_t *devaddr,const char *dev_node,
    597 	const char *sys_name)
    598 {
    599 	usbi_dbg("getting address for device: %s detached: %d", sys_name, detached);
    600 	/* can't use sysfs to read the bus and device number if the
    601 	 * device has been detached */
    602 	if (!sysfs_can_relate_devices || detached || NULL == sys_name) {
    603 		if (NULL == dev_node) {
    604 			return LIBUSB_ERROR_OTHER;
    605 		}
    606 
    607 		/* will this work with all supported kernel versions? */
    608 		if (!strncmp(dev_node, "/dev/bus/usb", 12)) {
    609 			sscanf (dev_node, "/dev/bus/usb/%hhd/%hhd", busnum, devaddr);
    610 		} else if (!strncmp(dev_node, "/proc/bus/usb", 13)) {
    611 			sscanf (dev_node, "/proc/bus/usb/%hhd/%hhd", busnum, devaddr);
    612 		}
    613 
    614 		return LIBUSB_SUCCESS;
    615 	}
    616 
    617 	usbi_dbg("scan %s", sys_name);
    618 
    619 	*busnum = __read_sysfs_attr(ctx, sys_name, "busnum");
    620 	if (0 > *busnum)
    621 		return *busnum;
    622 
    623 	*devaddr = __read_sysfs_attr(ctx, sys_name, "devnum");
    624 	if (0 > *devaddr)
    625 		return *devaddr;
    626 
    627 	usbi_dbg("bus=%d dev=%d", *busnum, *devaddr);
    628 	if (*busnum > 255 || *devaddr > 255)
    629 		return LIBUSB_ERROR_INVALID_PARAM;
    630 
    631 	return LIBUSB_SUCCESS;
    632 }
    633 
    634 /* Return offset of the next descriptor with the given type */
    635 static int seek_to_next_descriptor(struct libusb_context *ctx,
    636 	uint8_t descriptor_type, unsigned char *buffer, int size)
    637 {
    638 	struct usb_descriptor_header header;
    639 	int i;
    640 
    641 	for (i = 0; size >= 0; i += header.bLength, size -= header.bLength) {
    642 		if (size == 0)
    643 			return LIBUSB_ERROR_NOT_FOUND;
    644 
    645 		if (size < 2) {
    646 			usbi_err(ctx, "short descriptor read %d/2", size);
    647 			return LIBUSB_ERROR_IO;
    648 		}
    649 		usbi_parse_descriptor(buffer + i, "bb", &header, 0);
    650 
    651 		if (i && header.bDescriptorType == descriptor_type)
    652 			return i;
    653 	}
    654 	usbi_err(ctx, "bLength overflow by %d bytes", -size);
    655 	return LIBUSB_ERROR_IO;
    656 }
    657 
    658 /* Return offset to next config */
    659 static int seek_to_next_config(struct libusb_context *ctx,
    660 	unsigned char *buffer, int size)
    661 {
    662 	struct libusb_config_descriptor config;
    663 
    664 	if (size == 0)
    665 		return LIBUSB_ERROR_NOT_FOUND;
    666 
    667 	if (size < LIBUSB_DT_CONFIG_SIZE) {
    668 		usbi_err(ctx, "short descriptor read %d/%d",
    669 			 size, LIBUSB_DT_CONFIG_SIZE);
    670 		return LIBUSB_ERROR_IO;
    671 	}
    672 
    673 	usbi_parse_descriptor(buffer, "bbwbbbbb", &config, 0);
    674 	if (config.bDescriptorType != LIBUSB_DT_CONFIG) {
    675 		usbi_err(ctx, "descriptor is not a config desc (type 0x%02x)",
    676 			 config.bDescriptorType);
    677 		return LIBUSB_ERROR_IO;
    678 	}
    679 
    680 	/*
    681 	 * In usbfs the config descriptors are config.wTotalLength bytes apart,
    682 	 * with any short reads from the device appearing as holes in the file.
    683 	 *
    684 	 * In sysfs wTotalLength is ignored, instead the kernel returns a
    685 	 * config descriptor with verified bLength fields, with descriptors
    686 	 * with an invalid bLength removed.
    687 	 */
    688 	if (sysfs_has_descriptors) {
    689 		int next = seek_to_next_descriptor(ctx, LIBUSB_DT_CONFIG,
    690 						   buffer, size);
    691 		if (next == LIBUSB_ERROR_NOT_FOUND)
    692 			next = size;
    693 		if (next < 0)
    694 			return next;
    695 
    696 		if (next != config.wTotalLength)
    697 			usbi_warn(ctx, "config length mismatch wTotalLength "
    698 				  "%d real %d", config.wTotalLength, next);
    699 		return next;
    700 	} else {
    701 		if (config.wTotalLength < LIBUSB_DT_CONFIG_SIZE) {
    702 			usbi_err(ctx, "invalid wTotalLength %d",
    703 				 config.wTotalLength);
    704 			return LIBUSB_ERROR_IO;
    705 		} else if (config.wTotalLength > size) {
    706 			usbi_warn(ctx, "short descriptor read %d/%d",
    707 				  size, config.wTotalLength);
    708 			return size;
    709 		} else
    710 			return config.wTotalLength;
    711 	}
    712 }
    713 
    714 static int op_get_config_descriptor_by_value(struct libusb_device *dev,
    715 	uint8_t value, unsigned char **buffer, int *host_endian)
    716 {
    717 	struct libusb_context *ctx = DEVICE_CTX(dev);
    718 	struct linux_device_priv *priv = _device_priv(dev);
    719 	unsigned char *descriptors = priv->descriptors;
    720 	int size = priv->descriptors_len;
    721 	struct libusb_config_descriptor *config;
    722 
    723 	*buffer = NULL;
    724 	/* Unlike the device desc. config descs. are always in raw format */
    725 	*host_endian = 0;
    726 
    727 	/* Skip device header */
    728 	descriptors += DEVICE_DESC_LENGTH;
    729 	size -= DEVICE_DESC_LENGTH;
    730 
    731 	/* Seek till the config is found, or till "EOF" */
    732 	while (1) {
    733 		int next = seek_to_next_config(ctx, descriptors, size);
    734 		if (next < 0)
    735 			return next;
    736 		config = (struct libusb_config_descriptor *)descriptors;
    737 		if (config->bConfigurationValue == value) {
    738 			*buffer = descriptors;
    739 			return next;
    740 		}
    741 		size -= next;
    742 		descriptors += next;
    743 	}
    744 }
    745 
    746 static int op_get_active_config_descriptor(struct libusb_device *dev,
    747 	unsigned char *buffer, size_t len, int *host_endian)
    748 {
    749 	int r, config;
    750 	unsigned char *config_desc;
    751 
    752 	if (sysfs_can_relate_devices) {
    753 		r = sysfs_get_active_config(dev, &config);
    754 		if (r < 0)
    755 			return r;
    756 	} else {
    757 		/* Use cached bConfigurationValue */
    758 		struct linux_device_priv *priv = _device_priv(dev);
    759 		config = priv->active_config;
    760 	}
    761 	if (config == -1)
    762 		return LIBUSB_ERROR_NOT_FOUND;
    763 
    764 	r = op_get_config_descriptor_by_value(dev, config, &config_desc,
    765 					      host_endian);
    766 	if (r < 0)
    767 		return r;
    768 
    769 	len = MIN(len, r);
    770 	memcpy(buffer, config_desc, len);
    771 	return len;
    772 }
    773 
    774 static int op_get_config_descriptor(struct libusb_device *dev,
    775 	uint8_t config_index, unsigned char *buffer, size_t len, int *host_endian)
    776 {
    777 	struct linux_device_priv *priv = _device_priv(dev);
    778 	unsigned char *descriptors = priv->descriptors;
    779 	int i, r, size = priv->descriptors_len;
    780 
    781 	/* Unlike the device desc. config descs. are always in raw format */
    782 	*host_endian = 0;
    783 
    784 	/* Skip device header */
    785 	descriptors += DEVICE_DESC_LENGTH;
    786 	size -= DEVICE_DESC_LENGTH;
    787 
    788 	/* Seek till the config is found, or till "EOF" */
    789 	for (i = 0; ; i++) {
    790 		r = seek_to_next_config(DEVICE_CTX(dev), descriptors, size);
    791 		if (r < 0)
    792 			return r;
    793 		if (i == config_index)
    794 			break;
    795 		size -= r;
    796 		descriptors += r;
    797 	}
    798 
    799 	len = MIN(len, r);
    800 	memcpy(buffer, descriptors, len);
    801 	return len;
    802 }
    803 
    804 /* send a control message to retrieve active configuration */
    805 static int usbfs_get_active_config(struct libusb_device *dev, int fd)
    806 {
    807 	unsigned char active_config = 0;
    808 	int r;
    809 
    810 	struct usbfs_ctrltransfer ctrl = {
    811 		.bmRequestType = LIBUSB_ENDPOINT_IN,
    812 		.bRequest = LIBUSB_REQUEST_GET_CONFIGURATION,
    813 		.wValue = 0,
    814 		.wIndex = 0,
    815 		.wLength = 1,
    816 		.timeout = 1000,
    817 		.data = &active_config
    818 	};
    819 
    820 	r = ioctl(fd, IOCTL_USBFS_CONTROL, &ctrl);
    821 	if (r < 0) {
    822 		if (errno == ENODEV)
    823 			return LIBUSB_ERROR_NO_DEVICE;
    824 
    825 		/* we hit this error path frequently with buggy devices :( */
    826 		usbi_warn(DEVICE_CTX(dev),
    827 			"get_configuration failed ret=%d errno=%d", r, errno);
    828 		return LIBUSB_ERROR_IO;
    829 	}
    830 
    831 	return active_config;
    832 }
    833 
    834 static int initialize_device(struct libusb_device *dev, uint8_t busnum,
    835 	uint8_t devaddr, const char *sysfs_dir)
    836 {
    837 	struct linux_device_priv *priv = _device_priv(dev);
    838 	struct libusb_context *ctx = DEVICE_CTX(dev);
    839 	int descriptors_size = 512; /* Begin with a 1024 byte alloc */
    840 	int fd, speed;
    841 	ssize_t r;
    842 
    843 	dev->bus_number = busnum;
    844 	dev->device_address = devaddr;
    845 
    846 	if (sysfs_dir) {
    847 		priv->sysfs_dir = malloc(strlen(sysfs_dir) + 1);
    848 		if (!priv->sysfs_dir)
    849 			return LIBUSB_ERROR_NO_MEM;
    850 		strcpy(priv->sysfs_dir, sysfs_dir);
    851 
    852 		/* Note speed can contain 1.5, in this case __read_sysfs_attr
    853 		   will stop parsing at the '.' and return 1 */
    854 		speed = __read_sysfs_attr(DEVICE_CTX(dev), sysfs_dir, "speed");
    855 		if (speed >= 0) {
    856 			switch (speed) {
    857 			case     1: dev->speed = LIBUSB_SPEED_LOW; break;
    858 			case    12: dev->speed = LIBUSB_SPEED_FULL; break;
    859 			case   480: dev->speed = LIBUSB_SPEED_HIGH; break;
    860 			case  5000: dev->speed = LIBUSB_SPEED_SUPER; break;
    861 			default:
    862 				usbi_warn(DEVICE_CTX(dev), "Unknown device speed: %d Mbps", speed);
    863 			}
    864 		}
    865 	}
    866 
    867 	/* cache descriptors in memory */
    868 	if (sysfs_has_descriptors)
    869 		fd = _open_sysfs_attr(dev, "descriptors");
    870 	else
    871 		fd = _get_usbfs_fd(dev, O_RDONLY, 0);
    872 	if (fd < 0)
    873 		return fd;
    874 
    875 	do {
    876 		descriptors_size *= 2;
    877 		priv->descriptors = usbi_reallocf(priv->descriptors,
    878 						  descriptors_size);
    879 		if (!priv->descriptors) {
    880 			close(fd);
    881 			return LIBUSB_ERROR_NO_MEM;
    882 		}
    883 		/* usbfs has holes in the file */
    884 		if (!sysfs_has_descriptors) {
    885 			memset(priv->descriptors + priv->descriptors_len,
    886 			       0, descriptors_size - priv->descriptors_len);
    887 		}
    888 		r = read(fd, priv->descriptors + priv->descriptors_len,
    889 			 descriptors_size - priv->descriptors_len);
    890 		if (r < 0) {
    891 			usbi_err(ctx, "read descriptor failed ret=%d errno=%d",
    892 				 fd, errno);
    893 			close(fd);
    894 			return LIBUSB_ERROR_IO;
    895 		}
    896 		priv->descriptors_len += r;
    897 	} while (priv->descriptors_len == descriptors_size);
    898 
    899 	close(fd);
    900 
    901 	if (priv->descriptors_len < DEVICE_DESC_LENGTH) {
    902 		usbi_err(ctx, "short descriptor read (%d)",
    903 			 priv->descriptors_len);
    904 		return LIBUSB_ERROR_IO;
    905 	}
    906 
    907 	if (sysfs_can_relate_devices)
    908 		return LIBUSB_SUCCESS;
    909 
    910 	/* cache active config */
    911 	fd = _get_usbfs_fd(dev, O_RDWR, 1);
    912 	if (fd < 0) {
    913 		/* cannot send a control message to determine the active
    914 		 * config. just assume the first one is active. */
    915 		usbi_warn(ctx, "Missing rw usbfs access; cannot determine "
    916 			       "active configuration descriptor");
    917 		if (priv->descriptors_len >=
    918 				(DEVICE_DESC_LENGTH + LIBUSB_DT_CONFIG_SIZE)) {
    919 			struct libusb_config_descriptor config;
    920 			usbi_parse_descriptor(
    921 				priv->descriptors + DEVICE_DESC_LENGTH,
    922 				"bbwbbbbb", &config, 0);
    923 			priv->active_config = config.bConfigurationValue;
    924 		} else
    925 			priv->active_config = -1; /* No config dt */
    926 
    927 		return LIBUSB_SUCCESS;
    928 	}
    929 
    930 	r = usbfs_get_active_config(dev, fd);
    931 	if (r > 0) {
    932 		priv->active_config = r;
    933 		r = LIBUSB_SUCCESS;
    934 	} else if (r == 0) {
    935 		/* some buggy devices have a configuration 0, but we're
    936 		 * reaching into the corner of a corner case here, so let's
    937 		 * not support buggy devices in these circumstances.
    938 		 * stick to the specs: a configuration value of 0 means
    939 		 * unconfigured. */
    940 		usbi_dbg("active cfg 0? assuming unconfigured device");
    941 		priv->active_config = -1;
    942 		r = LIBUSB_SUCCESS;
    943 	} else if (r == LIBUSB_ERROR_IO) {
    944 		/* buggy devices sometimes fail to report their active config.
    945 		 * assume unconfigured and continue the probing */
    946 		usbi_warn(ctx, "couldn't query active configuration, assuming"
    947 			       " unconfigured");
    948 		priv->active_config = -1;
    949 		r = LIBUSB_SUCCESS;
    950 	} /* else r < 0, just return the error code */
    951 
    952 	close(fd);
    953 	return r;
    954 }
    955 
    956 static int linux_get_parent_info(struct libusb_device *dev, const char *sysfs_dir)
    957 {
    958 	struct libusb_context *ctx = DEVICE_CTX(dev);
    959 	struct libusb_device *it;
    960 	char *parent_sysfs_dir, *tmp;
    961 	int ret, add_parent = 1;
    962 
    963 	/* XXX -- can we figure out the topology when using usbfs? */
    964 	if (NULL == sysfs_dir || 0 == strncmp(sysfs_dir, "usb", 3)) {
    965 		/* either using usbfs or finding the parent of a root hub */
    966 		return LIBUSB_SUCCESS;
    967 	}
    968 
    969 	parent_sysfs_dir = strdup(sysfs_dir);
    970 	if (NULL != (tmp = strrchr(parent_sysfs_dir, '.')) ||
    971 	    NULL != (tmp = strrchr(parent_sysfs_dir, '-'))) {
    972 	        dev->port_number = atoi(tmp + 1);
    973 		*tmp = '\0';
    974 	} else {
    975 		usbi_warn(ctx, "Can not parse sysfs_dir: %s, no parent info",
    976 			  parent_sysfs_dir);
    977 		free (parent_sysfs_dir);
    978 		return LIBUSB_SUCCESS;
    979 	}
    980 
    981 	/* is the parent a root hub? */
    982 	if (NULL == strchr(parent_sysfs_dir, '-')) {
    983 		tmp = parent_sysfs_dir;
    984 		ret = asprintf (&parent_sysfs_dir, "usb%s", tmp);
    985 		free (tmp);
    986 		if (0 > ret) {
    987 			return LIBUSB_ERROR_NO_MEM;
    988 		}
    989 	}
    990 
    991 retry:
    992 	/* find the parent in the context */
    993 	usbi_mutex_lock(&ctx->usb_devs_lock);
    994 	list_for_each_entry(it, &ctx->usb_devs, list, struct libusb_device) {
    995 		struct linux_device_priv *priv = _device_priv(it);
    996 		if (0 == strcmp (priv->sysfs_dir, parent_sysfs_dir)) {
    997 			dev->parent_dev = libusb_ref_device(it);
    998 			break;
    999 		}
   1000 	}
   1001 	usbi_mutex_unlock(&ctx->usb_devs_lock);
   1002 
   1003 	if (!dev->parent_dev && add_parent) {
   1004 		usbi_dbg("parent_dev %s not enumerated yet, enumerating now",
   1005 			 parent_sysfs_dir);
   1006 		sysfs_scan_device(ctx, parent_sysfs_dir);
   1007 		add_parent = 0;
   1008 		goto retry;
   1009 	}
   1010 
   1011 	usbi_dbg("Dev %p (%s) has parent %p (%s) port %d", dev, sysfs_dir,
   1012 		 dev->parent_dev, parent_sysfs_dir, dev->port_number);
   1013 
   1014 	free (parent_sysfs_dir);
   1015 
   1016 	return LIBUSB_SUCCESS;
   1017 }
   1018 
   1019 int linux_enumerate_device(struct libusb_context *ctx,
   1020 	uint8_t busnum, uint8_t devaddr, const char *sysfs_dir)
   1021 {
   1022 	unsigned long session_id;
   1023 	struct libusb_device *dev;
   1024 	int r = 0;
   1025 
   1026 	/* FIXME: session ID is not guaranteed unique as addresses can wrap and
   1027 	 * will be reused. instead we should add a simple sysfs attribute with
   1028 	 * a session ID. */
   1029 	session_id = busnum << 8 | devaddr;
   1030 	usbi_dbg("busnum %d devaddr %d session_id %ld", busnum, devaddr,
   1031 		session_id);
   1032 
   1033 	if (usbi_get_device_by_session_id(ctx, session_id)) {
   1034 		/* device already exists in the context */
   1035 		usbi_dbg("session_id %ld already exists", session_id);
   1036 		return LIBUSB_SUCCESS;
   1037 	}
   1038 
   1039 	usbi_dbg("allocating new device for %d/%d (session %ld)",
   1040 		 busnum, devaddr, session_id);
   1041 	dev = usbi_alloc_device(ctx, session_id);
   1042 	if (!dev)
   1043 		return LIBUSB_ERROR_NO_MEM;
   1044 
   1045 	r = initialize_device(dev, busnum, devaddr, sysfs_dir);
   1046 	if (r < 0)
   1047 		goto out;
   1048 	r = usbi_sanitize_device(dev);
   1049 	if (r < 0)
   1050 		goto out;
   1051 
   1052 	r = linux_get_parent_info(dev, sysfs_dir);
   1053 	if (r < 0)
   1054 		goto out;
   1055 out:
   1056 	if (r < 0)
   1057 		libusb_unref_device(dev);
   1058 	else
   1059 		usbi_connect_device(dev);
   1060 
   1061 	return r;
   1062 }
   1063 
   1064 void linux_hotplug_enumerate(uint8_t busnum, uint8_t devaddr, const char *sys_name)
   1065 {
   1066 	struct libusb_context *ctx;
   1067 
   1068 	usbi_mutex_static_lock(&active_contexts_lock);
   1069 	list_for_each_entry(ctx, &active_contexts_list, list, struct libusb_context) {
   1070 		linux_enumerate_device(ctx, busnum, devaddr, sys_name);
   1071 	}
   1072 	usbi_mutex_static_unlock(&active_contexts_lock);
   1073 }
   1074 
   1075 void linux_hotplug_disconnected(uint8_t busnum, uint8_t devaddr, const char *sys_name)
   1076 {
   1077 	struct libusb_context *ctx;
   1078 	struct libusb_device *dev;
   1079 	unsigned long session_id = busnum << 8 | devaddr;
   1080 
   1081 	usbi_mutex_static_lock(&active_contexts_lock);
   1082 	list_for_each_entry(ctx, &active_contexts_list, list, struct libusb_context) {
   1083 		dev = usbi_get_device_by_session_id (ctx, session_id);
   1084 		if (NULL != dev) {
   1085 			usbi_disconnect_device (dev);
   1086 		} else {
   1087 			usbi_dbg("device not found for session %x", session_id);
   1088 		}
   1089 	}
   1090 	usbi_mutex_static_unlock(&active_contexts_lock);
   1091 }
   1092 
   1093 #if !defined(USE_UDEV)
   1094 /* open a bus directory and adds all discovered devices to the context */
   1095 static int usbfs_scan_busdir(struct libusb_context *ctx, uint8_t busnum)
   1096 {
   1097 	DIR *dir;
   1098 	char dirpath[PATH_MAX];
   1099 	struct dirent *entry;
   1100 	int r = LIBUSB_ERROR_IO;
   1101 
   1102 	snprintf(dirpath, PATH_MAX, "%s/%03d", usbfs_path, busnum);
   1103 	usbi_dbg("%s", dirpath);
   1104 	dir = opendir(dirpath);
   1105 	if (!dir) {
   1106 		usbi_err(ctx, "opendir '%s' failed, errno=%d", dirpath, errno);
   1107 		/* FIXME: should handle valid race conditions like hub unplugged
   1108 		 * during directory iteration - this is not an error */
   1109 		return r;
   1110 	}
   1111 
   1112 	while ((entry = readdir(dir))) {
   1113 		int devaddr;
   1114 
   1115 		if (entry->d_name[0] == '.')
   1116 			continue;
   1117 
   1118 		devaddr = atoi(entry->d_name);
   1119 		if (devaddr == 0) {
   1120 			usbi_dbg("unknown dir entry %s", entry->d_name);
   1121 			continue;
   1122 		}
   1123 
   1124 		if (linux_enumerate_device(ctx, busnum, (uint8_t) devaddr, NULL)) {
   1125 			usbi_dbg("failed to enumerate dir entry %s", entry->d_name);
   1126 			continue;
   1127 		}
   1128 
   1129 		r = 0;
   1130 	}
   1131 
   1132 	closedir(dir);
   1133 	return r;
   1134 }
   1135 
   1136 static int usbfs_get_device_list(struct libusb_context *ctx)
   1137 {
   1138 	struct dirent *entry;
   1139 	DIR *buses = opendir(usbfs_path);
   1140 	int r = 0;
   1141 
   1142 	if (!buses) {
   1143 		usbi_err(ctx, "opendir buses failed errno=%d", errno);
   1144 		return LIBUSB_ERROR_IO;
   1145 	}
   1146 
   1147 	while ((entry = readdir(buses))) {
   1148 		int busnum;
   1149 
   1150 		if (entry->d_name[0] == '.')
   1151 			continue;
   1152 
   1153 		if (usbdev_names) {
   1154 			int devaddr;
   1155 			if (!_is_usbdev_entry(entry, &busnum, &devaddr))
   1156 				continue;
   1157 
   1158 			r = linux_enumerate_device(ctx, busnum, (uint8_t) devaddr, NULL);
   1159 			if (r < 0) {
   1160 				usbi_dbg("failed to enumerate dir entry %s", entry->d_name);
   1161 				continue;
   1162 			}
   1163 		} else {
   1164 			busnum = atoi(entry->d_name);
   1165 			if (busnum == 0) {
   1166 				usbi_dbg("unknown dir entry %s", entry->d_name);
   1167 				continue;
   1168 			}
   1169 
   1170 			r = usbfs_scan_busdir(ctx, busnum);
   1171 			if (r < 0)
   1172 				break;
   1173 		}
   1174 	}
   1175 
   1176 	closedir(buses);
   1177 	return r;
   1178 
   1179 }
   1180 #endif
   1181 
   1182 static int sysfs_scan_device(struct libusb_context *ctx, const char *devname)
   1183 {
   1184 	uint8_t busnum, devaddr;
   1185 	int ret;
   1186 
   1187 	ret = linux_get_device_address (ctx, 0, &busnum, &devaddr, NULL, devname);
   1188 	if (LIBUSB_SUCCESS != ret) {
   1189 		return ret;
   1190 	}
   1191 
   1192 	return linux_enumerate_device(ctx, busnum & 0xff, devaddr & 0xff,
   1193 		devname);
   1194 }
   1195 
   1196 #if !defined(USE_UDEV)
   1197 static int sysfs_get_device_list(struct libusb_context *ctx)
   1198 {
   1199 	DIR *devices = opendir(SYSFS_DEVICE_PATH);
   1200 	struct dirent *entry;
   1201 	int r = LIBUSB_ERROR_IO;
   1202 
   1203 	if (!devices) {
   1204 		usbi_err(ctx, "opendir devices failed errno=%d", errno);
   1205 		return r;
   1206 	}
   1207 
   1208 	while ((entry = readdir(devices))) {
   1209 		if ((!isdigit(entry->d_name[0]) && strncmp(entry->d_name, "usb", 3))
   1210 				|| strchr(entry->d_name, ':'))
   1211 			continue;
   1212 
   1213 		if (sysfs_scan_device(ctx, entry->d_name)) {
   1214 			usbi_dbg("failed to enumerate dir entry %s", entry->d_name);
   1215 			continue;
   1216 		}
   1217 
   1218 		r = 0;
   1219 	}
   1220 
   1221 	closedir(devices);
   1222 	return r;
   1223 }
   1224 
   1225 static int linux_default_scan_devices (struct libusb_context *ctx)
   1226 {
   1227 	/* we can retrieve device list and descriptors from sysfs or usbfs.
   1228 	 * sysfs is preferable, because if we use usbfs we end up resuming
   1229 	 * any autosuspended USB devices. however, sysfs is not available
   1230 	 * everywhere, so we need a usbfs fallback too.
   1231 	 *
   1232 	 * as described in the "sysfs vs usbfs" comment at the top of this
   1233 	 * file, sometimes we have sysfs but not enough information to
   1234 	 * relate sysfs devices to usbfs nodes.  op_init() determines the
   1235 	 * adequacy of sysfs and sets sysfs_can_relate_devices.
   1236 	 */
   1237 	if (sysfs_can_relate_devices != 0)
   1238 		return sysfs_get_device_list(ctx);
   1239 	else
   1240 		return usbfs_get_device_list(ctx);
   1241 }
   1242 #endif
   1243 
   1244 static int op_open(struct libusb_device_handle *handle)
   1245 {
   1246 	struct linux_device_handle_priv *hpriv = _device_handle_priv(handle);
   1247 	int r;
   1248 
   1249 	hpriv->fd = _get_usbfs_fd(handle->dev, O_RDWR, 0);
   1250 	if (hpriv->fd < 0)
   1251 		return hpriv->fd;
   1252 
   1253 	r = ioctl(hpriv->fd, IOCTL_USBFS_GET_CAPABILITIES, &hpriv->caps);
   1254 	if (r < 0) {
   1255 		if (errno == ENOTTY)
   1256 			usbi_dbg("getcap not available");
   1257 		else
   1258 			usbi_err(HANDLE_CTX(handle), "getcap failed (%d)", errno);
   1259 		hpriv->caps = 0;
   1260 		if (supports_flag_zero_packet)
   1261 			hpriv->caps |= USBFS_CAP_ZERO_PACKET;
   1262 		if (supports_flag_bulk_continuation)
   1263 			hpriv->caps |= USBFS_CAP_BULK_CONTINUATION;
   1264 	}
   1265 
   1266 	return usbi_add_pollfd(HANDLE_CTX(handle), hpriv->fd, POLLOUT);
   1267 }
   1268 
   1269 static void op_close(struct libusb_device_handle *dev_handle)
   1270 {
   1271 	int fd = _device_handle_priv(dev_handle)->fd;
   1272 	usbi_remove_pollfd(HANDLE_CTX(dev_handle), fd);
   1273 	close(fd);
   1274 }
   1275 
   1276 static int op_get_configuration(struct libusb_device_handle *handle,
   1277 	int *config)
   1278 {
   1279 	int r;
   1280 
   1281 	if (sysfs_can_relate_devices) {
   1282 		r = sysfs_get_active_config(handle->dev, config);
   1283 	} else {
   1284 		r = usbfs_get_active_config(handle->dev,
   1285 					    _device_handle_priv(handle)->fd);
   1286 	}
   1287 	if (r < 0)
   1288 		return r;
   1289 
   1290 	if (*config == -1) {
   1291 		usbi_err(HANDLE_CTX(handle), "device unconfigured");
   1292 		*config = 0;
   1293 	}
   1294 
   1295 	return 0;
   1296 }
   1297 
   1298 static int op_set_configuration(struct libusb_device_handle *handle, int config)
   1299 {
   1300 	struct linux_device_priv *priv = _device_priv(handle->dev);
   1301 	int fd = _device_handle_priv(handle)->fd;
   1302 	int r = ioctl(fd, IOCTL_USBFS_SETCONFIG, &config);
   1303 	if (r) {
   1304 		if (errno == EINVAL)
   1305 			return LIBUSB_ERROR_NOT_FOUND;
   1306 		else if (errno == EBUSY)
   1307 			return LIBUSB_ERROR_BUSY;
   1308 		else if (errno == ENODEV)
   1309 			return LIBUSB_ERROR_NO_DEVICE;
   1310 
   1311 		usbi_err(HANDLE_CTX(handle), "failed, error %d errno %d", r, errno);
   1312 		return LIBUSB_ERROR_OTHER;
   1313 	}
   1314 
   1315 	/* update our cached active config descriptor */
   1316 	priv->active_config = config;
   1317 
   1318 	return LIBUSB_SUCCESS;
   1319 }
   1320 
   1321 static int claim_interface(struct libusb_device_handle *handle, int iface)
   1322 {
   1323 	int fd = _device_handle_priv(handle)->fd;
   1324 	int r = ioctl(fd, IOCTL_USBFS_CLAIMINTF, &iface);
   1325 	if (r) {
   1326 		if (errno == ENOENT)
   1327 			return LIBUSB_ERROR_NOT_FOUND;
   1328 		else if (errno == EBUSY)
   1329 			return LIBUSB_ERROR_BUSY;
   1330 		else if (errno == ENODEV)
   1331 			return LIBUSB_ERROR_NO_DEVICE;
   1332 
   1333 		usbi_err(HANDLE_CTX(handle),
   1334 			"claim interface failed, error %d errno %d", r, errno);
   1335 		return LIBUSB_ERROR_OTHER;
   1336 	}
   1337 	return 0;
   1338 }
   1339 
   1340 static int release_interface(struct libusb_device_handle *handle, int iface)
   1341 {
   1342 	int fd = _device_handle_priv(handle)->fd;
   1343 	int r = ioctl(fd, IOCTL_USBFS_RELEASEINTF, &iface);
   1344 	if (r) {
   1345 		if (errno == ENODEV)
   1346 			return LIBUSB_ERROR_NO_DEVICE;
   1347 
   1348 		usbi_err(HANDLE_CTX(handle),
   1349 			"release interface failed, error %d errno %d", r, errno);
   1350 		return LIBUSB_ERROR_OTHER;
   1351 	}
   1352 	return 0;
   1353 }
   1354 
   1355 static int op_set_interface(struct libusb_device_handle *handle, int iface,
   1356 	int altsetting)
   1357 {
   1358 	int fd = _device_handle_priv(handle)->fd;
   1359 	struct usbfs_setinterface setintf;
   1360 	int r;
   1361 
   1362 	setintf.interface = iface;
   1363 	setintf.altsetting = altsetting;
   1364 	r = ioctl(fd, IOCTL_USBFS_SETINTF, &setintf);
   1365 	if (r) {
   1366 		if (errno == EINVAL)
   1367 			return LIBUSB_ERROR_NOT_FOUND;
   1368 		else if (errno == ENODEV)
   1369 			return LIBUSB_ERROR_NO_DEVICE;
   1370 
   1371 		usbi_err(HANDLE_CTX(handle),
   1372 			"setintf failed error %d errno %d", r, errno);
   1373 		return LIBUSB_ERROR_OTHER;
   1374 	}
   1375 
   1376 	return 0;
   1377 }
   1378 
   1379 static int op_clear_halt(struct libusb_device_handle *handle,
   1380 	unsigned char endpoint)
   1381 {
   1382 	int fd = _device_handle_priv(handle)->fd;
   1383 	unsigned int _endpoint = endpoint;
   1384 	int r = ioctl(fd, IOCTL_USBFS_CLEAR_HALT, &_endpoint);
   1385 	if (r) {
   1386 		if (errno == ENOENT)
   1387 			return LIBUSB_ERROR_NOT_FOUND;
   1388 		else if (errno == ENODEV)
   1389 			return LIBUSB_ERROR_NO_DEVICE;
   1390 
   1391 		usbi_err(HANDLE_CTX(handle),
   1392 			"clear_halt failed error %d errno %d", r, errno);
   1393 		return LIBUSB_ERROR_OTHER;
   1394 	}
   1395 
   1396 	return 0;
   1397 }
   1398 
   1399 static int op_reset_device(struct libusb_device_handle *handle)
   1400 {
   1401 	int fd = _device_handle_priv(handle)->fd;
   1402 	int i, r, ret = 0;
   1403 
   1404 	/* Doing a device reset will cause the usbfs driver to get unbound
   1405 	   from any interfaces it is bound to. By voluntarily unbinding
   1406 	   the usbfs driver ourself, we stop the kernel from rebinding
   1407 	   the interface after reset (which would end up with the interface
   1408 	   getting bound to the in kernel driver if any). */
   1409 	for (i = 0; i < USB_MAXINTERFACES; i++) {
   1410 		if (handle->claimed_interfaces & (1L << i)) {
   1411 			release_interface(handle, i);
   1412 		}
   1413 	}
   1414 
   1415 	usbi_mutex_lock(&handle->lock);
   1416 	r = ioctl(fd, IOCTL_USBFS_RESET, NULL);
   1417 	if (r) {
   1418 		if (errno == ENODEV) {
   1419 			ret = LIBUSB_ERROR_NOT_FOUND;
   1420 			goto out;
   1421 		}
   1422 
   1423 		usbi_err(HANDLE_CTX(handle),
   1424 			"reset failed error %d errno %d", r, errno);
   1425 		ret = LIBUSB_ERROR_OTHER;
   1426 		goto out;
   1427 	}
   1428 
   1429 	/* And re-claim any interfaces which were claimed before the reset */
   1430 	for (i = 0; i < USB_MAXINTERFACES; i++) {
   1431 		if (handle->claimed_interfaces & (1L << i)) {
   1432 			/*
   1433 			 * A driver may have completed modprobing during
   1434 			 * IOCTL_USBFS_RESET, and bound itself as soon as
   1435 			 * IOCTL_USBFS_RESET released the device lock
   1436 			 */
   1437 			r = detach_kernel_driver_and_claim(handle, i);
   1438 			if (r) {
   1439 				usbi_warn(HANDLE_CTX(handle),
   1440 					"failed to re-claim interface %d after reset: %s",
   1441 					i, libusb_error_name(r));
   1442 				handle->claimed_interfaces &= ~(1L << i);
   1443 				ret = LIBUSB_ERROR_NOT_FOUND;
   1444 			}
   1445 		}
   1446 	}
   1447 out:
   1448 	usbi_mutex_unlock(&handle->lock);
   1449 	return ret;
   1450 }
   1451 
   1452 static int op_kernel_driver_active(struct libusb_device_handle *handle,
   1453 	int interface)
   1454 {
   1455 	int fd = _device_handle_priv(handle)->fd;
   1456 	struct usbfs_getdriver getdrv;
   1457 	int r;
   1458 
   1459 	getdrv.interface = interface;
   1460 	r = ioctl(fd, IOCTL_USBFS_GETDRIVER, &getdrv);
   1461 	if (r) {
   1462 		if (errno == ENODATA)
   1463 			return 0;
   1464 		else if (errno == ENODEV)
   1465 			return LIBUSB_ERROR_NO_DEVICE;
   1466 
   1467 		usbi_err(HANDLE_CTX(handle),
   1468 			"get driver failed error %d errno %d", r, errno);
   1469 		return LIBUSB_ERROR_OTHER;
   1470 	}
   1471 
   1472 	return (strcmp(getdrv.driver, "usbfs") == 0) ? 0 : 1;
   1473 }
   1474 
   1475 static int op_detach_kernel_driver(struct libusb_device_handle *handle,
   1476 	int interface)
   1477 {
   1478 	int fd = _device_handle_priv(handle)->fd;
   1479 	struct usbfs_ioctl command;
   1480 	struct usbfs_getdriver getdrv;
   1481 	int r;
   1482 
   1483 	command.ifno = interface;
   1484 	command.ioctl_code = IOCTL_USBFS_DISCONNECT;
   1485 	command.data = NULL;
   1486 
   1487 	getdrv.interface = interface;
   1488 	r = ioctl(fd, IOCTL_USBFS_GETDRIVER, &getdrv);
   1489 	if (r == 0 && strcmp(getdrv.driver, "usbfs") == 0)
   1490 		return LIBUSB_ERROR_NOT_FOUND;
   1491 
   1492 	r = ioctl(fd, IOCTL_USBFS_IOCTL, &command);
   1493 	if (r) {
   1494 		if (errno == ENODATA)
   1495 			return LIBUSB_ERROR_NOT_FOUND;
   1496 		else if (errno == EINVAL)
   1497 			return LIBUSB_ERROR_INVALID_PARAM;
   1498 		else if (errno == ENODEV)
   1499 			return LIBUSB_ERROR_NO_DEVICE;
   1500 
   1501 		usbi_err(HANDLE_CTX(handle),
   1502 			"detach failed error %d errno %d", r, errno);
   1503 		return LIBUSB_ERROR_OTHER;
   1504 	}
   1505 
   1506 	return 0;
   1507 }
   1508 
   1509 static int op_attach_kernel_driver(struct libusb_device_handle *handle,
   1510 	int interface)
   1511 {
   1512 	int fd = _device_handle_priv(handle)->fd;
   1513 	struct usbfs_ioctl command;
   1514 	int r;
   1515 
   1516 	command.ifno = interface;
   1517 	command.ioctl_code = IOCTL_USBFS_CONNECT;
   1518 	command.data = NULL;
   1519 
   1520 	r = ioctl(fd, IOCTL_USBFS_IOCTL, &command);
   1521 	if (r < 0) {
   1522 		if (errno == ENODATA)
   1523 			return LIBUSB_ERROR_NOT_FOUND;
   1524 		else if (errno == EINVAL)
   1525 			return LIBUSB_ERROR_INVALID_PARAM;
   1526 		else if (errno == ENODEV)
   1527 			return LIBUSB_ERROR_NO_DEVICE;
   1528 		else if (errno == EBUSY)
   1529 			return LIBUSB_ERROR_BUSY;
   1530 
   1531 		usbi_err(HANDLE_CTX(handle),
   1532 			"attach failed error %d errno %d", r, errno);
   1533 		return LIBUSB_ERROR_OTHER;
   1534 	} else if (r == 0) {
   1535 		return LIBUSB_ERROR_NOT_FOUND;
   1536 	}
   1537 
   1538 	return 0;
   1539 }
   1540 
   1541 static int detach_kernel_driver_and_claim(struct libusb_device_handle *handle,
   1542 	int interface)
   1543 {
   1544 	struct usbfs_disconnect_claim dc;
   1545 	int r, fd = _device_handle_priv(handle)->fd;
   1546 
   1547 	dc.interface = interface;
   1548 	strcpy(dc.driver, "usbfs");
   1549 	dc.flags = USBFS_DISCONNECT_CLAIM_EXCEPT_DRIVER;
   1550 	r = ioctl(fd, IOCTL_USBFS_DISCONNECT_CLAIM, &dc);
   1551 	if (r == 0 || (r != 0 && errno != ENOTTY)) {
   1552 		if (r == 0)
   1553 			return 0;
   1554 
   1555 		switch (errno) {
   1556 		case EBUSY:
   1557 			return LIBUSB_ERROR_BUSY;
   1558 		case EINVAL:
   1559 			return LIBUSB_ERROR_INVALID_PARAM;
   1560 		case ENODEV:
   1561 			return LIBUSB_ERROR_NO_DEVICE;
   1562 		}
   1563 		usbi_err(HANDLE_CTX(handle),
   1564 			"disconnect-and-claim failed errno %d", errno);
   1565 		return LIBUSB_ERROR_OTHER;
   1566 	}
   1567 
   1568 	/* Fallback code for kernels which don't support the
   1569 	   disconnect-and-claim ioctl */
   1570 	r = op_detach_kernel_driver(handle, interface);
   1571 	if (r != 0 && r != LIBUSB_ERROR_NOT_FOUND)
   1572 		return r;
   1573 
   1574 	return claim_interface(handle, interface);
   1575 }
   1576 
   1577 static int op_claim_interface(struct libusb_device_handle *handle, int iface)
   1578 {
   1579 	if (handle->auto_detach_kernel_driver)
   1580 		return detach_kernel_driver_and_claim(handle, iface);
   1581 	else
   1582 		return claim_interface(handle, iface);
   1583 }
   1584 
   1585 static int op_release_interface(struct libusb_device_handle *handle, int iface)
   1586 {
   1587 	int r;
   1588 
   1589 	r = release_interface(handle, iface);
   1590 	if (r)
   1591 		return r;
   1592 
   1593 	if (handle->auto_detach_kernel_driver)
   1594 		op_attach_kernel_driver(handle, iface);
   1595 
   1596 	return 0;
   1597 }
   1598 
   1599 static void op_destroy_device(struct libusb_device *dev)
   1600 {
   1601 	struct linux_device_priv *priv = _device_priv(dev);
   1602 	if (priv->descriptors)
   1603 		free(priv->descriptors);
   1604 	if (priv->sysfs_dir)
   1605 		free(priv->sysfs_dir);
   1606 }
   1607 
   1608 /* URBs are discarded in reverse order of submission to avoid races. */
   1609 static int discard_urbs(struct usbi_transfer *itransfer, int first, int last_plus_one)
   1610 {
   1611 	struct libusb_transfer *transfer =
   1612 		USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
   1613 	struct linux_transfer_priv *tpriv =
   1614 		usbi_transfer_get_os_priv(itransfer);
   1615 	struct linux_device_handle_priv *dpriv =
   1616 		_device_handle_priv(transfer->dev_handle);
   1617 	int i, ret = 0;
   1618 	struct usbfs_urb *urb;
   1619 
   1620 	for (i = last_plus_one - 1; i >= first; i--) {
   1621 		if (LIBUSB_TRANSFER_TYPE_ISOCHRONOUS == transfer->type)
   1622 			urb = tpriv->iso_urbs[i];
   1623 		else
   1624 			urb = &tpriv->urbs[i];
   1625 
   1626 		if (0 == ioctl(dpriv->fd, IOCTL_USBFS_DISCARDURB, urb))
   1627 			continue;
   1628 
   1629 		if (EINVAL == errno) {
   1630 			usbi_dbg("URB not found --> assuming ready to be reaped");
   1631 			if (i == (last_plus_one - 1))
   1632 				ret = LIBUSB_ERROR_NOT_FOUND;
   1633 		} else if (ENODEV == errno) {
   1634 			usbi_dbg("Device not found for URB --> assuming ready to be reaped");
   1635 			ret = LIBUSB_ERROR_NO_DEVICE;
   1636 		} else {
   1637 			usbi_warn(TRANSFER_CTX(transfer),
   1638 				"unrecognised discard errno %d", errno);
   1639 			ret = LIBUSB_ERROR_OTHER;
   1640 		}
   1641 	}
   1642 	return ret;
   1643 }
   1644 
   1645 static void free_iso_urbs(struct linux_transfer_priv *tpriv)
   1646 {
   1647 	int i;
   1648 	for (i = 0; i < tpriv->num_urbs; i++) {
   1649 		struct usbfs_urb *urb = tpriv->iso_urbs[i];
   1650 		if (!urb)
   1651 			break;
   1652 		free(urb);
   1653 	}
   1654 
   1655 	free(tpriv->iso_urbs);
   1656 	tpriv->iso_urbs = NULL;
   1657 }
   1658 
   1659 static int submit_bulk_transfer(struct usbi_transfer *itransfer,
   1660 	unsigned char urb_type)
   1661 {
   1662 	struct libusb_transfer *transfer =
   1663 		USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
   1664 	struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
   1665 	struct linux_device_handle_priv *dpriv =
   1666 		_device_handle_priv(transfer->dev_handle);
   1667 	struct usbfs_urb *urbs;
   1668 	int is_out = (transfer->endpoint & LIBUSB_ENDPOINT_DIR_MASK)
   1669 		== LIBUSB_ENDPOINT_OUT;
   1670 	int bulk_buffer_len, use_bulk_continuation;
   1671 	int r;
   1672 	int i;
   1673 	size_t alloc_size;
   1674 
   1675 	if (tpriv->urbs)
   1676 		return LIBUSB_ERROR_BUSY;
   1677 
   1678 	if (is_out && (transfer->flags & LIBUSB_TRANSFER_ADD_ZERO_PACKET) &&
   1679 			!(dpriv->caps & USBFS_CAP_ZERO_PACKET))
   1680 		return LIBUSB_ERROR_NOT_SUPPORTED;
   1681 
   1682 	/*
   1683 	 * Older versions of usbfs place a 16kb limit on bulk URBs. We work
   1684 	 * around this by splitting large transfers into 16k blocks, and then
   1685 	 * submit all urbs at once. it would be simpler to submit one urb at
   1686 	 * a time, but there is a big performance gain doing it this way.
   1687 	 *
   1688 	 * Newer versions lift the 16k limit (USBFS_CAP_NO_PACKET_SIZE_LIM),
   1689 	 * using arbritary large transfers can still be a bad idea though, as
   1690 	 * the kernel needs to allocate physical contiguous memory for this,
   1691 	 * which may fail for large buffers.
   1692 	 *
   1693 	 * The kernel solves this problem by splitting the transfer into
   1694 	 * blocks itself when the host-controller is scatter-gather capable
   1695 	 * (USBFS_CAP_BULK_SCATTER_GATHER), which most controllers are.
   1696 	 *
   1697 	 * Last, there is the issue of short-transfers when splitting, for
   1698 	 * short split-transfers to work reliable USBFS_CAP_BULK_CONTINUATION
   1699 	 * is needed, but this is not always available.
   1700 	 */
   1701 	if (dpriv->caps & USBFS_CAP_BULK_SCATTER_GATHER) {
   1702 		/* Good! Just submit everything in one go */
   1703 		bulk_buffer_len = transfer->length ? transfer->length : 1;
   1704 		use_bulk_continuation = 0;
   1705 	} else if (dpriv->caps & USBFS_CAP_BULK_CONTINUATION) {
   1706 		/* Split the transfers and use bulk-continuation to
   1707 		   avoid issues with short-transfers */
   1708 		bulk_buffer_len = MAX_BULK_BUFFER_LENGTH;
   1709 		use_bulk_continuation = 1;
   1710 	} else if (dpriv->caps & USBFS_CAP_NO_PACKET_SIZE_LIM) {
   1711 		/* Don't split, assume the kernel can alloc the buffer
   1712 		   (otherwise the submit will fail with -ENOMEM) */
   1713 		bulk_buffer_len = transfer->length ? transfer->length : 1;
   1714 		use_bulk_continuation = 0;
   1715 	} else {
   1716 		/* Bad, splitting without bulk-continuation, short transfers
   1717 		   which end before the last urb will not work reliable! */
   1718 		/* Note we don't warn here as this is "normal" on kernels <
   1719 		   2.6.32 and not a problem for most applications */
   1720 		bulk_buffer_len = MAX_BULK_BUFFER_LENGTH;
   1721 		use_bulk_continuation = 0;
   1722 	}
   1723 
   1724 	int num_urbs = transfer->length / bulk_buffer_len;
   1725 	int last_urb_partial = 0;
   1726 
   1727 	if (transfer->length == 0) {
   1728 		num_urbs = 1;
   1729 	} else if ((transfer->length % bulk_buffer_len) > 0) {
   1730 		last_urb_partial = 1;
   1731 		num_urbs++;
   1732 	}
   1733 	usbi_dbg("need %d urbs for new transfer with length %d", num_urbs,
   1734 		transfer->length);
   1735 	alloc_size = num_urbs * sizeof(struct usbfs_urb);
   1736 	urbs = calloc(1, alloc_size);
   1737 	if (!urbs)
   1738 		return LIBUSB_ERROR_NO_MEM;
   1739 	tpriv->urbs = urbs;
   1740 	tpriv->num_urbs = num_urbs;
   1741 	tpriv->num_retired = 0;
   1742 	tpriv->reap_action = NORMAL;
   1743 	tpriv->reap_status = LIBUSB_TRANSFER_COMPLETED;
   1744 
   1745 	for (i = 0; i < num_urbs; i++) {
   1746 		struct usbfs_urb *urb = &urbs[i];
   1747 		urb->usercontext = itransfer;
   1748 		urb->type = urb_type;
   1749 		urb->endpoint = transfer->endpoint;
   1750 		urb->buffer = transfer->buffer + (i * bulk_buffer_len);
   1751 		/* don't set the short not ok flag for the last URB */
   1752 		if (use_bulk_continuation && !is_out && (i < num_urbs - 1))
   1753 			urb->flags = USBFS_URB_SHORT_NOT_OK;
   1754 		if (i == num_urbs - 1 && last_urb_partial)
   1755 			urb->buffer_length = transfer->length % bulk_buffer_len;
   1756 		else if (transfer->length == 0)
   1757 			urb->buffer_length = 0;
   1758 		else
   1759 			urb->buffer_length = bulk_buffer_len;
   1760 
   1761 		if (i > 0 && use_bulk_continuation)
   1762 			urb->flags |= USBFS_URB_BULK_CONTINUATION;
   1763 
   1764 		/* we have already checked that the flag is supported */
   1765 		if (is_out && i == num_urbs - 1 &&
   1766 		    transfer->flags & LIBUSB_TRANSFER_ADD_ZERO_PACKET)
   1767 			urb->flags |= USBFS_URB_ZERO_PACKET;
   1768 
   1769 		r = ioctl(dpriv->fd, IOCTL_USBFS_SUBMITURB, urb);
   1770 		if (r < 0) {
   1771 			if (errno == ENODEV) {
   1772 				r = LIBUSB_ERROR_NO_DEVICE;
   1773 			} else {
   1774 				usbi_err(TRANSFER_CTX(transfer),
   1775 					"submiturb failed error %d errno=%d", r, errno);
   1776 				r = LIBUSB_ERROR_IO;
   1777 			}
   1778 
   1779 			/* if the first URB submission fails, we can simply free up and
   1780 			 * return failure immediately. */
   1781 			if (i == 0) {
   1782 				usbi_dbg("first URB failed, easy peasy");
   1783 				free(urbs);
   1784 				tpriv->urbs = NULL;
   1785 				return r;
   1786 			}
   1787 
   1788 			/* if it's not the first URB that failed, the situation is a bit
   1789 			 * tricky. we may need to discard all previous URBs. there are
   1790 			 * complications:
   1791 			 *  - discarding is asynchronous - discarded urbs will be reaped
   1792 			 *    later. the user must not have freed the transfer when the
   1793 			 *    discarded URBs are reaped, otherwise libusbx will be using
   1794 			 *    freed memory.
   1795 			 *  - the earlier URBs may have completed successfully and we do
   1796 			 *    not want to throw away any data.
   1797 			 *  - this URB failing may be no error; EREMOTEIO means that
   1798 			 *    this transfer simply didn't need all the URBs we submitted
   1799 			 * so, we report that the transfer was submitted successfully and
   1800 			 * in case of error we discard all previous URBs. later when
   1801 			 * the final reap completes we can report error to the user,
   1802 			 * or success if an earlier URB was completed successfully.
   1803 			 */
   1804 			tpriv->reap_action = EREMOTEIO == errno ? COMPLETED_EARLY : SUBMIT_FAILED;
   1805 
   1806 			/* The URBs we haven't submitted yet we count as already
   1807 			 * retired. */
   1808 			tpriv->num_retired += num_urbs - i;
   1809 
   1810 			/* If we completed short then don't try to discard. */
   1811 			if (COMPLETED_EARLY == tpriv->reap_action)
   1812 				return 0;
   1813 
   1814 			discard_urbs(itransfer, 0, i);
   1815 
   1816 			usbi_dbg("reporting successful submission but waiting for %d "
   1817 				"discards before reporting error", i);
   1818 			return 0;
   1819 		}
   1820 	}
   1821 
   1822 	return 0;
   1823 }
   1824 
   1825 static int submit_iso_transfer(struct usbi_transfer *itransfer)
   1826 {
   1827 	struct libusb_transfer *transfer =
   1828 		USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
   1829 	struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
   1830 	struct linux_device_handle_priv *dpriv =
   1831 		_device_handle_priv(transfer->dev_handle);
   1832 	struct usbfs_urb **urbs;
   1833 	size_t alloc_size;
   1834 	int num_packets = transfer->num_iso_packets;
   1835 	int i;
   1836 	int this_urb_len = 0;
   1837 	int num_urbs = 1;
   1838 	int packet_offset = 0;
   1839 	unsigned int packet_len;
   1840 	unsigned char *urb_buffer = transfer->buffer;
   1841 
   1842 	if (tpriv->iso_urbs)
   1843 		return LIBUSB_ERROR_BUSY;
   1844 
   1845 	/* usbfs places a 32kb limit on iso URBs. we divide up larger requests
   1846 	 * into smaller units to meet such restriction, then fire off all the
   1847 	 * units at once. it would be simpler if we just fired one unit at a time,
   1848 	 * but there is a big performance gain through doing it this way.
   1849 	 *
   1850 	 * Newer kernels lift the 32k limit (USBFS_CAP_NO_PACKET_SIZE_LIM),
   1851 	 * using arbritary large transfers is still be a bad idea though, as
   1852 	 * the kernel needs to allocate physical contiguous memory for this,
   1853 	 * which may fail for large buffers.
   1854 	 */
   1855 
   1856 	/* calculate how many URBs we need */
   1857 	for (i = 0; i < num_packets; i++) {
   1858 		unsigned int space_remaining = MAX_ISO_BUFFER_LENGTH - this_urb_len;
   1859 		packet_len = transfer->iso_packet_desc[i].length;
   1860 
   1861 		if (packet_len > space_remaining) {
   1862 			num_urbs++;
   1863 			this_urb_len = packet_len;
   1864 		} else {
   1865 			this_urb_len += packet_len;
   1866 		}
   1867 	}
   1868 	usbi_dbg("need %d 32k URBs for transfer", num_urbs);
   1869 
   1870 	alloc_size = num_urbs * sizeof(*urbs);
   1871 	urbs = calloc(1, alloc_size);
   1872 	if (!urbs)
   1873 		return LIBUSB_ERROR_NO_MEM;
   1874 
   1875 	tpriv->iso_urbs = urbs;
   1876 	tpriv->num_urbs = num_urbs;
   1877 	tpriv->num_retired = 0;
   1878 	tpriv->reap_action = NORMAL;
   1879 	tpriv->iso_packet_offset = 0;
   1880 
   1881 	/* allocate + initialize each URB with the correct number of packets */
   1882 	for (i = 0; i < num_urbs; i++) {
   1883 		struct usbfs_urb *urb;
   1884 		unsigned int space_remaining_in_urb = MAX_ISO_BUFFER_LENGTH;
   1885 		int urb_packet_offset = 0;
   1886 		unsigned char *urb_buffer_orig = urb_buffer;
   1887 		int j;
   1888 		int k;
   1889 
   1890 		/* swallow up all the packets we can fit into this URB */
   1891 		while (packet_offset < transfer->num_iso_packets) {
   1892 			packet_len = transfer->iso_packet_desc[packet_offset].length;
   1893 			if (packet_len <= space_remaining_in_urb) {
   1894 				/* throw it in */
   1895 				urb_packet_offset++;
   1896 				packet_offset++;
   1897 				space_remaining_in_urb -= packet_len;
   1898 				urb_buffer += packet_len;
   1899 			} else {
   1900 				/* it can't fit, save it for the next URB */
   1901 				break;
   1902 			}
   1903 		}
   1904 
   1905 		alloc_size = sizeof(*urb)
   1906 			+ (urb_packet_offset * sizeof(struct usbfs_iso_packet_desc));
   1907 		urb = calloc(1, alloc_size);
   1908 		if (!urb) {
   1909 			free_iso_urbs(tpriv);
   1910 			return LIBUSB_ERROR_NO_MEM;
   1911 		}
   1912 		urbs[i] = urb;
   1913 
   1914 		/* populate packet lengths */
   1915 		for (j = 0, k = packet_offset - urb_packet_offset;
   1916 				k < packet_offset; k++, j++) {
   1917 			packet_len = transfer->iso_packet_desc[k].length;
   1918 			urb->iso_frame_desc[j].length = packet_len;
   1919 		}
   1920 
   1921 		urb->usercontext = itransfer;
   1922 		urb->type = USBFS_URB_TYPE_ISO;
   1923 		/* FIXME: interface for non-ASAP data? */
   1924 		urb->flags = USBFS_URB_ISO_ASAP;
   1925 		urb->endpoint = transfer->endpoint;
   1926 		urb->number_of_packets = urb_packet_offset;
   1927 		urb->buffer = urb_buffer_orig;
   1928 	}
   1929 
   1930 	/* submit URBs */
   1931 	for (i = 0; i < num_urbs; i++) {
   1932 		int r = ioctl(dpriv->fd, IOCTL_USBFS_SUBMITURB, urbs[i]);
   1933 		if (r < 0) {
   1934 			if (errno == ENODEV) {
   1935 				r = LIBUSB_ERROR_NO_DEVICE;
   1936 			} else {
   1937 				usbi_err(TRANSFER_CTX(transfer),
   1938 					"submiturb failed error %d errno=%d", r, errno);
   1939 				r = LIBUSB_ERROR_IO;
   1940 			}
   1941 
   1942 			/* if the first URB submission fails, we can simply free up and
   1943 			 * return failure immediately. */
   1944 			if (i == 0) {
   1945 				usbi_dbg("first URB failed, easy peasy");
   1946 				free_iso_urbs(tpriv);
   1947 				return r;
   1948 			}
   1949 
   1950 			/* if it's not the first URB that failed, the situation is a bit
   1951 			 * tricky. we must discard all previous URBs. there are
   1952 			 * complications:
   1953 			 *  - discarding is asynchronous - discarded urbs will be reaped
   1954 			 *    later. the user must not have freed the transfer when the
   1955 			 *    discarded URBs are reaped, otherwise libusbx will be using
   1956 			 *    freed memory.
   1957 			 *  - the earlier URBs may have completed successfully and we do
   1958 			 *    not want to throw away any data.
   1959 			 * so, in this case we discard all the previous URBs BUT we report
   1960 			 * that the transfer was submitted successfully. then later when
   1961 			 * the final discard completes we can report error to the user.
   1962 			 */
   1963 			tpriv->reap_action = SUBMIT_FAILED;
   1964 
   1965 			/* The URBs we haven't submitted yet we count as already
   1966 			 * retired. */
   1967 			tpriv->num_retired = num_urbs - i;
   1968 			discard_urbs(itransfer, 0, i);
   1969 
   1970 			usbi_dbg("reporting successful submission but waiting for %d "
   1971 				"discards before reporting error", i);
   1972 			return 0;
   1973 		}
   1974 	}
   1975 
   1976 	return 0;
   1977 }
   1978 
   1979 static int submit_control_transfer(struct usbi_transfer *itransfer)
   1980 {
   1981 	struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
   1982 	struct libusb_transfer *transfer =
   1983 		USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
   1984 	struct linux_device_handle_priv *dpriv =
   1985 		_device_handle_priv(transfer->dev_handle);
   1986 	struct usbfs_urb *urb;
   1987 	int r;
   1988 
   1989 	if (tpriv->urbs)
   1990 		return LIBUSB_ERROR_BUSY;
   1991 
   1992 	if (transfer->length - LIBUSB_CONTROL_SETUP_SIZE > MAX_CTRL_BUFFER_LENGTH)
   1993 		return LIBUSB_ERROR_INVALID_PARAM;
   1994 
   1995 	urb = calloc(1, sizeof(struct usbfs_urb));
   1996 	if (!urb)
   1997 		return LIBUSB_ERROR_NO_MEM;
   1998 	tpriv->urbs = urb;
   1999 	tpriv->num_urbs = 1;
   2000 	tpriv->reap_action = NORMAL;
   2001 
   2002 	urb->usercontext = itransfer;
   2003 	urb->type = USBFS_URB_TYPE_CONTROL;
   2004 	urb->endpoint = transfer->endpoint;
   2005 	urb->buffer = transfer->buffer;
   2006 	urb->buffer_length = transfer->length;
   2007 
   2008 	r = ioctl(dpriv->fd, IOCTL_USBFS_SUBMITURB, urb);
   2009 	if (r < 0) {
   2010 		free(urb);
   2011 		tpriv->urbs = NULL;
   2012 		if (errno == ENODEV)
   2013 			return LIBUSB_ERROR_NO_DEVICE;
   2014 
   2015 		usbi_err(TRANSFER_CTX(transfer),
   2016 			"submiturb failed error %d errno=%d", r, errno);
   2017 		return LIBUSB_ERROR_IO;
   2018 	}
   2019 	return 0;
   2020 }
   2021 
   2022 static int op_submit_transfer(struct usbi_transfer *itransfer)
   2023 {
   2024 	struct libusb_transfer *transfer =
   2025 		USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
   2026 
   2027 	switch (transfer->type) {
   2028 	case LIBUSB_TRANSFER_TYPE_CONTROL:
   2029 		return submit_control_transfer(itransfer);
   2030 	case LIBUSB_TRANSFER_TYPE_BULK:
   2031 		return submit_bulk_transfer(itransfer, USBFS_URB_TYPE_BULK);
   2032 	case LIBUSB_TRANSFER_TYPE_INTERRUPT:
   2033 		return submit_bulk_transfer(itransfer, USBFS_URB_TYPE_INTERRUPT);
   2034 	case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
   2035 		return submit_iso_transfer(itransfer);
   2036 	default:
   2037 		usbi_err(TRANSFER_CTX(transfer),
   2038 			"unknown endpoint type %d", transfer->type);
   2039 		return LIBUSB_ERROR_INVALID_PARAM;
   2040 	}
   2041 }
   2042 
   2043 static int op_cancel_transfer(struct usbi_transfer *itransfer)
   2044 {
   2045 	struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
   2046 	struct libusb_transfer *transfer =
   2047 		USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
   2048 
   2049 	switch (transfer->type) {
   2050 	case LIBUSB_TRANSFER_TYPE_BULK:
   2051 		if (tpriv->reap_action == ERROR)
   2052 			break;
   2053 		/* else, fall through */
   2054 	case LIBUSB_TRANSFER_TYPE_CONTROL:
   2055 	case LIBUSB_TRANSFER_TYPE_INTERRUPT:
   2056 	case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
   2057 		tpriv->reap_action = CANCELLED;
   2058 		break;
   2059 	default:
   2060 		usbi_err(TRANSFER_CTX(transfer),
   2061 			"unknown endpoint type %d", transfer->type);
   2062 		return LIBUSB_ERROR_INVALID_PARAM;
   2063 	}
   2064 
   2065 	if (!tpriv->urbs)
   2066 		return LIBUSB_ERROR_NOT_FOUND;
   2067 
   2068 	return discard_urbs(itransfer, 0, tpriv->num_urbs);
   2069 }
   2070 
   2071 static void op_clear_transfer_priv(struct usbi_transfer *itransfer)
   2072 {
   2073 	struct libusb_transfer *transfer =
   2074 		USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
   2075 	struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
   2076 
   2077 	/* urbs can be freed also in submit_transfer so lock mutex first */
   2078 	switch (transfer->type) {
   2079 	case LIBUSB_TRANSFER_TYPE_CONTROL:
   2080 	case LIBUSB_TRANSFER_TYPE_BULK:
   2081 	case LIBUSB_TRANSFER_TYPE_INTERRUPT:
   2082 		usbi_mutex_lock(&itransfer->lock);
   2083 		if (tpriv->urbs)
   2084 			free(tpriv->urbs);
   2085 		tpriv->urbs = NULL;
   2086 		usbi_mutex_unlock(&itransfer->lock);
   2087 		break;
   2088 	case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
   2089 		usbi_mutex_lock(&itransfer->lock);
   2090 		if (tpriv->iso_urbs)
   2091 			free_iso_urbs(tpriv);
   2092 		usbi_mutex_unlock(&itransfer->lock);
   2093 		break;
   2094 	default:
   2095 		usbi_err(TRANSFER_CTX(transfer),
   2096 			"unknown endpoint type %d", transfer->type);
   2097 	}
   2098 }
   2099 
   2100 static int handle_bulk_completion(struct usbi_transfer *itransfer,
   2101 	struct usbfs_urb *urb)
   2102 {
   2103 	struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
   2104 	struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
   2105 	int urb_idx = urb - tpriv->urbs;
   2106 
   2107 	usbi_mutex_lock(&itransfer->lock);
   2108 	usbi_dbg("handling completion status %d of bulk urb %d/%d", urb->status,
   2109 		urb_idx + 1, tpriv->num_urbs);
   2110 
   2111 	tpriv->num_retired++;
   2112 
   2113 	if (tpriv->reap_action != NORMAL) {
   2114 		/* cancelled, submit_fail, or completed early */
   2115 		usbi_dbg("abnormal reap: urb status %d", urb->status);
   2116 
   2117 		/* even though we're in the process of cancelling, it's possible that
   2118 		 * we may receive some data in these URBs that we don't want to lose.
   2119 		 * examples:
   2120 		 * 1. while the kernel is cancelling all the packets that make up an
   2121 		 *    URB, a few of them might complete. so we get back a successful
   2122 		 *    cancellation *and* some data.
   2123 		 * 2. we receive a short URB which marks the early completion condition,
   2124 		 *    so we start cancelling the remaining URBs. however, we're too
   2125 		 *    slow and another URB completes (or at least completes partially).
   2126 		 *    (this can't happen since we always use BULK_CONTINUATION.)
   2127 		 *
   2128 		 * When this happens, our objectives are not to lose any "surplus" data,
   2129 		 * and also to stick it at the end of the previously-received data
   2130 		 * (closing any holes), so that libusbx reports the total amount of
   2131 		 * transferred data and presents it in a contiguous chunk.
   2132 		 */
   2133 		if (urb->actual_length > 0) {
   2134 			unsigned char *target = transfer->buffer + itransfer->transferred;
   2135 			usbi_dbg("received %d bytes of surplus data", urb->actual_length);
   2136 			if (urb->buffer != target) {
   2137 				usbi_dbg("moving surplus data from offset %d to offset %d",
   2138 					(unsigned char *) urb->buffer - transfer->buffer,
   2139 					target - transfer->buffer);
   2140 				memmove(target, urb->buffer, urb->actual_length);
   2141 			}
   2142 			itransfer->transferred += urb->actual_length;
   2143 		}
   2144 
   2145 		if (tpriv->num_retired == tpriv->num_urbs) {
   2146 			usbi_dbg("abnormal reap: last URB handled, reporting");
   2147 			if (tpriv->reap_action != COMPLETED_EARLY &&
   2148 			    tpriv->reap_status == LIBUSB_TRANSFER_COMPLETED)
   2149 				tpriv->reap_status = LIBUSB_TRANSFER_ERROR;
   2150 			goto completed;
   2151 		}
   2152 		goto out_unlock;
   2153 	}
   2154 
   2155 	itransfer->transferred += urb->actual_length;
   2156 
   2157 	/* Many of these errors can occur on *any* urb of a multi-urb
   2158 	 * transfer.  When they do, we tear down the rest of the transfer.
   2159 	 */
   2160 	switch (urb->status) {
   2161 	case 0:
   2162 		break;
   2163 	case -EREMOTEIO: /* short transfer */
   2164 		break;
   2165 	case -ENOENT: /* cancelled */
   2166 	case -ECONNRESET:
   2167 		break;
   2168 	case -ENODEV:
   2169 	case -ESHUTDOWN:
   2170 		usbi_dbg("device removed");
   2171 		tpriv->reap_status = LIBUSB_TRANSFER_NO_DEVICE;
   2172 		goto cancel_remaining;
   2173 	case -EPIPE:
   2174 		usbi_dbg("detected endpoint stall");
   2175 		if (tpriv->reap_status == LIBUSB_TRANSFER_COMPLETED)
   2176 			tpriv->reap_status = LIBUSB_TRANSFER_STALL;
   2177 		goto cancel_remaining;
   2178 	case -EOVERFLOW:
   2179 		/* overflow can only ever occur in the last urb */
   2180 		usbi_dbg("overflow, actual_length=%d", urb->actual_length);
   2181 		if (tpriv->reap_status == LIBUSB_TRANSFER_COMPLETED)
   2182 			tpriv->reap_status = LIBUSB_TRANSFER_OVERFLOW;
   2183 		goto completed;
   2184 	case -ETIME:
   2185 	case -EPROTO:
   2186 	case -EILSEQ:
   2187 	case -ECOMM:
   2188 	case -ENOSR:
   2189 		usbi_dbg("low level error %d", urb->status);
   2190 		tpriv->reap_action = ERROR;
   2191 		goto cancel_remaining;
   2192 	default:
   2193 		usbi_warn(ITRANSFER_CTX(itransfer),
   2194 			"unrecognised urb status %d", urb->status);
   2195 		tpriv->reap_action = ERROR;
   2196 		goto cancel_remaining;
   2197 	}
   2198 
   2199 	/* if we're the last urb or we got less data than requested then we're
   2200 	 * done */
   2201 	if (urb_idx == tpriv->num_urbs - 1) {
   2202 		usbi_dbg("last URB in transfer --> complete!");
   2203 		goto completed;
   2204 	} else if (urb->actual_length < urb->buffer_length) {
   2205 		usbi_dbg("short transfer %d/%d --> complete!",
   2206 			urb->actual_length, urb->buffer_length);
   2207 		if (tpriv->reap_action == NORMAL)
   2208 			tpriv->reap_action = COMPLETED_EARLY;
   2209 	} else
   2210 		goto out_unlock;
   2211 
   2212 cancel_remaining:
   2213 	if (ERROR == tpriv->reap_action && LIBUSB_TRANSFER_COMPLETED == tpriv->reap_status)
   2214 		tpriv->reap_status = LIBUSB_TRANSFER_ERROR;
   2215 
   2216 	if (tpriv->num_retired == tpriv->num_urbs) /* nothing to cancel */
   2217 		goto completed;
   2218 
   2219 	/* cancel remaining urbs and wait for their completion before
   2220 	 * reporting results */
   2221 	discard_urbs(itransfer, urb_idx + 1, tpriv->num_urbs);
   2222 
   2223 out_unlock:
   2224 	usbi_mutex_unlock(&itransfer->lock);
   2225 	return 0;
   2226 
   2227 completed:
   2228 	free(tpriv->urbs);
   2229 	tpriv->urbs = NULL;
   2230 	usbi_mutex_unlock(&itransfer->lock);
   2231 	return CANCELLED == tpriv->reap_action ?
   2232 		usbi_handle_transfer_cancellation(itransfer) :
   2233 		usbi_handle_transfer_completion(itransfer, tpriv->reap_status);
   2234 }
   2235 
   2236 static int handle_iso_completion(struct usbi_transfer *itransfer,
   2237 	struct usbfs_urb *urb)
   2238 {
   2239 	struct libusb_transfer *transfer =
   2240 		USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
   2241 	struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
   2242 	int num_urbs = tpriv->num_urbs;
   2243 	int urb_idx = 0;
   2244 	int i;
   2245 	enum libusb_transfer_status status = LIBUSB_TRANSFER_COMPLETED;
   2246 
   2247 	usbi_mutex_lock(&itransfer->lock);
   2248 	for (i = 0; i < num_urbs; i++) {
   2249 		if (urb == tpriv->iso_urbs[i]) {
   2250 			urb_idx = i + 1;
   2251 			break;
   2252 		}
   2253 	}
   2254 	if (urb_idx == 0) {
   2255 		usbi_err(TRANSFER_CTX(transfer), "could not locate urb!");
   2256 		usbi_mutex_unlock(&itransfer->lock);
   2257 		return LIBUSB_ERROR_NOT_FOUND;
   2258 	}
   2259 
   2260 	usbi_dbg("handling completion status %d of iso urb %d/%d", urb->status,
   2261 		urb_idx, num_urbs);
   2262 
   2263 	/* copy isochronous results back in */
   2264 
   2265 	for (i = 0; i < urb->number_of_packets; i++) {
   2266 		struct usbfs_iso_packet_desc *urb_desc = &urb->iso_frame_desc[i];
   2267 		struct libusb_iso_packet_descriptor *lib_desc =
   2268 			&transfer->iso_packet_desc[tpriv->iso_packet_offset++];
   2269 		lib_desc->status = LIBUSB_TRANSFER_COMPLETED;
   2270 		switch (urb_desc->status) {
   2271 		case 0:
   2272 			break;
   2273 		case -ENOENT: /* cancelled */
   2274 		case -ECONNRESET:
   2275 			break;
   2276 		case -ENODEV:
   2277 		case -ESHUTDOWN:
   2278 			usbi_dbg("device removed");
   2279 			lib_desc->status = LIBUSB_TRANSFER_NO_DEVICE;
   2280 			break;
   2281 		case -EPIPE:
   2282 			usbi_dbg("detected endpoint stall");
   2283 			lib_desc->status = LIBUSB_TRANSFER_STALL;
   2284 			break;
   2285 		case -EOVERFLOW:
   2286 			usbi_dbg("overflow error");
   2287 			lib_desc->status = LIBUSB_TRANSFER_OVERFLOW;
   2288 			break;
   2289 		case -ETIME:
   2290 		case -EPROTO:
   2291 		case -EILSEQ:
   2292 		case -ECOMM:
   2293 		case -ENOSR:
   2294 		case -EXDEV:
   2295 			usbi_dbg("low-level USB error %d", urb_desc->status);
   2296 			lib_desc->status = LIBUSB_TRANSFER_ERROR;
   2297 			break;
   2298 		default:
   2299 			usbi_warn(TRANSFER_CTX(transfer),
   2300 				"unrecognised urb status %d", urb_desc->status);
   2301 			lib_desc->status = LIBUSB_TRANSFER_ERROR;
   2302 			break;
   2303 		}
   2304 		lib_desc->actual_length = urb_desc->actual_length;
   2305 	}
   2306 
   2307 	tpriv->num_retired++;
   2308 
   2309 	if (tpriv->reap_action != NORMAL) { /* cancelled or submit_fail */
   2310 		usbi_dbg("CANCEL: urb status %d", urb->status);
   2311 
   2312 		if (tpriv->num_retired == num_urbs) {
   2313 			usbi_dbg("CANCEL: last URB handled, reporting");
   2314 			free_iso_urbs(tpriv);
   2315 			if (tpriv->reap_action == CANCELLED) {
   2316 				usbi_mutex_unlock(&itransfer->lock);
   2317 				return usbi_handle_transfer_cancellation(itransfer);
   2318 			} else {
   2319 				usbi_mutex_unlock(&itransfer->lock);
   2320 				return usbi_handle_transfer_completion(itransfer,
   2321 					LIBUSB_TRANSFER_ERROR);
   2322 			}
   2323 		}
   2324 		goto out;
   2325 	}
   2326 
   2327 	switch (urb->status) {
   2328 	case 0:
   2329 		break;
   2330 	case -ENOENT: /* cancelled */
   2331 	case -ECONNRESET:
   2332 		break;
   2333 	case -ESHUTDOWN:
   2334 		usbi_dbg("device removed");
   2335 		status = LIBUSB_TRANSFER_NO_DEVICE;
   2336 		break;
   2337 	default:
   2338 		usbi_warn(TRANSFER_CTX(transfer),
   2339 			"unrecognised urb status %d", urb->status);
   2340 		status = LIBUSB_TRANSFER_ERROR;
   2341 		break;
   2342 	}
   2343 
   2344 	/* if we're the last urb then we're done */
   2345 	if (urb_idx == num_urbs) {
   2346 		usbi_dbg("last URB in transfer --> complete!");
   2347 		free_iso_urbs(tpriv);
   2348 		usbi_mutex_unlock(&itransfer->lock);
   2349 		return usbi_handle_transfer_completion(itransfer, status);
   2350 	}
   2351 
   2352 out:
   2353 	usbi_mutex_unlock(&itransfer->lock);
   2354 	return 0;
   2355 }
   2356 
   2357 static int handle_control_completion(struct usbi_transfer *itransfer,
   2358 	struct usbfs_urb *urb)
   2359 {
   2360 	struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
   2361 	int status;
   2362 
   2363 	usbi_mutex_lock(&itransfer->lock);
   2364 	usbi_dbg("handling completion status %d", urb->status);
   2365 
   2366 	itransfer->transferred += urb->actual_length;
   2367 
   2368 	if (tpriv->reap_action == CANCELLED) {
   2369 		if (urb->status != 0 && urb->status != -ENOENT)
   2370 			usbi_warn(ITRANSFER_CTX(itransfer),
   2371 				"cancel: unrecognised urb status %d", urb->status);
   2372 		free(tpriv->urbs);
   2373 		tpriv->urbs = NULL;
   2374 		usbi_mutex_unlock(&itransfer->lock);
   2375 		return usbi_handle_transfer_cancellation(itransfer);
   2376 	}
   2377 
   2378 	switch (urb->status) {
   2379 	case 0:
   2380 		status = LIBUSB_TRANSFER_COMPLETED;
   2381 		break;
   2382 	case -ENOENT: /* cancelled */
   2383 		status = LIBUSB_TRANSFER_CANCELLED;
   2384 		break;
   2385 	case -ENODEV:
   2386 	case -ESHUTDOWN:
   2387 		usbi_dbg("device removed");
   2388 		status = LIBUSB_TRANSFER_NO_DEVICE;
   2389 		break;
   2390 	case -EPIPE:
   2391 		usbi_dbg("unsupported control request");
   2392 		status = LIBUSB_TRANSFER_STALL;
   2393 		break;
   2394 	case -EOVERFLOW:
   2395 		usbi_dbg("control overflow error");
   2396 		status = LIBUSB_TRANSFER_OVERFLOW;
   2397 		break;
   2398 	case -ETIME:
   2399 	case -EPROTO:
   2400 	case -EILSEQ:
   2401 	case -ECOMM:
   2402 	case -ENOSR:
   2403 		usbi_dbg("low-level bus error occurred");
   2404 		status = LIBUSB_TRANSFER_ERROR;
   2405 		break;
   2406 	default:
   2407 		usbi_warn(ITRANSFER_CTX(itransfer),
   2408 			"unrecognised urb status %d", urb->status);
   2409 		status = LIBUSB_TRANSFER_ERROR;
   2410 		break;
   2411 	}
   2412 
   2413 	free(tpriv->urbs);
   2414 	tpriv->urbs = NULL;
   2415 	usbi_mutex_unlock(&itransfer->lock);
   2416 	return usbi_handle_transfer_completion(itransfer, status);
   2417 }
   2418 
   2419 static int reap_for_handle(struct libusb_device_handle *handle)
   2420 {
   2421 	struct linux_device_handle_priv *hpriv = _device_handle_priv(handle);
   2422 	int r;
   2423 	struct usbfs_urb *urb;
   2424 	struct usbi_transfer *itransfer;
   2425 	struct libusb_transfer *transfer;
   2426 
   2427 	r = ioctl(hpriv->fd, IOCTL_USBFS_REAPURBNDELAY, &urb);
   2428 	if (r == -1 && errno == EAGAIN)
   2429 		return 1;
   2430 	if (r < 0) {
   2431 		if (errno == ENODEV)
   2432 			return LIBUSB_ERROR_NO_DEVICE;
   2433 
   2434 		usbi_err(HANDLE_CTX(handle), "reap failed error %d errno=%d",
   2435 			r, errno);
   2436 		return LIBUSB_ERROR_IO;
   2437 	}
   2438 
   2439 	itransfer = urb->usercontext;
   2440 	transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
   2441 
   2442 	usbi_dbg("urb type=%d status=%d transferred=%d", urb->type, urb->status,
   2443 		urb->actual_length);
   2444 
   2445 	switch (transfer->type) {
   2446 	case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
   2447 		return handle_iso_completion(itransfer, urb);
   2448 	case LIBUSB_TRANSFER_TYPE_BULK:
   2449 	case LIBUSB_TRANSFER_TYPE_INTERRUPT:
   2450 		return handle_bulk_completion(itransfer, urb);
   2451 	case LIBUSB_TRANSFER_TYPE_CONTROL:
   2452 		return handle_control_completion(itransfer, urb);
   2453 	default:
   2454 		usbi_err(HANDLE_CTX(handle), "unrecognised endpoint type %x",
   2455 			transfer->type);
   2456 		return LIBUSB_ERROR_OTHER;
   2457 	}
   2458 }
   2459 
   2460 static int op_handle_events(struct libusb_context *ctx,
   2461 	struct pollfd *fds, POLL_NFDS_TYPE nfds, int num_ready)
   2462 {
   2463 	int r;
   2464 	unsigned int i = 0;
   2465 
   2466 	usbi_mutex_lock(&ctx->open_devs_lock);
   2467 	for (i = 0; i < nfds && num_ready > 0; i++) {
   2468 		struct pollfd *pollfd = &fds[i];
   2469 		struct libusb_device_handle *handle;
   2470 		struct linux_device_handle_priv *hpriv = NULL;
   2471 
   2472 		if (!pollfd->revents)
   2473 			continue;
   2474 
   2475 		num_ready--;
   2476 		list_for_each_entry(handle, &ctx->open_devs, list, struct libusb_device_handle) {
   2477 			hpriv = _device_handle_priv(handle);
   2478 			if (hpriv->fd == pollfd->fd)
   2479 				break;
   2480 		}
   2481 
   2482 		if (pollfd->revents & POLLERR) {
   2483 			usbi_remove_pollfd(HANDLE_CTX(handle), hpriv->fd);
   2484 			usbi_handle_disconnect(handle);
   2485 			continue;
   2486 		}
   2487 
   2488 		do {
   2489 			r = reap_for_handle(handle);
   2490 		} while (r == 0);
   2491 		if (r == 1 || r == LIBUSB_ERROR_NO_DEVICE)
   2492 			continue;
   2493 		else if (r < 0)
   2494 			goto out;
   2495 	}
   2496 
   2497 	r = 0;
   2498 out:
   2499 	usbi_mutex_unlock(&ctx->open_devs_lock);
   2500 	return r;
   2501 }
   2502 
   2503 static int op_clock_gettime(int clk_id, struct timespec *tp)
   2504 {
   2505 	switch (clk_id) {
   2506 	case USBI_CLOCK_MONOTONIC:
   2507 		return clock_gettime(monotonic_clkid, tp);
   2508 	case USBI_CLOCK_REALTIME:
   2509 		return clock_gettime(CLOCK_REALTIME, tp);
   2510 	default:
   2511 		return LIBUSB_ERROR_INVALID_PARAM;
   2512   }
   2513 }
   2514 
   2515 #ifdef USBI_TIMERFD_AVAILABLE
   2516 static clockid_t op_get_timerfd_clockid(void)
   2517 {
   2518 	return monotonic_clkid;
   2519 
   2520 }
   2521 #endif
   2522 
   2523 const struct usbi_os_backend linux_usbfs_backend = {
   2524 	.name = "Linux usbfs",
   2525 	.caps = USBI_CAP_HAS_HID_ACCESS|USBI_CAP_SUPPORTS_DETACH_KERNEL_DRIVER,
   2526 	.init = op_init,
   2527 	.exit = op_exit,
   2528 	.get_device_list = NULL,
   2529 	.hotplug_poll = op_hotplug_poll,
   2530 	.get_device_descriptor = op_get_device_descriptor,
   2531 	.get_active_config_descriptor = op_get_active_config_descriptor,
   2532 	.get_config_descriptor = op_get_config_descriptor,
   2533 	.get_config_descriptor_by_value = op_get_config_descriptor_by_value,
   2534 
   2535 	.open = op_open,
   2536 	.close = op_close,
   2537 	.get_configuration = op_get_configuration,
   2538 	.set_configuration = op_set_configuration,
   2539 	.claim_interface = op_claim_interface,
   2540 	.release_interface = op_release_interface,
   2541 
   2542 	.set_interface_altsetting = op_set_interface,
   2543 	.clear_halt = op_clear_halt,
   2544 	.reset_device = op_reset_device,
   2545 
   2546 	.kernel_driver_active = op_kernel_driver_active,
   2547 	.detach_kernel_driver = op_detach_kernel_driver,
   2548 	.attach_kernel_driver = op_attach_kernel_driver,
   2549 
   2550 	.destroy_device = op_destroy_device,
   2551 
   2552 	.submit_transfer = op_submit_transfer,
   2553 	.cancel_transfer = op_cancel_transfer,
   2554 	.clear_transfer_priv = op_clear_transfer_priv,
   2555 
   2556 	.handle_events = op_handle_events,
   2557 
   2558 	.clock_gettime = op_clock_gettime,
   2559 
   2560 #ifdef USBI_TIMERFD_AVAILABLE
   2561 	.get_timerfd_clockid = op_get_timerfd_clockid,
   2562 #endif
   2563 
   2564 	.device_priv_size = sizeof(struct linux_device_priv),
   2565 	.device_handle_priv_size = sizeof(struct linux_device_handle_priv),
   2566 	.transfer_priv_size = sizeof(struct linux_transfer_priv),
   2567 	.add_iso_packet_size = 0,
   2568 };
   2569