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