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