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