]> rtime.felk.cvut.cz Git - lisovros/qemu_apohw.git/blob - usb-linux.c
Merge remote-tracking branch 'pm-arm/for-upstream' into pm
[lisovros/qemu_apohw.git] / usb-linux.c
1 /*
2  * Linux host USB redirector
3  *
4  * Copyright (c) 2005 Fabrice Bellard
5  *
6  * Copyright (c) 2008 Max Krasnyansky
7  *      Support for host device auto connect & disconnect
8  *      Major rewrite to support fully async operation
9  *
10  * Copyright 2008 TJ <linux@tjworld.net>
11  *      Added flexible support for /dev/bus/usb /sys/bus/usb/devices in addition
12  *      to the legacy /proc/bus/usb USB device discovery and handling
13  *
14  * Permission is hereby granted, free of charge, to any person obtaining a copy
15  * of this software and associated documentation files (the "Software"), to deal
16  * in the Software without restriction, including without limitation the rights
17  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
18  * copies of the Software, and to permit persons to whom the Software is
19  * furnished to do so, subject to the following conditions:
20  *
21  * The above copyright notice and this permission notice shall be included in
22  * all copies or substantial portions of the Software.
23  *
24  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
27  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
29  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
30  * THE SOFTWARE.
31  */
32
33 #include "qemu-common.h"
34 #include "qemu-timer.h"
35 #include "monitor.h"
36 #include "sysemu.h"
37
38 #include <dirent.h>
39 #include <sys/ioctl.h>
40
41 #include <linux/usbdevice_fs.h>
42 #include <linux/version.h>
43 #include "hw/usb.h"
44
45 /* We redefine it to avoid version problems */
46 struct usb_ctrltransfer {
47     uint8_t  bRequestType;
48     uint8_t  bRequest;
49     uint16_t wValue;
50     uint16_t wIndex;
51     uint16_t wLength;
52     uint32_t timeout;
53     void *data;
54 };
55
56 typedef int USBScanFunc(void *opaque, int bus_num, int addr, char *port,
57                         int class_id, int vendor_id, int product_id,
58                         const char *product_name, int speed);
59
60 //#define DEBUG
61
62 #ifdef DEBUG
63 #define DPRINTF printf
64 #else
65 #define DPRINTF(...)
66 #endif
67
68 #define USBDBG_DEVOPENED "husb: opened %s/devices\n"
69
70 #define USBPROCBUS_PATH "/proc/bus/usb"
71 #define PRODUCT_NAME_SZ 32
72 #define MAX_ENDPOINTS 15
73 #define MAX_PORTLEN 16
74 #define USBDEVBUS_PATH "/dev/bus/usb"
75 #define USBSYSBUS_PATH "/sys/bus/usb"
76
77 static char *usb_host_device_path;
78
79 #define USB_FS_NONE 0
80 #define USB_FS_PROC 1
81 #define USB_FS_DEV 2
82 #define USB_FS_SYS 3
83
84 static int usb_fs_type;
85
86 /* endpoint association data */
87 #define ISO_FRAME_DESC_PER_URB 32
88 #define INVALID_EP_TYPE 255
89
90 /* devio.c limits single requests to 16k */
91 #define MAX_USBFS_BUFFER_SIZE 16384
92
93 typedef struct AsyncURB AsyncURB;
94
95 struct endp_data {
96     uint8_t type;
97     uint8_t halted;
98     uint8_t iso_started;
99     AsyncURB *iso_urb;
100     int iso_urb_idx;
101     int iso_buffer_used;
102     int max_packet_size;
103     int inflight;
104 };
105
106 struct USBAutoFilter {
107     uint32_t bus_num;
108     uint32_t addr;
109     char     *port;
110     uint32_t vendor_id;
111     uint32_t product_id;
112 };
113
114 typedef struct USBHostDevice {
115     USBDevice dev;
116     int       fd;
117
118     uint8_t   descr[8192];
119     int       descr_len;
120     int       configuration;
121     int       ninterfaces;
122     int       closing;
123     uint32_t  iso_urb_count;
124     Notifier  exit;
125
126     struct endp_data endp_table[MAX_ENDPOINTS];
127     QLIST_HEAD(, AsyncURB) aurbs;
128
129     /* Host side address */
130     int bus_num;
131     int addr;
132     char port[MAX_PORTLEN];
133     struct USBAutoFilter match;
134
135     QTAILQ_ENTRY(USBHostDevice) next;
136 } USBHostDevice;
137
138 static QTAILQ_HEAD(, USBHostDevice) hostdevs = QTAILQ_HEAD_INITIALIZER(hostdevs);
139
140 static int usb_host_close(USBHostDevice *dev);
141 static int parse_filter(const char *spec, struct USBAutoFilter *f);
142 static void usb_host_auto_check(void *unused);
143 static int usb_host_read_file(char *line, size_t line_size,
144                             const char *device_file, const char *device_name);
145
146 static struct endp_data *get_endp(USBHostDevice *s, int ep)
147 {
148     return s->endp_table + ep - 1;
149 }
150
151 static int is_isoc(USBHostDevice *s, int ep)
152 {
153     return get_endp(s, ep)->type == USBDEVFS_URB_TYPE_ISO;
154 }
155
156 static int is_valid(USBHostDevice *s, int ep)
157 {
158     return get_endp(s, ep)->type != INVALID_EP_TYPE;
159 }
160
161 static int is_halted(USBHostDevice *s, int ep)
162 {
163     return get_endp(s, ep)->halted;
164 }
165
166 static void clear_halt(USBHostDevice *s, int ep)
167 {
168     get_endp(s, ep)->halted = 0;
169 }
170
171 static void set_halt(USBHostDevice *s, int ep)
172 {
173     get_endp(s, ep)->halted = 1;
174 }
175
176 static int is_iso_started(USBHostDevice *s, int ep)
177 {
178     return get_endp(s, ep)->iso_started;
179 }
180
181 static void clear_iso_started(USBHostDevice *s, int ep)
182 {
183     get_endp(s, ep)->iso_started = 0;
184 }
185
186 static void set_iso_started(USBHostDevice *s, int ep)
187 {
188     struct endp_data *e = get_endp(s, ep);
189     if (!e->iso_started) {
190         e->iso_started = 1;
191         e->inflight = 0;
192     }
193 }
194
195 static int change_iso_inflight(USBHostDevice *s, int ep, int value)
196 {
197     struct endp_data *e = get_endp(s, ep);
198
199     e->inflight += value;
200     return e->inflight;
201 }
202
203 static void set_iso_urb(USBHostDevice *s, int ep, AsyncURB *iso_urb)
204 {
205     get_endp(s, ep)->iso_urb = iso_urb;
206 }
207
208 static AsyncURB *get_iso_urb(USBHostDevice *s, int ep)
209 {
210     return get_endp(s, ep)->iso_urb;
211 }
212
213 static void set_iso_urb_idx(USBHostDevice *s, int ep, int i)
214 {
215     get_endp(s, ep)->iso_urb_idx = i;
216 }
217
218 static int get_iso_urb_idx(USBHostDevice *s, int ep)
219 {
220     return get_endp(s, ep)->iso_urb_idx;
221 }
222
223 static void set_iso_buffer_used(USBHostDevice *s, int ep, int i)
224 {
225     get_endp(s, ep)->iso_buffer_used = i;
226 }
227
228 static int get_iso_buffer_used(USBHostDevice *s, int ep)
229 {
230     return get_endp(s, ep)->iso_buffer_used;
231 }
232
233 static void set_max_packet_size(USBHostDevice *s, int ep, uint8_t *descriptor)
234 {
235     int raw = descriptor[4] + (descriptor[5] << 8);
236     int size, microframes;
237
238     size = raw & 0x7ff;
239     switch ((raw >> 11) & 3) {
240     case 1:  microframes = 2; break;
241     case 2:  microframes = 3; break;
242     default: microframes = 1; break;
243     }
244     get_endp(s, ep)->max_packet_size = size * microframes;
245 }
246
247 static int get_max_packet_size(USBHostDevice *s, int ep)
248 {
249     return get_endp(s, ep)->max_packet_size;
250 }
251
252 /*
253  * Async URB state.
254  * We always allocate iso packet descriptors even for bulk transfers
255  * to simplify allocation and casts.
256  */
257 struct AsyncURB
258 {
259     struct usbdevfs_urb urb;
260     struct usbdevfs_iso_packet_desc isocpd[ISO_FRAME_DESC_PER_URB];
261     USBHostDevice *hdev;
262     QLIST_ENTRY(AsyncURB) next;
263
264     /* For regular async urbs */
265     USBPacket     *packet;
266     int more; /* large transfer, more urbs follow */
267
268     /* For buffered iso handling */
269     int iso_frame_idx; /* -1 means in flight */
270 };
271
272 static AsyncURB *async_alloc(USBHostDevice *s)
273 {
274     AsyncURB *aurb = qemu_mallocz(sizeof(AsyncURB));
275     aurb->hdev = s;
276     QLIST_INSERT_HEAD(&s->aurbs, aurb, next);
277     return aurb;
278 }
279
280 static void async_free(AsyncURB *aurb)
281 {
282     QLIST_REMOVE(aurb, next);
283     qemu_free(aurb);
284 }
285
286 static void do_disconnect(USBHostDevice *s)
287 {
288     printf("husb: device %d.%d disconnected\n",
289            s->bus_num, s->addr);
290     usb_host_close(s);
291     usb_host_auto_check(NULL);
292 }
293
294 static void async_complete(void *opaque)
295 {
296     USBHostDevice *s = opaque;
297     AsyncURB *aurb;
298     int urbs = 0;
299
300     while (1) {
301         USBPacket *p;
302
303         int r = ioctl(s->fd, USBDEVFS_REAPURBNDELAY, &aurb);
304         if (r < 0) {
305             if (errno == EAGAIN) {
306                 if (urbs > 2) {
307                     fprintf(stderr, "husb: %d iso urbs finished at once\n", urbs);
308                 }
309                 return;
310             }
311             if (errno == ENODEV && !s->closing) {
312                 do_disconnect(s);
313                 return;
314             }
315
316             DPRINTF("husb: async. reap urb failed errno %d\n", errno);
317             return;
318         }
319
320         DPRINTF("husb: async completed. aurb %p status %d alen %d\n",
321                 aurb, aurb->urb.status, aurb->urb.actual_length);
322
323         /* If this is a buffered iso urb mark it as complete and don't do
324            anything else (it is handled further in usb_host_handle_iso_data) */
325         if (aurb->iso_frame_idx == -1) {
326             int inflight;
327             if (aurb->urb.status == -EPIPE) {
328                 set_halt(s, aurb->urb.endpoint & 0xf);
329             }
330             aurb->iso_frame_idx = 0;
331             urbs++;
332             inflight = change_iso_inflight(s, aurb->urb.endpoint & 0xf, -1);
333             if (inflight == 0 && is_iso_started(s, aurb->urb.endpoint & 0xf)) {
334                 fprintf(stderr, "husb: out of buffers for iso stream\n");
335             }
336             continue;
337         }
338
339         p = aurb->packet;
340
341         if (p) {
342             switch (aurb->urb.status) {
343             case 0:
344                 p->result += aurb->urb.actual_length;
345                 break;
346
347             case -EPIPE:
348                 set_halt(s, p->devep);
349                 p->result = USB_RET_STALL;
350                 break;
351
352             default:
353                 p->result = USB_RET_NAK;
354                 break;
355             }
356
357             if (aurb->urb.type == USBDEVFS_URB_TYPE_CONTROL) {
358                 usb_generic_async_ctrl_complete(&s->dev, p);
359             } else if (!aurb->more) {
360                 usb_packet_complete(&s->dev, p);
361             }
362         }
363
364         async_free(aurb);
365     }
366 }
367
368 static void usb_host_async_cancel(USBDevice *dev, USBPacket *p)
369 {
370     USBHostDevice *s = DO_UPCAST(USBHostDevice, dev, dev);
371     AsyncURB *aurb;
372
373     QLIST_FOREACH(aurb, &s->aurbs, next) {
374         if (p != aurb->packet) {
375             continue;
376         }
377
378         DPRINTF("husb: async cancel: packet %p, aurb %p\n", p, aurb);
379
380         /* Mark it as dead (see async_complete above) */
381         aurb->packet = NULL;
382
383         int r = ioctl(s->fd, USBDEVFS_DISCARDURB, aurb);
384         if (r < 0) {
385             DPRINTF("husb: async. discard urb failed errno %d\n", errno);
386         }
387     }
388 }
389
390 static int usb_host_claim_interfaces(USBHostDevice *dev, int configuration)
391 {
392     const char *op = NULL;
393     int dev_descr_len, config_descr_len;
394     int interface, nb_interfaces;
395     int ret, i;
396
397     if (configuration == 0) /* address state - ignore */
398         return 1;
399
400     DPRINTF("husb: claiming interfaces. config %d\n", configuration);
401
402     i = 0;
403     dev_descr_len = dev->descr[0];
404     if (dev_descr_len > dev->descr_len) {
405         fprintf(stderr, "husb: update iface failed. descr too short\n");
406         return 0;
407     }
408
409     i += dev_descr_len;
410     while (i < dev->descr_len) {
411         DPRINTF("husb: i is %d, descr_len is %d, dl %d, dt %d\n",
412                 i, dev->descr_len,
413                dev->descr[i], dev->descr[i+1]);
414
415         if (dev->descr[i+1] != USB_DT_CONFIG) {
416             i += dev->descr[i];
417             continue;
418         }
419         config_descr_len = dev->descr[i];
420
421         printf("husb: config #%d need %d\n", dev->descr[i + 5], configuration);
422
423         if (configuration < 0 || configuration == dev->descr[i + 5]) {
424             configuration = dev->descr[i + 5];
425             break;
426         }
427
428         i += config_descr_len;
429     }
430
431     if (i >= dev->descr_len) {
432         fprintf(stderr,
433                 "husb: update iface failed. no matching configuration\n");
434         return 0;
435     }
436     nb_interfaces = dev->descr[i + 4];
437
438 #ifdef USBDEVFS_DISCONNECT
439     /* earlier Linux 2.4 do not support that */
440     {
441         struct usbdevfs_ioctl ctrl;
442         for (interface = 0; interface < nb_interfaces; interface++) {
443             ctrl.ioctl_code = USBDEVFS_DISCONNECT;
444             ctrl.ifno = interface;
445             ctrl.data = 0;
446             op = "USBDEVFS_DISCONNECT";
447             ret = ioctl(dev->fd, USBDEVFS_IOCTL, &ctrl);
448             if (ret < 0 && errno != ENODATA) {
449                 goto fail;
450             }
451         }
452     }
453 #endif
454
455     /* XXX: only grab if all interfaces are free */
456     for (interface = 0; interface < nb_interfaces; interface++) {
457         op = "USBDEVFS_CLAIMINTERFACE";
458         ret = ioctl(dev->fd, USBDEVFS_CLAIMINTERFACE, &interface);
459         if (ret < 0) {
460             if (errno == EBUSY) {
461                 printf("husb: update iface. device already grabbed\n");
462             } else {
463                 perror("husb: failed to claim interface");
464             }
465             goto fail;
466         }
467     }
468
469     printf("husb: %d interfaces claimed for configuration %d\n",
470            nb_interfaces, configuration);
471
472     dev->ninterfaces   = nb_interfaces;
473     dev->configuration = configuration;
474     return 1;
475
476 fail:
477     if (errno == ENODEV) {
478         do_disconnect(dev);
479     }
480     perror(op);
481     return 0;
482 }
483
484 static int usb_host_release_interfaces(USBHostDevice *s)
485 {
486     int ret, i;
487
488     DPRINTF("husb: releasing interfaces\n");
489
490     for (i = 0; i < s->ninterfaces; i++) {
491         ret = ioctl(s->fd, USBDEVFS_RELEASEINTERFACE, &i);
492         if (ret < 0) {
493             perror("husb: failed to release interface");
494             return 0;
495         }
496     }
497
498     return 1;
499 }
500
501 static void usb_host_handle_reset(USBDevice *dev)
502 {
503     USBHostDevice *s = DO_UPCAST(USBHostDevice, dev, dev);
504
505     DPRINTF("husb: reset device %u.%u\n", s->bus_num, s->addr);
506
507     ioctl(s->fd, USBDEVFS_RESET);
508
509     usb_host_claim_interfaces(s, s->configuration);
510 }
511
512 static void usb_host_handle_destroy(USBDevice *dev)
513 {
514     USBHostDevice *s = (USBHostDevice *)dev;
515
516     usb_host_close(s);
517     QTAILQ_REMOVE(&hostdevs, s, next);
518     qemu_remove_exit_notifier(&s->exit);
519 }
520
521 static int usb_linux_update_endp_table(USBHostDevice *s);
522
523 /* iso data is special, we need to keep enough urbs in flight to make sure
524    that the controller never runs out of them, otherwise the device will
525    likely suffer a buffer underrun / overrun. */
526 static AsyncURB *usb_host_alloc_iso(USBHostDevice *s, uint8_t ep, int in)
527 {
528     AsyncURB *aurb;
529     int i, j, len = get_max_packet_size(s, ep);
530
531     aurb = qemu_mallocz(s->iso_urb_count * sizeof(*aurb));
532     for (i = 0; i < s->iso_urb_count; i++) {
533         aurb[i].urb.endpoint      = ep;
534         aurb[i].urb.buffer_length = ISO_FRAME_DESC_PER_URB * len;
535         aurb[i].urb.buffer        = qemu_malloc(aurb[i].urb.buffer_length);
536         aurb[i].urb.type          = USBDEVFS_URB_TYPE_ISO;
537         aurb[i].urb.flags         = USBDEVFS_URB_ISO_ASAP;
538         aurb[i].urb.number_of_packets = ISO_FRAME_DESC_PER_URB;
539         for (j = 0 ; j < ISO_FRAME_DESC_PER_URB; j++)
540             aurb[i].urb.iso_frame_desc[j].length = len;
541         if (in) {
542             aurb[i].urb.endpoint |= 0x80;
543             /* Mark as fully consumed (idle) */
544             aurb[i].iso_frame_idx = ISO_FRAME_DESC_PER_URB;
545         }
546     }
547     set_iso_urb(s, ep, aurb);
548
549     return aurb;
550 }
551
552 static void usb_host_stop_n_free_iso(USBHostDevice *s, uint8_t ep)
553 {
554     AsyncURB *aurb;
555     int i, ret, killed = 0, free = 1;
556
557     aurb = get_iso_urb(s, ep);
558     if (!aurb) {
559         return;
560     }
561
562     for (i = 0; i < s->iso_urb_count; i++) {
563         /* in flight? */
564         if (aurb[i].iso_frame_idx == -1) {
565             ret = ioctl(s->fd, USBDEVFS_DISCARDURB, &aurb[i]);
566             if (ret < 0) {
567                 printf("husb: discard isoc in urb failed errno %d\n", errno);
568                 free = 0;
569                 continue;
570             }
571             killed++;
572         }
573     }
574
575     /* Make sure any urbs we've killed are reaped before we free them */
576     if (killed) {
577         async_complete(s);
578     }
579
580     for (i = 0; i < s->iso_urb_count; i++) {
581         qemu_free(aurb[i].urb.buffer);
582     }
583
584     if (free)
585         qemu_free(aurb);
586     else
587         printf("husb: leaking iso urbs because of discard failure\n");
588     set_iso_urb(s, ep, NULL);
589     set_iso_urb_idx(s, ep, 0);
590     clear_iso_started(s, ep);
591 }
592
593 static int urb_status_to_usb_ret(int status)
594 {
595     switch (status) {
596     case -EPIPE:
597         return USB_RET_STALL;
598     default:
599         return USB_RET_NAK;
600     }
601 }
602
603 static int usb_host_handle_iso_data(USBHostDevice *s, USBPacket *p, int in)
604 {
605     AsyncURB *aurb;
606     int i, j, ret, max_packet_size, offset, len = 0;
607     uint8_t *buf;
608
609     max_packet_size = get_max_packet_size(s, p->devep);
610     if (max_packet_size == 0)
611         return USB_RET_NAK;
612
613     aurb = get_iso_urb(s, p->devep);
614     if (!aurb) {
615         aurb = usb_host_alloc_iso(s, p->devep, in);
616     }
617
618     i = get_iso_urb_idx(s, p->devep);
619     j = aurb[i].iso_frame_idx;
620     if (j >= 0 && j < ISO_FRAME_DESC_PER_URB) {
621         if (in) {
622             /* Check urb status  */
623             if (aurb[i].urb.status) {
624                 len = urb_status_to_usb_ret(aurb[i].urb.status);
625                 /* Move to the next urb */
626                 aurb[i].iso_frame_idx = ISO_FRAME_DESC_PER_URB - 1;
627             /* Check frame status */
628             } else if (aurb[i].urb.iso_frame_desc[j].status) {
629                 len = urb_status_to_usb_ret(
630                                         aurb[i].urb.iso_frame_desc[j].status);
631             /* Check the frame fits */
632             } else if (aurb[i].urb.iso_frame_desc[j].actual_length
633                        > p->iov.size) {
634                 printf("husb: received iso data is larger then packet\n");
635                 len = USB_RET_NAK;
636             /* All good copy data over */
637             } else {
638                 len = aurb[i].urb.iso_frame_desc[j].actual_length;
639                 buf  = aurb[i].urb.buffer +
640                     j * aurb[i].urb.iso_frame_desc[0].length;
641                 usb_packet_copy(p, buf, len);
642             }
643         } else {
644             len = p->iov.size;
645             offset = (j == 0) ? 0 : get_iso_buffer_used(s, p->devep);
646
647             /* Check the frame fits */
648             if (len > max_packet_size) {
649                 printf("husb: send iso data is larger then max packet size\n");
650                 return USB_RET_NAK;
651             }
652
653             /* All good copy data over */
654             usb_packet_copy(p, aurb[i].urb.buffer + offset, len);
655             aurb[i].urb.iso_frame_desc[j].length = len;
656             offset += len;
657             set_iso_buffer_used(s, p->devep, offset);
658
659             /* Start the stream once we have buffered enough data */
660             if (!is_iso_started(s, p->devep) && i == 1 && j == 8) {
661                 set_iso_started(s, p->devep);
662             }
663         }
664         aurb[i].iso_frame_idx++;
665         if (aurb[i].iso_frame_idx == ISO_FRAME_DESC_PER_URB) {
666             i = (i + 1) % s->iso_urb_count;
667             set_iso_urb_idx(s, p->devep, i);
668         }
669     } else {
670         if (in) {
671             set_iso_started(s, p->devep);
672         } else {
673             DPRINTF("hubs: iso out error no free buffer, dropping packet\n");
674         }
675     }
676
677     if (is_iso_started(s, p->devep)) {
678         /* (Re)-submit all fully consumed / filled urbs */
679         for (i = 0; i < s->iso_urb_count; i++) {
680             if (aurb[i].iso_frame_idx == ISO_FRAME_DESC_PER_URB) {
681                 ret = ioctl(s->fd, USBDEVFS_SUBMITURB, &aurb[i]);
682                 if (ret < 0) {
683                     printf("husb error submitting iso urb %d: %d\n", i, errno);
684                     if (!in || len == 0) {
685                         switch(errno) {
686                         case ETIMEDOUT:
687                             len = USB_RET_NAK;
688                             break;
689                         case EPIPE:
690                         default:
691                             len = USB_RET_STALL;
692                         }
693                     }
694                     break;
695                 }
696                 aurb[i].iso_frame_idx = -1;
697                 change_iso_inflight(s, p->devep, +1);
698             }
699         }
700     }
701
702     return len;
703 }
704
705 static int usb_host_handle_data(USBDevice *dev, USBPacket *p)
706 {
707     USBHostDevice *s = DO_UPCAST(USBHostDevice, dev, dev);
708     struct usbdevfs_urb *urb;
709     AsyncURB *aurb;
710     int ret, rem, prem, v;
711     uint8_t *pbuf;
712     uint8_t ep;
713
714     if (!is_valid(s, p->devep)) {
715         return USB_RET_NAK;
716     }
717
718     if (p->pid == USB_TOKEN_IN) {
719         ep = p->devep | 0x80;
720     } else {
721         ep = p->devep;
722     }
723
724     if (is_halted(s, p->devep)) {
725         ret = ioctl(s->fd, USBDEVFS_CLEAR_HALT, &ep);
726         if (ret < 0) {
727             DPRINTF("husb: failed to clear halt. ep 0x%x errno %d\n",
728                    ep, errno);
729             return USB_RET_NAK;
730         }
731         clear_halt(s, p->devep);
732     }
733
734     if (is_isoc(s, p->devep)) {
735         return usb_host_handle_iso_data(s, p, p->pid == USB_TOKEN_IN);
736     }
737
738     v = 0;
739     prem = p->iov.iov[v].iov_len;
740     pbuf = p->iov.iov[v].iov_base;
741     rem = p->iov.size;
742     while (rem) {
743         if (prem == 0) {
744             v++;
745             assert(v < p->iov.niov);
746             prem = p->iov.iov[v].iov_len;
747             pbuf = p->iov.iov[v].iov_base;
748             assert(prem <= rem);
749         }
750         aurb = async_alloc(s);
751         aurb->packet = p;
752
753         urb = &aurb->urb;
754         urb->endpoint      = ep;
755         urb->type          = USBDEVFS_URB_TYPE_BULK;
756         urb->usercontext   = s;
757         urb->buffer        = pbuf;
758         urb->buffer_length = prem;
759
760         if (urb->buffer_length > MAX_USBFS_BUFFER_SIZE) {
761             urb->buffer_length = MAX_USBFS_BUFFER_SIZE;
762         }
763         pbuf += urb->buffer_length;
764         prem -= urb->buffer_length;
765         rem  -= urb->buffer_length;
766         if (rem) {
767             aurb->more         = 1;
768         }
769
770         ret = ioctl(s->fd, USBDEVFS_SUBMITURB, urb);
771
772         DPRINTF("husb: data submit: ep 0x%x, len %u, more %d, packet %p, aurb %p\n",
773                 urb->endpoint, urb->buffer_length, aurb->more, p, aurb);
774
775         if (ret < 0) {
776             DPRINTF("husb: submit failed. errno %d\n", errno);
777             async_free(aurb);
778
779             switch(errno) {
780             case ETIMEDOUT:
781                 return USB_RET_NAK;
782             case EPIPE:
783             default:
784                 return USB_RET_STALL;
785             }
786         }
787     }
788
789     return USB_RET_ASYNC;
790 }
791
792 static int ctrl_error(void)
793 {
794     if (errno == ETIMEDOUT) {
795         return USB_RET_NAK;
796     } else {
797         return USB_RET_STALL;
798     }
799 }
800
801 static int usb_host_set_address(USBHostDevice *s, int addr)
802 {
803     DPRINTF("husb: ctrl set addr %u\n", addr);
804     s->dev.addr = addr;
805     return 0;
806 }
807
808 static int usb_host_set_config(USBHostDevice *s, int config)
809 {
810     usb_host_release_interfaces(s);
811
812     int ret = ioctl(s->fd, USBDEVFS_SETCONFIGURATION, &config);
813
814     DPRINTF("husb: ctrl set config %d ret %d errno %d\n", config, ret, errno);
815
816     if (ret < 0) {
817         return ctrl_error();
818     }
819     usb_host_claim_interfaces(s, config);
820     return 0;
821 }
822
823 static int usb_host_set_interface(USBHostDevice *s, int iface, int alt)
824 {
825     struct usbdevfs_setinterface si;
826     int i, ret;
827
828     for (i = 1; i <= MAX_ENDPOINTS; i++) {
829         if (is_isoc(s, i)) {
830             usb_host_stop_n_free_iso(s, i);
831         }
832     }
833
834     si.interface  = iface;
835     si.altsetting = alt;
836     ret = ioctl(s->fd, USBDEVFS_SETINTERFACE, &si);
837
838     DPRINTF("husb: ctrl set iface %d altset %d ret %d errno %d\n",
839             iface, alt, ret, errno);
840
841     if (ret < 0) {
842         return ctrl_error();
843     }
844     usb_linux_update_endp_table(s);
845     return 0;
846 }
847
848 static int usb_host_handle_control(USBDevice *dev, USBPacket *p,
849                int request, int value, int index, int length, uint8_t *data)
850 {
851     USBHostDevice *s = DO_UPCAST(USBHostDevice, dev, dev);
852     struct usbdevfs_urb *urb;
853     AsyncURB *aurb;
854     int ret;
855
856     /*
857      * Process certain standard device requests.
858      * These are infrequent and are processed synchronously.
859      */
860
861     /* Note request is (bRequestType << 8) | bRequest */
862     DPRINTF("husb: ctrl type 0x%x req 0x%x val 0x%x index %u len %u\n",
863             request >> 8, request & 0xff, value, index, length);
864
865     switch (request) {
866     case DeviceOutRequest | USB_REQ_SET_ADDRESS:
867         return usb_host_set_address(s, value);
868
869     case DeviceOutRequest | USB_REQ_SET_CONFIGURATION:
870         return usb_host_set_config(s, value & 0xff);
871
872     case InterfaceOutRequest | USB_REQ_SET_INTERFACE:
873         return usb_host_set_interface(s, index, value);
874     }
875
876     /* The rest are asynchronous */
877
878     if (length > sizeof(dev->data_buf)) {
879         fprintf(stderr, "husb: ctrl buffer too small (%d > %zu)\n",
880                 length, sizeof(dev->data_buf));
881         return USB_RET_STALL;
882     }
883
884     aurb = async_alloc(s);
885     aurb->packet = p;
886
887     /*
888      * Setup ctrl transfer.
889      *
890      * s->ctrl is laid out such that data buffer immediately follows
891      * 'req' struct which is exactly what usbdevfs expects.
892      */
893     urb = &aurb->urb;
894
895     urb->type     = USBDEVFS_URB_TYPE_CONTROL;
896     urb->endpoint = p->devep;
897
898     urb->buffer        = &dev->setup_buf;
899     urb->buffer_length = length + 8;
900
901     urb->usercontext = s;
902
903     ret = ioctl(s->fd, USBDEVFS_SUBMITURB, urb);
904
905     DPRINTF("husb: submit ctrl. len %u aurb %p\n", urb->buffer_length, aurb);
906
907     if (ret < 0) {
908         DPRINTF("husb: submit failed. errno %d\n", errno);
909         async_free(aurb);
910
911         switch(errno) {
912         case ETIMEDOUT:
913             return USB_RET_NAK;
914         case EPIPE:
915         default:
916             return USB_RET_STALL;
917         }
918     }
919
920     return USB_RET_ASYNC;
921 }
922
923 static int usb_linux_get_configuration(USBHostDevice *s)
924 {
925     uint8_t configuration;
926     struct usb_ctrltransfer ct;
927     int ret;
928
929     if (usb_fs_type == USB_FS_SYS) {
930         char device_name[32], line[1024];
931         int configuration;
932
933         sprintf(device_name, "%d-%s", s->bus_num, s->port);
934
935         if (!usb_host_read_file(line, sizeof(line), "bConfigurationValue",
936                                 device_name)) {
937             goto usbdevfs;
938         }
939         if (sscanf(line, "%d", &configuration) != 1) {
940             goto usbdevfs;
941         }
942         return configuration;
943     }
944
945 usbdevfs:
946     ct.bRequestType = USB_DIR_IN;
947     ct.bRequest = USB_REQ_GET_CONFIGURATION;
948     ct.wValue = 0;
949     ct.wIndex = 0;
950     ct.wLength = 1;
951     ct.data = &configuration;
952     ct.timeout = 50;
953
954     ret = ioctl(s->fd, USBDEVFS_CONTROL, &ct);
955     if (ret < 0) {
956         perror("usb_linux_get_configuration");
957         return -1;
958     }
959
960     /* in address state */
961     if (configuration == 0) {
962         return -1;
963     }
964
965     return configuration;
966 }
967
968 static uint8_t usb_linux_get_alt_setting(USBHostDevice *s,
969     uint8_t configuration, uint8_t interface)
970 {
971     uint8_t alt_setting;
972     struct usb_ctrltransfer ct;
973     int ret;
974
975     if (usb_fs_type == USB_FS_SYS) {
976         char device_name[64], line[1024];
977         int alt_setting;
978
979         sprintf(device_name, "%d-%s:%d.%d", s->bus_num, s->port,
980                 (int)configuration, (int)interface);
981
982         if (!usb_host_read_file(line, sizeof(line), "bAlternateSetting",
983                                 device_name)) {
984             goto usbdevfs;
985         }
986         if (sscanf(line, "%d", &alt_setting) != 1) {
987             goto usbdevfs;
988         }
989         return alt_setting;
990     }
991
992 usbdevfs:
993     ct.bRequestType = USB_DIR_IN | USB_RECIP_INTERFACE;
994     ct.bRequest = USB_REQ_GET_INTERFACE;
995     ct.wValue = 0;
996     ct.wIndex = interface;
997     ct.wLength = 1;
998     ct.data = &alt_setting;
999     ct.timeout = 50;
1000     ret = ioctl(s->fd, USBDEVFS_CONTROL, &ct);
1001     if (ret < 0) {
1002         /* Assume alt 0 on error */
1003         return 0;
1004     }
1005
1006     return alt_setting;
1007 }
1008
1009 /* returns 1 on problem encountered or 0 for success */
1010 static int usb_linux_update_endp_table(USBHostDevice *s)
1011 {
1012     uint8_t *descriptors;
1013     uint8_t devep, type, configuration, alt_interface;
1014     int interface, length, i;
1015
1016     for (i = 0; i < MAX_ENDPOINTS; i++)
1017         s->endp_table[i].type = INVALID_EP_TYPE;
1018
1019     i = usb_linux_get_configuration(s);
1020     if (i < 0)
1021         return 1;
1022     configuration = i;
1023
1024     /* get the desired configuration, interface, and endpoint descriptors
1025      * from device description */
1026     descriptors = &s->descr[18];
1027     length = s->descr_len - 18;
1028     i = 0;
1029
1030     if (descriptors[i + 1] != USB_DT_CONFIG ||
1031         descriptors[i + 5] != configuration) {
1032         DPRINTF("invalid descriptor data - configuration\n");
1033         return 1;
1034     }
1035     i += descriptors[i];
1036
1037     while (i < length) {
1038         if (descriptors[i + 1] != USB_DT_INTERFACE ||
1039             (descriptors[i + 1] == USB_DT_INTERFACE &&
1040              descriptors[i + 4] == 0)) {
1041             i += descriptors[i];
1042             continue;
1043         }
1044
1045         interface = descriptors[i + 2];
1046         alt_interface = usb_linux_get_alt_setting(s, configuration, interface);
1047
1048         /* the current interface descriptor is the active interface
1049          * and has endpoints */
1050         if (descriptors[i + 3] != alt_interface) {
1051             i += descriptors[i];
1052             continue;
1053         }
1054
1055         /* advance to the endpoints */
1056         while (i < length && descriptors[i +1] != USB_DT_ENDPOINT) {
1057             i += descriptors[i];
1058         }
1059
1060         if (i >= length)
1061             break;
1062
1063         while (i < length) {
1064             if (descriptors[i + 1] != USB_DT_ENDPOINT) {
1065                 break;
1066             }
1067
1068             devep = descriptors[i + 2];
1069             if ((devep & 0x0f) == 0) {
1070                 fprintf(stderr, "usb-linux: invalid ep descriptor, ep == 0\n");
1071                 return 1;
1072             }
1073
1074             switch (descriptors[i + 3] & 0x3) {
1075             case 0x00:
1076                 type = USBDEVFS_URB_TYPE_CONTROL;
1077                 break;
1078             case 0x01:
1079                 type = USBDEVFS_URB_TYPE_ISO;
1080                 set_max_packet_size(s, (devep & 0xf), descriptors + i);
1081                 break;
1082             case 0x02:
1083                 type = USBDEVFS_URB_TYPE_BULK;
1084                 break;
1085             case 0x03:
1086                 type = USBDEVFS_URB_TYPE_INTERRUPT;
1087                 break;
1088             default:
1089                 DPRINTF("usb_host: malformed endpoint type\n");
1090                 type = USBDEVFS_URB_TYPE_BULK;
1091             }
1092             s->endp_table[(devep & 0xf) - 1].type = type;
1093             s->endp_table[(devep & 0xf) - 1].halted = 0;
1094
1095             i += descriptors[i];
1096         }
1097     }
1098     return 0;
1099 }
1100
1101 /*
1102  * Check if we can safely redirect a usb2 device to a usb1 virtual controller,
1103  * this function assumes this is safe, if:
1104  * 1) There are no isoc endpoints
1105  * 2) There are no interrupt endpoints with a max_packet_size > 64
1106  * Note bulk endpoints with a max_packet_size > 64 in theory also are not
1107  * usb1 compatible, but in practice this seems to work fine.
1108  */
1109 static int usb_linux_full_speed_compat(USBHostDevice *dev)
1110 {
1111     int i, packet_size;
1112
1113     /*
1114      * usb_linux_update_endp_table only registers info about ep in the current
1115      * interface altsettings, so we need to parse the descriptors again.
1116      */
1117     for (i = 0; (i + 5) < dev->descr_len; i += dev->descr[i]) {
1118         if (dev->descr[i + 1] == USB_DT_ENDPOINT) {
1119             switch (dev->descr[i + 3] & 0x3) {
1120             case 0x00: /* CONTROL */
1121                 break;
1122             case 0x01: /* ISO */
1123                 return 0;
1124             case 0x02: /* BULK */
1125                 break;
1126             case 0x03: /* INTERRUPT */
1127                 packet_size = dev->descr[i + 4] + (dev->descr[i + 5] << 8);
1128                 if (packet_size > 64)
1129                     return 0;
1130                 break;
1131             }
1132         }
1133     }
1134     return 1;
1135 }
1136
1137 static int usb_host_open(USBHostDevice *dev, int bus_num,
1138                         int addr, char *port, const char *prod_name, int speed)
1139 {
1140     int fd = -1, ret;
1141     char buf[1024];
1142
1143     if (dev->fd != -1) {
1144         goto fail;
1145     }
1146     printf("husb: open device %d.%d\n", bus_num, addr);
1147
1148     if (!usb_host_device_path) {
1149         perror("husb: USB Host Device Path not set");
1150         goto fail;
1151     }
1152     snprintf(buf, sizeof(buf), "%s/%03d/%03d", usb_host_device_path,
1153              bus_num, addr);
1154     fd = open(buf, O_RDWR | O_NONBLOCK);
1155     if (fd < 0) {
1156         perror(buf);
1157         goto fail;
1158     }
1159     DPRINTF("husb: opened %s\n", buf);
1160
1161     dev->bus_num = bus_num;
1162     dev->addr = addr;
1163     strcpy(dev->port, port);
1164     dev->fd = fd;
1165
1166     /* read the device description */
1167     dev->descr_len = read(fd, dev->descr, sizeof(dev->descr));
1168     if (dev->descr_len <= 0) {
1169         perror("husb: reading device data failed");
1170         goto fail;
1171     }
1172
1173 #ifdef DEBUG
1174     {
1175         int x;
1176         printf("=== begin dumping device descriptor data ===\n");
1177         for (x = 0; x < dev->descr_len; x++) {
1178             printf("%02x ", dev->descr[x]);
1179         }
1180         printf("\n=== end dumping device descriptor data ===\n");
1181     }
1182 #endif
1183
1184
1185     /*
1186      * Initial configuration is -1 which makes us claim first
1187      * available config. We used to start with 1, which does not
1188      * always work. I've seen devices where first config starts
1189      * with 2.
1190      */
1191     if (!usb_host_claim_interfaces(dev, -1)) {
1192         goto fail;
1193     }
1194
1195     ret = usb_linux_update_endp_table(dev);
1196     if (ret) {
1197         goto fail;
1198     }
1199
1200     if (speed == -1) {
1201         struct usbdevfs_connectinfo ci;
1202
1203         ret = ioctl(fd, USBDEVFS_CONNECTINFO, &ci);
1204         if (ret < 0) {
1205             perror("usb_host_device_open: USBDEVFS_CONNECTINFO");
1206             goto fail;
1207         }
1208
1209         if (ci.slow) {
1210             speed = USB_SPEED_LOW;
1211         } else {
1212             speed = USB_SPEED_HIGH;
1213         }
1214     }
1215     dev->dev.speed = speed;
1216     dev->dev.speedmask = (1 << speed);
1217     if (dev->dev.speed == USB_SPEED_HIGH && usb_linux_full_speed_compat(dev)) {
1218         dev->dev.speedmask |= USB_SPEED_MASK_FULL;
1219     }
1220
1221     printf("husb: grabbed usb device %d.%d\n", bus_num, addr);
1222
1223     if (!prod_name || prod_name[0] == '\0') {
1224         snprintf(dev->dev.product_desc, sizeof(dev->dev.product_desc),
1225                  "host:%d.%d", bus_num, addr);
1226     } else {
1227         pstrcpy(dev->dev.product_desc, sizeof(dev->dev.product_desc),
1228                 prod_name);
1229     }
1230
1231     ret = usb_device_attach(&dev->dev);
1232     if (ret) {
1233         goto fail;
1234     }
1235
1236     /* USB devio uses 'write' flag to check for async completions */
1237     qemu_set_fd_handler(dev->fd, NULL, async_complete, dev);
1238
1239     return 0;
1240
1241 fail:
1242     if (dev->fd != -1) {
1243         close(dev->fd);
1244         dev->fd = -1;
1245     }
1246     return -1;
1247 }
1248
1249 static int usb_host_close(USBHostDevice *dev)
1250 {
1251     int i;
1252
1253     if (dev->fd == -1 || !dev->dev.attached) {
1254         return -1;
1255     }
1256
1257     qemu_set_fd_handler(dev->fd, NULL, NULL, NULL);
1258     dev->closing = 1;
1259     for (i = 1; i <= MAX_ENDPOINTS; i++) {
1260         if (is_isoc(dev, i)) {
1261             usb_host_stop_n_free_iso(dev, i);
1262         }
1263     }
1264     async_complete(dev);
1265     dev->closing = 0;
1266     usb_device_detach(&dev->dev);
1267     ioctl(dev->fd, USBDEVFS_RESET);
1268     close(dev->fd);
1269     dev->fd = -1;
1270     return 0;
1271 }
1272
1273 static void usb_host_exit_notifier(struct Notifier *n, void *data)
1274 {
1275     USBHostDevice *s = container_of(n, USBHostDevice, exit);
1276
1277     if (s->fd != -1) {
1278         ioctl(s->fd, USBDEVFS_RESET);
1279     }
1280 }
1281
1282 static int usb_host_initfn(USBDevice *dev)
1283 {
1284     USBHostDevice *s = DO_UPCAST(USBHostDevice, dev, dev);
1285
1286     dev->auto_attach = 0;
1287     s->fd = -1;
1288     QTAILQ_INSERT_TAIL(&hostdevs, s, next);
1289     s->exit.notify = usb_host_exit_notifier;
1290     qemu_add_exit_notifier(&s->exit);
1291     usb_host_auto_check(NULL);
1292     return 0;
1293 }
1294
1295 static struct USBDeviceInfo usb_host_dev_info = {
1296     .product_desc   = "USB Host Device",
1297     .qdev.name      = "usb-host",
1298     .qdev.size      = sizeof(USBHostDevice),
1299     .init           = usb_host_initfn,
1300     .handle_packet  = usb_generic_handle_packet,
1301     .cancel_packet  = usb_host_async_cancel,
1302     .handle_data    = usb_host_handle_data,
1303     .handle_control = usb_host_handle_control,
1304     .handle_reset   = usb_host_handle_reset,
1305     .handle_destroy = usb_host_handle_destroy,
1306     .usbdevice_name = "host",
1307     .usbdevice_init = usb_host_device_open,
1308     .qdev.props     = (Property[]) {
1309         DEFINE_PROP_UINT32("hostbus",  USBHostDevice, match.bus_num,    0),
1310         DEFINE_PROP_UINT32("hostaddr", USBHostDevice, match.addr,       0),
1311         DEFINE_PROP_STRING("hostport", USBHostDevice, match.port),
1312         DEFINE_PROP_HEX32("vendorid",  USBHostDevice, match.vendor_id,  0),
1313         DEFINE_PROP_HEX32("productid", USBHostDevice, match.product_id, 0),
1314         DEFINE_PROP_UINT32("isobufs",  USBHostDevice, iso_urb_count,    4),
1315         DEFINE_PROP_END_OF_LIST(),
1316     },
1317 };
1318
1319 static void usb_host_register_devices(void)
1320 {
1321     usb_qdev_register(&usb_host_dev_info);
1322 }
1323 device_init(usb_host_register_devices)
1324
1325 USBDevice *usb_host_device_open(const char *devname)
1326 {
1327     struct USBAutoFilter filter;
1328     USBDevice *dev;
1329     char *p;
1330
1331     dev = usb_create(NULL /* FIXME */, "usb-host");
1332
1333     if (strstr(devname, "auto:")) {
1334         if (parse_filter(devname, &filter) < 0) {
1335             goto fail;
1336         }
1337     } else {
1338         if ((p = strchr(devname, '.'))) {
1339             filter.bus_num    = strtoul(devname, NULL, 0);
1340             filter.addr       = strtoul(p + 1, NULL, 0);
1341             filter.vendor_id  = 0;
1342             filter.product_id = 0;
1343         } else if ((p = strchr(devname, ':'))) {
1344             filter.bus_num    = 0;
1345             filter.addr       = 0;
1346             filter.vendor_id  = strtoul(devname, NULL, 16);
1347             filter.product_id = strtoul(p + 1, NULL, 16);
1348         } else {
1349             goto fail;
1350         }
1351     }
1352
1353     qdev_prop_set_uint32(&dev->qdev, "hostbus",   filter.bus_num);
1354     qdev_prop_set_uint32(&dev->qdev, "hostaddr",  filter.addr);
1355     qdev_prop_set_uint32(&dev->qdev, "vendorid",  filter.vendor_id);
1356     qdev_prop_set_uint32(&dev->qdev, "productid", filter.product_id);
1357     qdev_init_nofail(&dev->qdev);
1358     return dev;
1359
1360 fail:
1361     qdev_free(&dev->qdev);
1362     return NULL;
1363 }
1364
1365 int usb_host_device_close(const char *devname)
1366 {
1367 #if 0
1368     char product_name[PRODUCT_NAME_SZ];
1369     int bus_num, addr;
1370     USBHostDevice *s;
1371
1372     if (strstr(devname, "auto:")) {
1373         return usb_host_auto_del(devname);
1374     }
1375     if (usb_host_find_device(&bus_num, &addr, product_name,
1376                                     sizeof(product_name), devname) < 0) {
1377         return -1;
1378     }
1379     s = hostdev_find(bus_num, addr);
1380     if (s) {
1381         usb_device_delete_addr(s->bus_num, s->dev.addr);
1382         return 0;
1383     }
1384 #endif
1385
1386     return -1;
1387 }
1388
1389 static int get_tag_value(char *buf, int buf_size,
1390                          const char *str, const char *tag,
1391                          const char *stopchars)
1392 {
1393     const char *p;
1394     char *q;
1395     p = strstr(str, tag);
1396     if (!p) {
1397         return -1;
1398     }
1399     p += strlen(tag);
1400     while (qemu_isspace(*p)) {
1401         p++;
1402     }
1403     q = buf;
1404     while (*p != '\0' && !strchr(stopchars, *p)) {
1405         if ((q - buf) < (buf_size - 1)) {
1406             *q++ = *p;
1407         }
1408         p++;
1409     }
1410     *q = '\0';
1411     return q - buf;
1412 }
1413
1414 /*
1415  * Use /proc/bus/usb/devices or /dev/bus/usb/devices file to determine
1416  * host's USB devices. This is legacy support since many distributions
1417  * are moving to /sys/bus/usb
1418  */
1419 static int usb_host_scan_dev(void *opaque, USBScanFunc *func)
1420 {
1421     FILE *f = NULL;
1422     char line[1024];
1423     char buf[1024];
1424     int bus_num, addr, speed, device_count, class_id, product_id, vendor_id;
1425     char product_name[512];
1426     int ret = 0;
1427
1428     if (!usb_host_device_path) {
1429         perror("husb: USB Host Device Path not set");
1430         goto the_end;
1431     }
1432     snprintf(line, sizeof(line), "%s/devices", usb_host_device_path);
1433     f = fopen(line, "r");
1434     if (!f) {
1435         perror("husb: cannot open devices file");
1436         goto the_end;
1437     }
1438
1439     device_count = 0;
1440     bus_num = addr = class_id = product_id = vendor_id = 0;
1441     speed = -1; /* Can't get the speed from /[proc|dev]/bus/usb/devices */
1442     for(;;) {
1443         if (fgets(line, sizeof(line), f) == NULL) {
1444             break;
1445         }
1446         if (strlen(line) > 0) {
1447             line[strlen(line) - 1] = '\0';
1448         }
1449         if (line[0] == 'T' && line[1] == ':') {
1450             if (device_count && (vendor_id || product_id)) {
1451                 /* New device.  Add the previously discovered device.  */
1452                 ret = func(opaque, bus_num, addr, 0, class_id, vendor_id,
1453                            product_id, product_name, speed);
1454                 if (ret) {
1455                     goto the_end;
1456                 }
1457             }
1458             if (get_tag_value(buf, sizeof(buf), line, "Bus=", " ") < 0) {
1459                 goto fail;
1460             }
1461             bus_num = atoi(buf);
1462             if (get_tag_value(buf, sizeof(buf), line, "Dev#=", " ") < 0) {
1463                 goto fail;
1464             }
1465             addr = atoi(buf);
1466             if (get_tag_value(buf, sizeof(buf), line, "Spd=", " ") < 0) {
1467                 goto fail;
1468             }
1469             if (!strcmp(buf, "5000")) {
1470                 speed = USB_SPEED_SUPER;
1471             } else if (!strcmp(buf, "480")) {
1472                 speed = USB_SPEED_HIGH;
1473             } else if (!strcmp(buf, "1.5")) {
1474                 speed = USB_SPEED_LOW;
1475             } else {
1476                 speed = USB_SPEED_FULL;
1477             }
1478             product_name[0] = '\0';
1479             class_id = 0xff;
1480             device_count++;
1481             product_id = 0;
1482             vendor_id = 0;
1483         } else if (line[0] == 'P' && line[1] == ':') {
1484             if (get_tag_value(buf, sizeof(buf), line, "Vendor=", " ") < 0) {
1485                 goto fail;
1486             }
1487             vendor_id = strtoul(buf, NULL, 16);
1488             if (get_tag_value(buf, sizeof(buf), line, "ProdID=", " ") < 0) {
1489                 goto fail;
1490             }
1491             product_id = strtoul(buf, NULL, 16);
1492         } else if (line[0] == 'S' && line[1] == ':') {
1493             if (get_tag_value(buf, sizeof(buf), line, "Product=", "") < 0) {
1494                 goto fail;
1495             }
1496             pstrcpy(product_name, sizeof(product_name), buf);
1497         } else if (line[0] == 'D' && line[1] == ':') {
1498             if (get_tag_value(buf, sizeof(buf), line, "Cls=", " (") < 0) {
1499                 goto fail;
1500             }
1501             class_id = strtoul(buf, NULL, 16);
1502         }
1503     fail: ;
1504     }
1505     if (device_count && (vendor_id || product_id)) {
1506         /* Add the last device.  */
1507         ret = func(opaque, bus_num, addr, 0, class_id, vendor_id,
1508                    product_id, product_name, speed);
1509     }
1510  the_end:
1511     if (f) {
1512         fclose(f);
1513     }
1514     return ret;
1515 }
1516
1517 /*
1518  * Read sys file-system device file
1519  *
1520  * @line address of buffer to put file contents in
1521  * @line_size size of line
1522  * @device_file path to device file (printf format string)
1523  * @device_name device being opened (inserted into device_file)
1524  *
1525  * @return 0 failed, 1 succeeded ('line' contains data)
1526  */
1527 static int usb_host_read_file(char *line, size_t line_size,
1528                               const char *device_file, const char *device_name)
1529 {
1530     FILE *f;
1531     int ret = 0;
1532     char filename[PATH_MAX];
1533
1534     snprintf(filename, PATH_MAX, USBSYSBUS_PATH "/devices/%s/%s", device_name,
1535              device_file);
1536     f = fopen(filename, "r");
1537     if (f) {
1538         ret = fgets(line, line_size, f) != NULL;
1539         fclose(f);
1540     }
1541
1542     return ret;
1543 }
1544
1545 /*
1546  * Use /sys/bus/usb/devices/ directory to determine host's USB
1547  * devices.
1548  *
1549  * This code is based on Robert Schiele's original patches posted to
1550  * the Novell bug-tracker https://bugzilla.novell.com/show_bug.cgi?id=241950
1551  */
1552 static int usb_host_scan_sys(void *opaque, USBScanFunc *func)
1553 {
1554     DIR *dir = NULL;
1555     char line[1024];
1556     int bus_num, addr, speed, class_id, product_id, vendor_id;
1557     int ret = 0;
1558     char port[MAX_PORTLEN];
1559     char product_name[512];
1560     struct dirent *de;
1561
1562     dir = opendir(USBSYSBUS_PATH "/devices");
1563     if (!dir) {
1564         perror("husb: cannot open devices directory");
1565         goto the_end;
1566     }
1567
1568     while ((de = readdir(dir))) {
1569         if (de->d_name[0] != '.' && !strchr(de->d_name, ':')) {
1570             if (sscanf(de->d_name, "%d-%7[0-9.]", &bus_num, port) < 2) {
1571                 continue;
1572             }
1573
1574             if (!usb_host_read_file(line, sizeof(line), "devnum", de->d_name)) {
1575                 goto the_end;
1576             }
1577             if (sscanf(line, "%d", &addr) != 1) {
1578                 goto the_end;
1579             }
1580             if (!usb_host_read_file(line, sizeof(line), "bDeviceClass",
1581                                     de->d_name)) {
1582                 goto the_end;
1583             }
1584             if (sscanf(line, "%x", &class_id) != 1) {
1585                 goto the_end;
1586             }
1587
1588             if (!usb_host_read_file(line, sizeof(line), "idVendor",
1589                                     de->d_name)) {
1590                 goto the_end;
1591             }
1592             if (sscanf(line, "%x", &vendor_id) != 1) {
1593                 goto the_end;
1594             }
1595             if (!usb_host_read_file(line, sizeof(line), "idProduct",
1596                                     de->d_name)) {
1597                 goto the_end;
1598             }
1599             if (sscanf(line, "%x", &product_id) != 1) {
1600                 goto the_end;
1601             }
1602             if (!usb_host_read_file(line, sizeof(line), "product",
1603                                     de->d_name)) {
1604                 *product_name = 0;
1605             } else {
1606                 if (strlen(line) > 0) {
1607                     line[strlen(line) - 1] = '\0';
1608                 }
1609                 pstrcpy(product_name, sizeof(product_name), line);
1610             }
1611
1612             if (!usb_host_read_file(line, sizeof(line), "speed", de->d_name)) {
1613                 goto the_end;
1614             }
1615             if (!strcmp(line, "5000\n")) {
1616                 speed = USB_SPEED_SUPER;
1617             } else if (!strcmp(line, "480\n")) {
1618                 speed = USB_SPEED_HIGH;
1619             } else if (!strcmp(line, "1.5\n")) {
1620                 speed = USB_SPEED_LOW;
1621             } else {
1622                 speed = USB_SPEED_FULL;
1623             }
1624
1625             ret = func(opaque, bus_num, addr, port, class_id, vendor_id,
1626                        product_id, product_name, speed);
1627             if (ret) {
1628                 goto the_end;
1629             }
1630         }
1631     }
1632  the_end:
1633     if (dir) {
1634         closedir(dir);
1635     }
1636     return ret;
1637 }
1638
1639 /*
1640  * Determine how to access the host's USB devices and call the
1641  * specific support function.
1642  */
1643 static int usb_host_scan(void *opaque, USBScanFunc *func)
1644 {
1645     Monitor *mon = cur_mon;
1646     FILE *f = NULL;
1647     DIR *dir = NULL;
1648     int ret = 0;
1649     const char *fs_type[] = {"unknown", "proc", "dev", "sys"};
1650     char devpath[PATH_MAX];
1651
1652     /* only check the host once */
1653     if (!usb_fs_type) {
1654         dir = opendir(USBSYSBUS_PATH "/devices");
1655         if (dir) {
1656             /* devices found in /dev/bus/usb/ (yes - not a mistake!) */
1657             strcpy(devpath, USBDEVBUS_PATH);
1658             usb_fs_type = USB_FS_SYS;
1659             closedir(dir);
1660             DPRINTF(USBDBG_DEVOPENED, USBSYSBUS_PATH);
1661             goto found_devices;
1662         }
1663         f = fopen(USBPROCBUS_PATH "/devices", "r");
1664         if (f) {
1665             /* devices found in /proc/bus/usb/ */
1666             strcpy(devpath, USBPROCBUS_PATH);
1667             usb_fs_type = USB_FS_PROC;
1668             fclose(f);
1669             DPRINTF(USBDBG_DEVOPENED, USBPROCBUS_PATH);
1670             goto found_devices;
1671         }
1672         /* try additional methods if an access method hasn't been found yet */
1673         f = fopen(USBDEVBUS_PATH "/devices", "r");
1674         if (f) {
1675             /* devices found in /dev/bus/usb/ */
1676             strcpy(devpath, USBDEVBUS_PATH);
1677             usb_fs_type = USB_FS_DEV;
1678             fclose(f);
1679             DPRINTF(USBDBG_DEVOPENED, USBDEVBUS_PATH);
1680             goto found_devices;
1681         }
1682     found_devices:
1683         if (!usb_fs_type) {
1684             if (mon) {
1685                 monitor_printf(mon, "husb: unable to access USB devices\n");
1686             }
1687             return -ENOENT;
1688         }
1689
1690         /* the module setting (used later for opening devices) */
1691         usb_host_device_path = qemu_mallocz(strlen(devpath)+1);
1692         strcpy(usb_host_device_path, devpath);
1693         if (mon) {
1694             monitor_printf(mon, "husb: using %s file-system with %s\n",
1695                            fs_type[usb_fs_type], usb_host_device_path);
1696         }
1697     }
1698
1699     switch (usb_fs_type) {
1700     case USB_FS_PROC:
1701     case USB_FS_DEV:
1702         ret = usb_host_scan_dev(opaque, func);
1703         break;
1704     case USB_FS_SYS:
1705         ret = usb_host_scan_sys(opaque, func);
1706         break;
1707     default:
1708         ret = -EINVAL;
1709         break;
1710     }
1711     return ret;
1712 }
1713
1714 static QEMUTimer *usb_auto_timer;
1715
1716 static int usb_host_auto_scan(void *opaque, int bus_num, int addr, char *port,
1717                               int class_id, int vendor_id, int product_id,
1718                               const char *product_name, int speed)
1719 {
1720     struct USBAutoFilter *f;
1721     struct USBHostDevice *s;
1722
1723     /* Ignore hubs */
1724     if (class_id == 9)
1725         return 0;
1726
1727     QTAILQ_FOREACH(s, &hostdevs, next) {
1728         f = &s->match;
1729
1730         if (f->bus_num > 0 && f->bus_num != bus_num) {
1731             continue;
1732         }
1733         if (f->addr > 0 && f->addr != addr) {
1734             continue;
1735         }
1736         if (f->port != NULL && (port == NULL || strcmp(f->port, port) != 0)) {
1737             continue;
1738         }
1739
1740         if (f->vendor_id > 0 && f->vendor_id != vendor_id) {
1741             continue;
1742         }
1743
1744         if (f->product_id > 0 && f->product_id != product_id) {
1745             continue;
1746         }
1747         /* We got a match */
1748
1749         /* Already attached ? */
1750         if (s->fd != -1) {
1751             return 0;
1752         }
1753         DPRINTF("husb: auto open: bus_num %d addr %d\n", bus_num, addr);
1754
1755         usb_host_open(s, bus_num, addr, port, product_name, speed);
1756         break;
1757     }
1758
1759     return 0;
1760 }
1761
1762 static void usb_host_auto_check(void *unused)
1763 {
1764     struct USBHostDevice *s;
1765     int unconnected = 0;
1766
1767     usb_host_scan(NULL, usb_host_auto_scan);
1768
1769     QTAILQ_FOREACH(s, &hostdevs, next) {
1770         if (s->fd == -1) {
1771             unconnected++;
1772         }
1773     }
1774
1775     if (unconnected == 0) {
1776         /* nothing to watch */
1777         if (usb_auto_timer) {
1778             qemu_del_timer(usb_auto_timer);
1779         }
1780         return;
1781     }
1782
1783     if (!usb_auto_timer) {
1784         usb_auto_timer = qemu_new_timer_ms(rt_clock, usb_host_auto_check, NULL);
1785         if (!usb_auto_timer) {
1786             return;
1787         }
1788     }
1789     qemu_mod_timer(usb_auto_timer, qemu_get_clock_ms(rt_clock) + 2000);
1790 }
1791
1792 /*
1793  * Autoconnect filter
1794  * Format:
1795  *    auto:bus:dev[:vid:pid]
1796  *    auto:bus.dev[:vid:pid]
1797  *
1798  *    bus  - bus number    (dec, * means any)
1799  *    dev  - device number (dec, * means any)
1800  *    vid  - vendor id     (hex, * means any)
1801  *    pid  - product id    (hex, * means any)
1802  *
1803  *    See 'lsusb' output.
1804  */
1805 static int parse_filter(const char *spec, struct USBAutoFilter *f)
1806 {
1807     enum { BUS, DEV, VID, PID, DONE };
1808     const char *p = spec;
1809     int i;
1810
1811     f->bus_num    = 0;
1812     f->addr       = 0;
1813     f->vendor_id  = 0;
1814     f->product_id = 0;
1815
1816     for (i = BUS; i < DONE; i++) {
1817         p = strpbrk(p, ":.");
1818         if (!p) {
1819             break;
1820         }
1821         p++;
1822
1823         if (*p == '*') {
1824             continue;
1825         }
1826         switch(i) {
1827         case BUS: f->bus_num = strtol(p, NULL, 10);    break;
1828         case DEV: f->addr    = strtol(p, NULL, 10);    break;
1829         case VID: f->vendor_id  = strtol(p, NULL, 16); break;
1830         case PID: f->product_id = strtol(p, NULL, 16); break;
1831         }
1832     }
1833
1834     if (i < DEV) {
1835         fprintf(stderr, "husb: invalid auto filter spec %s\n", spec);
1836         return -1;
1837     }
1838
1839     return 0;
1840 }
1841
1842 /**********************/
1843 /* USB host device info */
1844
1845 struct usb_class_info {
1846     int class;
1847     const char *class_name;
1848 };
1849
1850 static const struct usb_class_info usb_class_info[] = {
1851     { USB_CLASS_AUDIO, "Audio"},
1852     { USB_CLASS_COMM, "Communication"},
1853     { USB_CLASS_HID, "HID"},
1854     { USB_CLASS_HUB, "Hub" },
1855     { USB_CLASS_PHYSICAL, "Physical" },
1856     { USB_CLASS_PRINTER, "Printer" },
1857     { USB_CLASS_MASS_STORAGE, "Storage" },
1858     { USB_CLASS_CDC_DATA, "Data" },
1859     { USB_CLASS_APP_SPEC, "Application Specific" },
1860     { USB_CLASS_VENDOR_SPEC, "Vendor Specific" },
1861     { USB_CLASS_STILL_IMAGE, "Still Image" },
1862     { USB_CLASS_CSCID, "Smart Card" },
1863     { USB_CLASS_CONTENT_SEC, "Content Security" },
1864     { -1, NULL }
1865 };
1866
1867 static const char *usb_class_str(uint8_t class)
1868 {
1869     const struct usb_class_info *p;
1870     for(p = usb_class_info; p->class != -1; p++) {
1871         if (p->class == class) {
1872             break;
1873         }
1874     }
1875     return p->class_name;
1876 }
1877
1878 static void usb_info_device(Monitor *mon, int bus_num, int addr, char *port,
1879                             int class_id, int vendor_id, int product_id,
1880                             const char *product_name,
1881                             int speed)
1882 {
1883     const char *class_str, *speed_str;
1884
1885     switch(speed) {
1886     case USB_SPEED_LOW:
1887         speed_str = "1.5";
1888         break;
1889     case USB_SPEED_FULL:
1890         speed_str = "12";
1891         break;
1892     case USB_SPEED_HIGH:
1893         speed_str = "480";
1894         break;
1895     case USB_SPEED_SUPER:
1896         speed_str = "5000";
1897         break;
1898     default:
1899         speed_str = "?";
1900         break;
1901     }
1902
1903     monitor_printf(mon, "  Bus %d, Addr %d, Port %s, Speed %s Mb/s\n",
1904                    bus_num, addr, port, speed_str);
1905     class_str = usb_class_str(class_id);
1906     if (class_str) {
1907         monitor_printf(mon, "    %s:", class_str);
1908     } else {
1909         monitor_printf(mon, "    Class %02x:", class_id);
1910     }
1911     monitor_printf(mon, " USB device %04x:%04x", vendor_id, product_id);
1912     if (product_name[0] != '\0') {
1913         monitor_printf(mon, ", %s", product_name);
1914     }
1915     monitor_printf(mon, "\n");
1916 }
1917
1918 static int usb_host_info_device(void *opaque, int bus_num, int addr,
1919                                 char *path, int class_id,
1920                                 int vendor_id, int product_id,
1921                                 const char *product_name,
1922                                 int speed)
1923 {
1924     Monitor *mon = opaque;
1925
1926     usb_info_device(mon, bus_num, addr, path, class_id, vendor_id, product_id,
1927                     product_name, speed);
1928     return 0;
1929 }
1930
1931 static void dec2str(int val, char *str, size_t size)
1932 {
1933     if (val == 0) {
1934         snprintf(str, size, "*");
1935     } else {
1936         snprintf(str, size, "%d", val);
1937     }
1938 }
1939
1940 static void hex2str(int val, char *str, size_t size)
1941 {
1942     if (val == 0) {
1943         snprintf(str, size, "*");
1944     } else {
1945         snprintf(str, size, "%04x", val);
1946     }
1947 }
1948
1949 void usb_host_info(Monitor *mon)
1950 {
1951     struct USBAutoFilter *f;
1952     struct USBHostDevice *s;
1953
1954     usb_host_scan(mon, usb_host_info_device);
1955
1956     if (QTAILQ_EMPTY(&hostdevs)) {
1957         return;
1958     }
1959
1960     monitor_printf(mon, "  Auto filters:\n");
1961     QTAILQ_FOREACH(s, &hostdevs, next) {
1962         char bus[10], addr[10], vid[10], pid[10];
1963         f = &s->match;
1964         dec2str(f->bus_num, bus, sizeof(bus));
1965         dec2str(f->addr, addr, sizeof(addr));
1966         hex2str(f->vendor_id, vid, sizeof(vid));
1967         hex2str(f->product_id, pid, sizeof(pid));
1968         monitor_printf(mon, "    Bus %s, Addr %s, Port %s, ID %s:%s\n",
1969                        bus, addr, f->port ? f->port : "*", vid, pid);
1970     }
1971 }