fb1153bbd445e6ff08e0546da82fbe3d482c2fbd
[qemu] / 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 "console.h"
36
37 #include <dirent.h>
38 #include <sys/ioctl.h>
39 #include <signal.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 struct usb_ctrlrequest {
57     uint8_t bRequestType;
58     uint8_t bRequest;
59     uint16_t wValue;
60     uint16_t wIndex;
61     uint16_t wLength;
62 };
63
64 typedef int USBScanFunc(void *opaque, int bus_num, int addr, int class_id,
65                         int vendor_id, int product_id,
66                         const char *product_name, int speed);
67 static int usb_host_find_device(int *pbus_num, int *paddr,
68                                 char *product_name, int product_name_size,
69                                 const char *devname);
70 //#define DEBUG
71
72 #ifdef DEBUG
73 #define dprintf printf
74 #else
75 #define dprintf(...)
76 #endif
77
78 #define USBDBG_DEVOPENED "husb: opened %s/devices\n"
79
80 #define USBPROCBUS_PATH "/proc/bus/usb"
81 #define PRODUCT_NAME_SZ 32
82 #define MAX_ENDPOINTS 16
83 #define USBDEVBUS_PATH "/dev/bus/usb"
84 #define USBSYSBUS_PATH "/sys/bus/usb"
85
86 static char *usb_host_device_path;
87
88 #define USB_FS_NONE 0
89 #define USB_FS_PROC 1
90 #define USB_FS_DEV 2
91 #define USB_FS_SYS 3
92
93 static int usb_fs_type;
94
95 /* endpoint association data */
96 struct endp_data {
97     uint8_t type;
98     uint8_t halted;
99 };
100
101 enum {
102     CTRL_STATE_IDLE = 0,
103     CTRL_STATE_SETUP,
104     CTRL_STATE_DATA,
105     CTRL_STATE_ACK
106 };
107
108 /*
109  * Control transfer state.
110  * Note that 'buffer' _must_ follow 'req' field because 
111  * we need contigious buffer when we submit control URB.
112  */ 
113 struct ctrl_struct {
114     uint16_t len;
115     uint16_t offset;
116     uint8_t  state;
117     struct   usb_ctrlrequest req;
118     uint8_t  buffer[1024];
119 };
120
121 typedef struct USBHostDevice {
122     USBDevice dev;
123     int       fd;
124
125     uint8_t   descr[1024];
126     int       descr_len;
127     int       configuration;
128     int       ninterfaces;
129     int       closing;
130
131     struct ctrl_struct ctrl;
132     struct endp_data endp_table[MAX_ENDPOINTS];
133
134     /* Host side address */
135     int bus_num;
136     int addr;
137
138     struct USBHostDevice *next;
139 } USBHostDevice;
140
141 static int is_isoc(USBHostDevice *s, int ep)
142 {
143     return s->endp_table[ep - 1].type == USBDEVFS_URB_TYPE_ISO;
144 }
145
146 static int is_halted(USBHostDevice *s, int ep)
147 {
148     return s->endp_table[ep - 1].halted;
149 }
150
151 static void clear_halt(USBHostDevice *s, int ep)
152 {
153     s->endp_table[ep - 1].halted = 0;
154 }
155
156 static void set_halt(USBHostDevice *s, int ep)
157 {
158     s->endp_table[ep - 1].halted = 1;
159 }
160
161 static USBHostDevice *hostdev_list;
162
163 static void hostdev_link(USBHostDevice *dev)
164 {
165     dev->next = hostdev_list;
166     hostdev_list = dev;
167 }
168
169 static void hostdev_unlink(USBHostDevice *dev)
170 {
171     USBHostDevice *pdev = hostdev_list;
172     USBHostDevice **prev = &hostdev_list;
173
174     while (pdev) {
175         if (pdev == dev) {
176             *prev = dev->next;
177             return;
178         }
179
180         prev = &pdev->next;
181         pdev = pdev->next;
182     }
183 }
184
185 static USBHostDevice *hostdev_find(int bus_num, int addr)
186 {
187     USBHostDevice *s = hostdev_list;
188     while (s) {
189         if (s->bus_num == bus_num && s->addr == addr)
190             return s;
191         s = s->next;
192     }
193     return NULL;
194 }
195
196 /* 
197  * Async URB state.
198  * We always allocate one isoc descriptor even for bulk transfers
199  * to simplify allocation and casts. 
200  */
201 typedef struct AsyncURB
202 {
203     struct usbdevfs_urb urb;
204     struct usbdevfs_iso_packet_desc isocpd;
205
206     USBPacket     *packet;
207     USBHostDevice *hdev;
208 } AsyncURB;
209
210 static AsyncURB *async_alloc(void)
211 {
212     return (AsyncURB *) qemu_mallocz(sizeof(AsyncURB));
213 }
214
215 static void async_free(AsyncURB *aurb)
216 {
217     qemu_free(aurb);
218 }
219
220 static void async_complete_ctrl(USBHostDevice *s, USBPacket *p)
221 {
222     switch(s->ctrl.state) {
223     case CTRL_STATE_SETUP:
224         if (p->len < s->ctrl.len)
225             s->ctrl.len = p->len;
226         s->ctrl.state = CTRL_STATE_DATA;
227         p->len = 8;
228         break;
229
230     case CTRL_STATE_ACK:
231         s->ctrl.state = CTRL_STATE_IDLE;
232         p->len = 0;
233         break;
234
235     default:
236         break;
237     }
238 }
239
240 static void async_complete(void *opaque)
241 {
242     USBHostDevice *s = opaque;
243     AsyncURB *aurb;
244
245     while (1) {
246         USBPacket *p;
247
248         int r = ioctl(s->fd, USBDEVFS_REAPURBNDELAY, &aurb);
249         if (r < 0) {
250             if (errno == EAGAIN)
251                 return;
252
253             if (errno == ENODEV && !s->closing) {
254                 printf("husb: device %d.%d disconnected\n", s->bus_num, s->addr);
255                 usb_device_del_addr(0, s->dev.addr);
256                 return;
257             }
258
259             dprintf("husb: async. reap urb failed errno %d\n", errno);
260             return;
261         }
262
263         p = aurb->packet;
264
265         dprintf("husb: async completed. aurb %p status %d alen %d\n", 
266                 aurb, aurb->urb.status, aurb->urb.actual_length);
267
268         if (p) {
269             switch (aurb->urb.status) {
270             case 0:
271                 p->len = aurb->urb.actual_length;
272                 if (aurb->urb.type == USBDEVFS_URB_TYPE_CONTROL)
273                     async_complete_ctrl(s, p);
274                 break;
275
276             case -EPIPE:
277                 set_halt(s, p->devep);
278                 /* fall through */
279             default:
280                 p->len = USB_RET_NAK;
281                 break;
282             }
283
284             usb_packet_complete(p);
285         }
286
287         async_free(aurb);
288     }
289 }
290
291 static void async_cancel(USBPacket *unused, void *opaque)
292 {
293     AsyncURB *aurb = opaque;
294     USBHostDevice *s = aurb->hdev;
295
296     dprintf("husb: async cancel. aurb %p\n", aurb);
297
298     /* Mark it as dead (see async_complete above) */
299     aurb->packet = NULL;
300
301     int r = ioctl(s->fd, USBDEVFS_DISCARDURB, aurb);
302     if (r < 0) {
303         dprintf("husb: async. discard urb failed errno %d\n", errno);
304     }
305 }
306
307 static int usb_host_claim_interfaces(USBHostDevice *dev, int configuration)
308 {
309     int dev_descr_len, config_descr_len;
310     int interface, nb_interfaces, nb_configurations;
311     int ret, i;
312
313     if (configuration == 0) /* address state - ignore */
314         return 1;
315
316     dprintf("husb: claiming interfaces. config %d\n", configuration);
317
318     i = 0;
319     dev_descr_len = dev->descr[0];
320     if (dev_descr_len > dev->descr_len)
321         goto fail;
322     nb_configurations = dev->descr[17];
323
324     i += dev_descr_len;
325     while (i < dev->descr_len) {
326         dprintf("husb: i is %d, descr_len is %d, dl %d, dt %d\n", i, dev->descr_len,
327                dev->descr[i], dev->descr[i+1]);
328
329         if (dev->descr[i+1] != USB_DT_CONFIG) {
330             i += dev->descr[i];
331             continue;
332         }
333         config_descr_len = dev->descr[i];
334
335         printf("husb: config #%d need %d\n", dev->descr[i + 5], configuration); 
336
337         if (configuration < 0 || configuration == dev->descr[i + 5]) {
338             configuration = dev->descr[i + 5];
339             break;
340         }
341
342         i += config_descr_len;
343     }
344
345     if (i >= dev->descr_len) {
346         fprintf(stderr, "husb: update iface failed. no matching configuration\n");
347         goto fail;
348     }
349     nb_interfaces = dev->descr[i + 4];
350
351 #ifdef USBDEVFS_DISCONNECT
352     /* earlier Linux 2.4 do not support that */
353     {
354         struct usbdevfs_ioctl ctrl;
355         for (interface = 0; interface < nb_interfaces; interface++) {
356             ctrl.ioctl_code = USBDEVFS_DISCONNECT;
357             ctrl.ifno = interface;
358             ret = ioctl(dev->fd, USBDEVFS_IOCTL, &ctrl);
359             if (ret < 0 && errno != ENODATA) {
360                 perror("USBDEVFS_DISCONNECT");
361                 goto fail;
362             }
363         }
364     }
365 #endif
366
367     /* XXX: only grab if all interfaces are free */
368     for (interface = 0; interface < nb_interfaces; interface++) {
369         ret = ioctl(dev->fd, USBDEVFS_CLAIMINTERFACE, &interface);
370         if (ret < 0) {
371             if (errno == EBUSY) {
372                 printf("husb: update iface. device already grabbed\n");
373             } else {
374                 perror("husb: failed to claim interface");
375             }
376         fail:
377             return 0;
378         }
379     }
380
381     printf("husb: %d interfaces claimed for configuration %d\n",
382            nb_interfaces, configuration);
383
384     dev->ninterfaces   = nb_interfaces;
385     dev->configuration = configuration;
386     return 1;
387 }
388
389 static int usb_host_release_interfaces(USBHostDevice *s)
390 {
391     int ret, i;
392
393     dprintf("husb: releasing interfaces\n");
394
395     for (i = 0; i < s->ninterfaces; i++) {
396         ret = ioctl(s->fd, USBDEVFS_RELEASEINTERFACE, &i);
397         if (ret < 0) {
398             perror("husb: failed to release interface");
399             return 0;
400         }
401     }
402
403     return 1;
404 }
405
406 static void usb_host_handle_reset(USBDevice *dev)
407 {
408     USBHostDevice *s = (USBHostDevice *) dev;
409
410     dprintf("husb: reset device %u.%u\n", s->bus_num, s->addr);
411
412     ioctl(s->fd, USBDEVFS_RESET);
413
414     usb_host_claim_interfaces(s, s->configuration);
415 }
416
417 static void usb_host_handle_destroy(USBDevice *dev)
418 {
419     USBHostDevice *s = (USBHostDevice *)dev;
420
421     s->closing = 1;
422
423     qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
424
425     hostdev_unlink(s);
426
427     async_complete(s);
428
429     if (s->fd >= 0)
430         close(s->fd);
431
432     qemu_free(s);
433 }
434
435 static int usb_linux_update_endp_table(USBHostDevice *s);
436
437 static int usb_host_handle_data(USBHostDevice *s, USBPacket *p)
438 {
439     struct usbdevfs_urb *urb;
440     AsyncURB *aurb;
441     int ret;
442
443     aurb = async_alloc();
444     if (!aurb) {
445         dprintf("husb: async malloc failed\n");
446         return USB_RET_NAK;
447     }
448     aurb->hdev   = s;
449     aurb->packet = p;
450
451     urb = &aurb->urb;
452
453     if (p->pid == USB_TOKEN_IN)
454         urb->endpoint = p->devep | 0x80;
455     else
456         urb->endpoint = p->devep;
457
458     if (is_halted(s, p->devep)) {
459         ret = ioctl(s->fd, USBDEVFS_CLEAR_HALT, &urb->endpoint);
460         if (ret < 0) {
461             dprintf("husb: failed to clear halt. ep 0x%x errno %d\n", 
462                    urb->endpoint, errno);
463             return USB_RET_NAK;
464         }
465         clear_halt(s, p->devep);
466     }
467
468     urb->buffer        = p->data;
469     urb->buffer_length = p->len;
470
471     if (is_isoc(s, p->devep)) {
472         /* Setup ISOC transfer */
473         urb->type     = USBDEVFS_URB_TYPE_ISO;
474         urb->flags    = USBDEVFS_URB_ISO_ASAP;
475         urb->number_of_packets = 1;
476         urb->iso_frame_desc[0].length = p->len;
477     } else {
478         /* Setup bulk transfer */
479         urb->type     = USBDEVFS_URB_TYPE_BULK;
480     }
481
482     urb->usercontext = s;
483
484     ret = ioctl(s->fd, USBDEVFS_SUBMITURB, urb);
485
486     dprintf("husb: data submit. ep 0x%x len %u aurb %p\n", urb->endpoint, p->len, aurb);
487
488     if (ret < 0) {
489         dprintf("husb: submit failed. errno %d\n", errno);
490         async_free(aurb);
491
492         switch(errno) {
493         case ETIMEDOUT:
494             return USB_RET_NAK;
495         case EPIPE:
496         default:
497             return USB_RET_STALL;
498         }
499     }
500
501     usb_defer_packet(p, async_cancel, aurb);
502     return USB_RET_ASYNC;
503 }
504
505 static int ctrl_error(void)
506 {
507     if (errno == ETIMEDOUT)
508         return USB_RET_NAK;
509     else 
510         return USB_RET_STALL;
511 }
512
513 static int usb_host_set_address(USBHostDevice *s, int addr)
514 {
515     dprintf("husb: ctrl set addr %u\n", addr);
516     s->dev.addr = addr;
517     return 0;
518 }
519
520 static int usb_host_set_config(USBHostDevice *s, int config)
521 {
522     usb_host_release_interfaces(s);
523
524     int ret = ioctl(s->fd, USBDEVFS_SETCONFIGURATION, &config);
525  
526     dprintf("husb: ctrl set config %d ret %d errno %d\n", config, ret, errno);
527     
528     if (ret < 0)
529         return ctrl_error();
530  
531     usb_host_claim_interfaces(s, config);
532     return 0;
533 }
534
535 static int usb_host_set_interface(USBHostDevice *s, int iface, int alt)
536 {
537     struct usbdevfs_setinterface si;
538     int ret;
539
540     si.interface  = iface;
541     si.altsetting = alt;
542     ret = ioctl(s->fd, USBDEVFS_SETINTERFACE, &si);
543     
544     dprintf("husb: ctrl set iface %d altset %d ret %d errno %d\n", 
545         iface, alt, ret, errno);
546     
547     if (ret < 0)
548         return ctrl_error();
549
550     usb_linux_update_endp_table(s);
551     return 0;
552 }
553
554 static int usb_host_handle_control(USBHostDevice *s, USBPacket *p)
555 {
556     struct usbdevfs_urb *urb;
557     AsyncURB *aurb;
558     int ret, value, index;
559
560     /* 
561      * Process certain standard device requests.
562      * These are infrequent and are processed synchronously.
563      */
564     value = le16_to_cpu(s->ctrl.req.wValue);
565     index = le16_to_cpu(s->ctrl.req.wIndex);
566
567     dprintf("husb: ctrl type 0x%x req 0x%x val 0x%x index %u len %u\n",
568         s->ctrl.req.bRequestType, s->ctrl.req.bRequest, value, index, 
569         s->ctrl.len);
570
571     if (s->ctrl.req.bRequestType == 0) {
572         switch (s->ctrl.req.bRequest) {
573         case USB_REQ_SET_ADDRESS:
574             return usb_host_set_address(s, value);
575
576         case USB_REQ_SET_CONFIGURATION:
577             return usb_host_set_config(s, value & 0xff);
578         }
579     }
580
581     if (s->ctrl.req.bRequestType == 1 &&
582                   s->ctrl.req.bRequest == USB_REQ_SET_INTERFACE)
583         return usb_host_set_interface(s, index, value);
584
585     /* The rest are asynchronous */
586
587     aurb = async_alloc();
588     if (!aurb) {
589         dprintf("husb: async malloc failed\n");
590         return USB_RET_NAK;
591     }
592     aurb->hdev   = s;
593     aurb->packet = p;
594
595     /* 
596      * Setup ctrl transfer.
597      *
598      * s->ctrl is layed out such that data buffer immediately follows
599      * 'req' struct which is exactly what usbdevfs expects.
600      */ 
601     urb = &aurb->urb;
602
603     urb->type     = USBDEVFS_URB_TYPE_CONTROL;
604     urb->endpoint = p->devep;
605
606     urb->buffer        = &s->ctrl.req;
607     urb->buffer_length = 8 + s->ctrl.len;
608
609     urb->usercontext = s;
610
611     ret = ioctl(s->fd, USBDEVFS_SUBMITURB, urb);
612
613     dprintf("husb: submit ctrl. len %u aurb %p\n", urb->buffer_length, aurb);
614
615     if (ret < 0) {
616         dprintf("husb: submit failed. errno %d\n", errno);
617         async_free(aurb);
618
619         switch(errno) {
620         case ETIMEDOUT:
621             return USB_RET_NAK;
622         case EPIPE:
623         default:
624             return USB_RET_STALL;
625         }
626     }
627
628     usb_defer_packet(p, async_cancel, aurb);
629     return USB_RET_ASYNC;
630 }
631
632 static int do_token_setup(USBDevice *dev, USBPacket *p)
633 {
634     USBHostDevice *s = (USBHostDevice *) dev;
635     int ret = 0;
636
637     if (p->len != 8)
638         return USB_RET_STALL;
639  
640     memcpy(&s->ctrl.req, p->data, 8);
641     s->ctrl.len    = le16_to_cpu(s->ctrl.req.wLength);
642     s->ctrl.offset = 0;
643     s->ctrl.state  = CTRL_STATE_SETUP;
644
645     if (s->ctrl.req.bRequestType & USB_DIR_IN) {
646         ret = usb_host_handle_control(s, p);
647         if (ret < 0)
648             return ret;
649
650         if (ret < s->ctrl.len)
651             s->ctrl.len = ret;
652         s->ctrl.state = CTRL_STATE_DATA;
653     } else {
654         if (s->ctrl.len == 0)
655             s->ctrl.state = CTRL_STATE_ACK;
656         else
657             s->ctrl.state = CTRL_STATE_DATA;
658     }
659
660     return ret;
661 }
662
663 static int do_token_in(USBDevice *dev, USBPacket *p)
664 {
665     USBHostDevice *s = (USBHostDevice *) dev;
666     int ret = 0;
667
668     if (p->devep != 0)
669         return usb_host_handle_data(s, p);
670
671     switch(s->ctrl.state) {
672     case CTRL_STATE_ACK:
673         if (!(s->ctrl.req.bRequestType & USB_DIR_IN)) {
674             ret = usb_host_handle_control(s, p);
675             if (ret == USB_RET_ASYNC)
676                 return USB_RET_ASYNC;
677
678             s->ctrl.state = CTRL_STATE_IDLE;
679             return ret > 0 ? 0 : ret;
680         }
681
682         return 0;
683
684     case CTRL_STATE_DATA:
685         if (s->ctrl.req.bRequestType & USB_DIR_IN) {
686             int len = s->ctrl.len - s->ctrl.offset;
687             if (len > p->len)
688                 len = p->len;
689             memcpy(p->data, s->ctrl.buffer + s->ctrl.offset, len);
690             s->ctrl.offset += len;
691             if (s->ctrl.offset >= s->ctrl.len)
692                 s->ctrl.state = CTRL_STATE_ACK;
693             return len;
694         }
695
696         s->ctrl.state = CTRL_STATE_IDLE;
697         return USB_RET_STALL;
698
699     default:
700         return USB_RET_STALL;
701     }
702 }
703
704 static int do_token_out(USBDevice *dev, USBPacket *p)
705 {
706     USBHostDevice *s = (USBHostDevice *) dev;
707
708     if (p->devep != 0)
709         return usb_host_handle_data(s, p);
710
711     switch(s->ctrl.state) {
712     case CTRL_STATE_ACK:
713         if (s->ctrl.req.bRequestType & USB_DIR_IN) {
714             s->ctrl.state = CTRL_STATE_IDLE;
715             /* transfer OK */
716         } else {
717             /* ignore additional output */
718         }
719         return 0;
720
721     case CTRL_STATE_DATA:
722         if (!(s->ctrl.req.bRequestType & USB_DIR_IN)) {
723             int len = s->ctrl.len - s->ctrl.offset;
724             if (len > p->len)
725                 len = p->len;
726             memcpy(s->ctrl.buffer + s->ctrl.offset, p->data, len);
727             s->ctrl.offset += len;
728             if (s->ctrl.offset >= s->ctrl.len)
729                 s->ctrl.state = CTRL_STATE_ACK;
730             return len;
731         }
732
733         s->ctrl.state = CTRL_STATE_IDLE;
734         return USB_RET_STALL;
735
736     default:
737         return USB_RET_STALL;
738     }
739 }
740
741 /*
742  * Packet handler.
743  * Called by the HC (host controller).
744  *
745  * Returns length of the transaction or one of the USB_RET_XXX codes.
746  */
747 static int usb_host_handle_packet(USBDevice *s, USBPacket *p)
748 {
749     switch(p->pid) {
750     case USB_MSG_ATTACH:
751         s->state = USB_STATE_ATTACHED;
752         return 0;
753
754     case USB_MSG_DETACH:
755         s->state = USB_STATE_NOTATTACHED;
756         return 0;
757
758     case USB_MSG_RESET:
759         s->remote_wakeup = 0;
760         s->addr = 0;
761         s->state = USB_STATE_DEFAULT;
762         s->handle_reset(s);
763         return 0;
764     }
765
766     /* Rest of the PIDs must match our address */
767     if (s->state < USB_STATE_DEFAULT || p->devaddr != s->addr)
768         return USB_RET_NODEV;
769
770     switch (p->pid) {
771     case USB_TOKEN_SETUP:
772         return do_token_setup(s, p);
773
774     case USB_TOKEN_IN:
775         return do_token_in(s, p);
776
777     case USB_TOKEN_OUT:
778         return do_token_out(s, p);
779  
780     default:
781         return USB_RET_STALL;
782     }
783 }
784
785 /* returns 1 on problem encountered or 0 for success */
786 static int usb_linux_update_endp_table(USBHostDevice *s)
787 {
788     uint8_t *descriptors;
789     uint8_t devep, type, configuration, alt_interface;
790     struct usb_ctrltransfer ct;
791     int interface, ret, length, i;
792
793     ct.bRequestType = USB_DIR_IN;
794     ct.bRequest = USB_REQ_GET_CONFIGURATION;
795     ct.wValue = 0;
796     ct.wIndex = 0;
797     ct.wLength = 1;
798     ct.data = &configuration;
799     ct.timeout = 50;
800
801     ret = ioctl(s->fd, USBDEVFS_CONTROL, &ct);
802     if (ret < 0) {
803         perror("usb_linux_update_endp_table");
804         return 1;
805     }
806
807     /* in address state */
808     if (configuration == 0)
809         return 1;
810
811     /* get the desired configuration, interface, and endpoint descriptors
812      * from device description */
813     descriptors = &s->descr[18];
814     length = s->descr_len - 18;
815     i = 0;
816
817     if (descriptors[i + 1] != USB_DT_CONFIG ||
818         descriptors[i + 5] != configuration) {
819         dprintf("invalid descriptor data - configuration\n");
820         return 1;
821     }
822     i += descriptors[i];
823
824     while (i < length) {
825         if (descriptors[i + 1] != USB_DT_INTERFACE ||
826             (descriptors[i + 1] == USB_DT_INTERFACE &&
827              descriptors[i + 4] == 0)) {
828             i += descriptors[i];
829             continue;
830         }
831
832         interface = descriptors[i + 2];
833
834         ct.bRequestType = USB_DIR_IN | USB_RECIP_INTERFACE;
835         ct.bRequest = USB_REQ_GET_INTERFACE;
836         ct.wValue = 0;
837         ct.wIndex = interface;
838         ct.wLength = 1;
839         ct.data = &alt_interface;
840         ct.timeout = 50;
841
842         ret = ioctl(s->fd, USBDEVFS_CONTROL, &ct);
843         if (ret < 0) {
844             perror("usb_linux_update_endp_table");
845             return 1;
846         }
847
848         /* the current interface descriptor is the active interface
849          * and has endpoints */
850         if (descriptors[i + 3] != alt_interface) {
851             i += descriptors[i];
852             continue;
853         }
854
855         /* advance to the endpoints */
856         while (i < length && descriptors[i +1] != USB_DT_ENDPOINT)
857             i += descriptors[i];
858
859         if (i >= length)
860             break;
861
862         while (i < length) {
863             if (descriptors[i + 1] != USB_DT_ENDPOINT)
864                 break;
865
866             devep = descriptors[i + 2];
867             switch (descriptors[i + 3] & 0x3) {
868             case 0x00:
869                 type = USBDEVFS_URB_TYPE_CONTROL;
870                 break;
871             case 0x01:
872                 type = USBDEVFS_URB_TYPE_ISO;
873                 break;
874             case 0x02:
875                 type = USBDEVFS_URB_TYPE_BULK;
876                 break;
877             case 0x03:
878                 type = USBDEVFS_URB_TYPE_INTERRUPT;
879                 break;
880             default:
881                 dprintf("usb_host: malformed endpoint type\n");
882                 type = USBDEVFS_URB_TYPE_BULK;
883             }
884             s->endp_table[(devep & 0xf) - 1].type = type;
885             s->endp_table[(devep & 0xf) - 1].halted = 0;
886
887             i += descriptors[i];
888         }
889     }
890     return 0;
891 }
892
893 static USBDevice *usb_host_device_open_addr(int bus_num, int addr, const char *prod_name)
894 {
895     int fd = -1, ret;
896     USBHostDevice *dev = NULL;
897     struct usbdevfs_connectinfo ci;
898     char buf[1024];
899
900     dev = qemu_mallocz(sizeof(USBHostDevice));
901     if (!dev)
902         goto fail;
903
904     dev->bus_num = bus_num;
905     dev->addr = addr;
906
907     printf("husb: open device %d.%d\n", bus_num, addr);
908
909     if (!usb_host_device_path) {
910         perror("husb: USB Host Device Path not set");
911         goto fail;
912     }
913     snprintf(buf, sizeof(buf), "%s/%03d/%03d", usb_host_device_path,
914              bus_num, addr);
915     fd = open(buf, O_RDWR | O_NONBLOCK);
916     if (fd < 0) {
917         perror(buf);
918         goto fail;
919     }
920     dprintf("husb: opened %s\n", buf);
921
922     /* read the device description */
923     dev->descr_len = read(fd, dev->descr, sizeof(dev->descr));
924     if (dev->descr_len <= 0) {
925         perror("husb: reading device data failed");
926         goto fail;
927     }
928
929 #ifdef DEBUG
930     {
931         int x;
932         printf("=== begin dumping device descriptor data ===\n");
933         for (x = 0; x < dev->descr_len; x++)
934             printf("%02x ", dev->descr[x]);
935         printf("\n=== end dumping device descriptor data ===\n");
936     }
937 #endif
938
939     dev->fd = fd;
940
941     /* 
942      * Initial configuration is -1 which makes us claim first 
943      * available config. We used to start with 1, which does not
944      * always work. I've seen devices where first config starts 
945      * with 2.
946      */
947     if (!usb_host_claim_interfaces(dev, -1))
948         goto fail;
949
950     ret = ioctl(fd, USBDEVFS_CONNECTINFO, &ci);
951     if (ret < 0) {
952         perror("usb_host_device_open: USBDEVFS_CONNECTINFO");
953         goto fail;
954     }
955
956     printf("husb: grabbed usb device %d.%d\n", bus_num, addr);
957
958     ret = usb_linux_update_endp_table(dev);
959     if (ret)
960         goto fail;
961
962     if (ci.slow)
963         dev->dev.speed = USB_SPEED_LOW;
964     else
965         dev->dev.speed = USB_SPEED_HIGH;
966
967     dev->dev.handle_packet  = usb_host_handle_packet;
968     dev->dev.handle_reset   = usb_host_handle_reset;
969     dev->dev.handle_destroy = usb_host_handle_destroy;
970
971     if (!prod_name || prod_name[0] == '\0')
972         snprintf(dev->dev.devname, sizeof(dev->dev.devname),
973                  "host:%d.%d", bus_num, addr);
974     else
975         pstrcpy(dev->dev.devname, sizeof(dev->dev.devname),
976                 prod_name);
977
978     /* USB devio uses 'write' flag to check for async completions */
979     qemu_set_fd_handler(dev->fd, NULL, async_complete, dev);
980
981     hostdev_link(dev);
982
983     return (USBDevice *) dev;
984
985 fail:
986     if (dev)
987         qemu_free(dev);
988
989     close(fd);
990     return NULL;
991 }
992
993 static int usb_host_auto_add(const char *spec);
994 static int usb_host_auto_del(const char *spec);
995
996 USBDevice *usb_host_device_open(const char *devname)
997 {
998     int bus_num, addr;
999     char product_name[PRODUCT_NAME_SZ];
1000
1001     if (strstr(devname, "auto:")) {
1002         usb_host_auto_add(devname);
1003         return NULL;
1004     }
1005
1006     if (usb_host_find_device(&bus_num, &addr, product_name, sizeof(product_name),
1007                              devname) < 0)
1008         return NULL;
1009
1010     if (hostdev_find(bus_num, addr)) {
1011        term_printf("husb: host usb device %d.%d is already open\n", bus_num, addr);
1012        return NULL;
1013     }
1014
1015     return usb_host_device_open_addr(bus_num, addr, product_name);
1016 }
1017
1018 int usb_host_device_close(const char *devname)
1019 {
1020     char product_name[PRODUCT_NAME_SZ];
1021     int bus_num, addr;
1022     USBHostDevice *s;
1023
1024     if (strstr(devname, "auto:"))
1025         return usb_host_auto_del(devname);
1026
1027     if (usb_host_find_device(&bus_num, &addr, product_name, sizeof(product_name),
1028                              devname) < 0)
1029         return -1;
1030  
1031     s = hostdev_find(bus_num, addr);
1032     if (s) {
1033         usb_device_del_addr(0, s->dev.addr);
1034         return 0;
1035     }
1036
1037     return -1;
1038 }
1039  
1040 static int get_tag_value(char *buf, int buf_size,
1041                          const char *str, const char *tag,
1042                          const char *stopchars)
1043 {
1044     const char *p;
1045     char *q;
1046     p = strstr(str, tag);
1047     if (!p)
1048         return -1;
1049     p += strlen(tag);
1050     while (qemu_isspace(*p))
1051         p++;
1052     q = buf;
1053     while (*p != '\0' && !strchr(stopchars, *p)) {
1054         if ((q - buf) < (buf_size - 1))
1055             *q++ = *p;
1056         p++;
1057     }
1058     *q = '\0';
1059     return q - buf;
1060 }
1061
1062 /*
1063  * Use /proc/bus/usb/devices or /dev/bus/usb/devices file to determine
1064  * host's USB devices. This is legacy support since many distributions
1065  * are moving to /sys/bus/usb
1066  */
1067 static int usb_host_scan_dev(void *opaque, USBScanFunc *func)
1068 {
1069     FILE *f = 0;
1070     char line[1024];
1071     char buf[1024];
1072     int bus_num, addr, speed, device_count, class_id, product_id, vendor_id;
1073     char product_name[512];
1074     int ret = 0;
1075
1076     if (!usb_host_device_path) {
1077         perror("husb: USB Host Device Path not set");
1078         goto the_end;
1079     }
1080     snprintf(line, sizeof(line), "%s/devices", usb_host_device_path);
1081     f = fopen(line, "r");
1082     if (!f) {
1083         perror("husb: cannot open devices file");
1084         goto the_end;
1085     }
1086
1087     device_count = 0;
1088     bus_num = addr = speed = class_id = product_id = vendor_id = 0;
1089     for(;;) {
1090         if (fgets(line, sizeof(line), f) == NULL)
1091             break;
1092         if (strlen(line) > 0)
1093             line[strlen(line) - 1] = '\0';
1094         if (line[0] == 'T' && line[1] == ':') {
1095             if (device_count && (vendor_id || product_id)) {
1096                 /* New device.  Add the previously discovered device.  */
1097                 ret = func(opaque, bus_num, addr, class_id, vendor_id,
1098                            product_id, product_name, speed);
1099                 if (ret)
1100                     goto the_end;
1101             }
1102             if (get_tag_value(buf, sizeof(buf), line, "Bus=", " ") < 0)
1103                 goto fail;
1104             bus_num = atoi(buf);
1105             if (get_tag_value(buf, sizeof(buf), line, "Dev#=", " ") < 0)
1106                 goto fail;
1107             addr = atoi(buf);
1108             if (get_tag_value(buf, sizeof(buf), line, "Spd=", " ") < 0)
1109                 goto fail;
1110             if (!strcmp(buf, "480"))
1111                 speed = USB_SPEED_HIGH;
1112             else if (!strcmp(buf, "1.5"))
1113                 speed = USB_SPEED_LOW;
1114             else
1115                 speed = USB_SPEED_FULL;
1116             product_name[0] = '\0';
1117             class_id = 0xff;
1118             device_count++;
1119             product_id = 0;
1120             vendor_id = 0;
1121         } else if (line[0] == 'P' && line[1] == ':') {
1122             if (get_tag_value(buf, sizeof(buf), line, "Vendor=", " ") < 0)
1123                 goto fail;
1124             vendor_id = strtoul(buf, NULL, 16);
1125             if (get_tag_value(buf, sizeof(buf), line, "ProdID=", " ") < 0)
1126                 goto fail;
1127             product_id = strtoul(buf, NULL, 16);
1128         } else if (line[0] == 'S' && line[1] == ':') {
1129             if (get_tag_value(buf, sizeof(buf), line, "Product=", "") < 0)
1130                 goto fail;
1131             pstrcpy(product_name, sizeof(product_name), buf);
1132         } else if (line[0] == 'D' && line[1] == ':') {
1133             if (get_tag_value(buf, sizeof(buf), line, "Cls=", " (") < 0)
1134                 goto fail;
1135             class_id = strtoul(buf, NULL, 16);
1136         }
1137     fail: ;
1138     }
1139     if (device_count && (vendor_id || product_id)) {
1140         /* Add the last device.  */
1141         ret = func(opaque, bus_num, addr, class_id, vendor_id,
1142                    product_id, product_name, speed);
1143     }
1144  the_end:
1145     if (f)
1146         fclose(f);
1147     return ret;
1148 }
1149
1150 /*
1151  * Read sys file-system device file
1152  *
1153  * @line address of buffer to put file contents in
1154  * @line_size size of line
1155  * @device_file path to device file (printf format string)
1156  * @device_name device being opened (inserted into device_file)
1157  *
1158  * @return 0 failed, 1 succeeded ('line' contains data)
1159  */
1160 static int usb_host_read_file(char *line, size_t line_size, const char *device_file, const char *device_name)
1161 {
1162     FILE *f;
1163     int ret = 0;
1164     char filename[PATH_MAX];
1165
1166     snprintf(filename, PATH_MAX, USBSYSBUS_PATH "/devices/%s/%s", device_name,
1167              device_file);
1168     f = fopen(filename, "r");
1169     if (f) {
1170         fgets(line, line_size, f);
1171         fclose(f);
1172         ret = 1;
1173     } else {
1174         term_printf("husb: could not open %s\n", filename);
1175     }
1176
1177     return ret;
1178 }
1179
1180 /*
1181  * Use /sys/bus/usb/devices/ directory to determine host's USB
1182  * devices.
1183  *
1184  * This code is based on Robert Schiele's original patches posted to
1185  * the Novell bug-tracker https://bugzilla.novell.com/show_bug.cgi?id=241950
1186  */
1187 static int usb_host_scan_sys(void *opaque, USBScanFunc *func)
1188 {
1189     DIR *dir = 0;
1190     char line[1024];
1191     int bus_num, addr, speed, class_id, product_id, vendor_id;
1192     int ret = 0;
1193     char product_name[512];
1194     struct dirent *de;
1195
1196     dir = opendir(USBSYSBUS_PATH "/devices");
1197     if (!dir) {
1198         perror("husb: cannot open devices directory");
1199         goto the_end;
1200     }
1201
1202     while ((de = readdir(dir))) {
1203         if (de->d_name[0] != '.' && !strchr(de->d_name, ':')) {
1204             char *tmpstr = de->d_name;
1205             if (!strncmp(de->d_name, "usb", 3))
1206                 tmpstr += 3;
1207             bus_num = atoi(tmpstr);
1208
1209             if (!usb_host_read_file(line, sizeof(line), "devnum", de->d_name))
1210                 goto the_end;
1211             if (sscanf(line, "%d", &addr) != 1)
1212                 goto the_end;
1213
1214             if (!usb_host_read_file(line, sizeof(line), "bDeviceClass",
1215                                     de->d_name))
1216                 goto the_end;
1217             if (sscanf(line, "%x", &class_id) != 1)
1218                 goto the_end;
1219
1220             if (!usb_host_read_file(line, sizeof(line), "idVendor", de->d_name))
1221                 goto the_end;
1222             if (sscanf(line, "%x", &vendor_id) != 1)
1223                 goto the_end;
1224
1225             if (!usb_host_read_file(line, sizeof(line), "idProduct",
1226                                     de->d_name))
1227                 goto the_end;
1228             if (sscanf(line, "%x", &product_id) != 1)
1229                 goto the_end;
1230
1231             if (!usb_host_read_file(line, sizeof(line), "product",
1232                                     de->d_name)) {
1233                 *product_name = 0;
1234             } else {
1235                 if (strlen(line) > 0)
1236                     line[strlen(line) - 1] = '\0';
1237                 pstrcpy(product_name, sizeof(product_name), line);
1238             }
1239
1240             if (!usb_host_read_file(line, sizeof(line), "speed", de->d_name))
1241                 goto the_end;
1242             if (!strcmp(line, "480\n"))
1243                 speed = USB_SPEED_HIGH;
1244             else if (!strcmp(line, "1.5\n"))
1245                 speed = USB_SPEED_LOW;
1246             else
1247                 speed = USB_SPEED_FULL;
1248
1249             ret = func(opaque, bus_num, addr, class_id, vendor_id,
1250                        product_id, product_name, speed);
1251             if (ret)
1252                 goto the_end;
1253         }
1254     }
1255  the_end:
1256     if (dir)
1257         closedir(dir);
1258     return ret;
1259 }
1260
1261 /*
1262  * Determine how to access the host's USB devices and call the
1263  * specific support function.
1264  */
1265 static int usb_host_scan(void *opaque, USBScanFunc *func)
1266 {
1267     FILE *f = 0;
1268     DIR *dir = 0;
1269     int ret = 0;
1270     const char *fs_type[] = {"unknown", "proc", "dev", "sys"};
1271     char devpath[PATH_MAX];
1272
1273     /* only check the host once */
1274     if (!usb_fs_type) {
1275         f = fopen(USBPROCBUS_PATH "/devices", "r");
1276         if (f) {
1277             /* devices found in /proc/bus/usb/ */
1278             strcpy(devpath, USBPROCBUS_PATH);
1279             usb_fs_type = USB_FS_PROC;
1280             fclose(f);
1281             dprintf(USBDBG_DEVOPENED, USBPROCBUS_PATH);
1282             goto found_devices;
1283         }
1284         /* try additional methods if an access method hasn't been found yet */
1285         f = fopen(USBDEVBUS_PATH "/devices", "r");
1286         if (f) {
1287             /* devices found in /dev/bus/usb/ */
1288             strcpy(devpath, USBDEVBUS_PATH);
1289             usb_fs_type = USB_FS_DEV;
1290             fclose(f);
1291             dprintf(USBDBG_DEVOPENED, USBDEVBUS_PATH);
1292             goto found_devices;
1293         }
1294         dir = opendir(USBSYSBUS_PATH "/devices");
1295         if (dir) {
1296             /* devices found in /dev/bus/usb/ (yes - not a mistake!) */
1297             strcpy(devpath, USBDEVBUS_PATH);
1298             usb_fs_type = USB_FS_SYS;
1299             closedir(dir);
1300             dprintf(USBDBG_DEVOPENED, USBSYSBUS_PATH);
1301             goto found_devices;
1302         }
1303     found_devices:
1304         if (!usb_fs_type) {
1305             term_printf("husb: unable to access USB devices\n");
1306             return -ENOENT;
1307         }
1308
1309         /* the module setting (used later for opening devices) */
1310         usb_host_device_path = qemu_mallocz(strlen(devpath)+1);
1311         if (usb_host_device_path) {
1312             strcpy(usb_host_device_path, devpath);
1313             term_printf("husb: using %s file-system with %s\n", fs_type[usb_fs_type], usb_host_device_path);
1314         } else {
1315             /* out of memory? */
1316             perror("husb: unable to allocate memory for device path");
1317             return -ENOMEM;
1318         }
1319     }
1320
1321     switch (usb_fs_type) {
1322     case USB_FS_PROC:
1323     case USB_FS_DEV:
1324         ret = usb_host_scan_dev(opaque, func);
1325         break;
1326     case USB_FS_SYS:
1327         ret = usb_host_scan_sys(opaque, func);
1328         break;
1329     default:
1330         ret = -EINVAL;
1331         break;
1332     }
1333     return ret;
1334 }
1335
1336 struct USBAutoFilter {
1337     struct USBAutoFilter *next;
1338     int bus_num;
1339     int addr;
1340     int vendor_id;
1341     int product_id;
1342 };
1343
1344 static QEMUTimer *usb_auto_timer;
1345 static struct USBAutoFilter *usb_auto_filter;
1346
1347 static int usb_host_auto_scan(void *opaque, int bus_num, int addr,
1348                      int class_id, int vendor_id, int product_id,
1349                      const char *product_name, int speed)
1350 {
1351     struct USBAutoFilter *f;
1352     struct USBDevice *dev;
1353
1354     /* Ignore hubs */
1355     if (class_id == 9)
1356         return 0;
1357
1358     for (f = usb_auto_filter; f; f = f->next) {
1359         if (f->bus_num >= 0 && f->bus_num != bus_num)
1360             continue;
1361
1362         if (f->addr >= 0 && f->addr != addr)
1363             continue;
1364
1365         if (f->vendor_id >= 0 && f->vendor_id != vendor_id)
1366             continue;
1367
1368         if (f->product_id >= 0 && f->product_id != product_id)
1369             continue;
1370
1371         /* We got a match */
1372
1373         /* Allredy attached ? */
1374         if (hostdev_find(bus_num, addr))
1375             return 0;
1376
1377         dprintf("husb: auto open: bus_num %d addr %d\n", bus_num, addr);
1378
1379         dev = usb_host_device_open_addr(bus_num, addr, product_name);
1380         if (dev)
1381             usb_device_add_dev(dev);
1382     }
1383
1384     return 0;
1385 }
1386
1387 static void usb_host_auto_timer(void *unused)
1388 {
1389     usb_host_scan(NULL, usb_host_auto_scan);
1390     qemu_mod_timer(usb_auto_timer, qemu_get_clock(rt_clock) + 2000);
1391 }
1392
1393 /*
1394  * Autoconnect filter
1395  * Format:
1396  *    auto:bus:dev[:vid:pid]
1397  *    auto:bus.dev[:vid:pid]
1398  *
1399  *    bus  - bus number    (dec, * means any)
1400  *    dev  - device number (dec, * means any)
1401  *    vid  - vendor id     (hex, * means any)
1402  *    pid  - product id    (hex, * means any)
1403  *
1404  *    See 'lsusb' output.
1405  */
1406 static int parse_filter(const char *spec, struct USBAutoFilter *f)
1407 {
1408     enum { BUS, DEV, VID, PID, DONE };
1409     const char *p = spec;
1410     int i;
1411
1412     f->bus_num    = -1;
1413     f->addr       = -1;
1414     f->vendor_id  = -1;
1415     f->product_id = -1;
1416
1417     for (i = BUS; i < DONE; i++) {
1418         p = strpbrk(p, ":.");
1419         if (!p) break;
1420         p++;
1421  
1422         if (*p == '*')
1423             continue;
1424
1425         switch(i) {
1426         case BUS: f->bus_num = strtol(p, NULL, 10);    break;
1427         case DEV: f->addr    = strtol(p, NULL, 10);    break;
1428         case VID: f->vendor_id  = strtol(p, NULL, 16); break;
1429         case PID: f->product_id = strtol(p, NULL, 16); break;
1430         }
1431     }
1432
1433     if (i < DEV) {
1434         fprintf(stderr, "husb: invalid auto filter spec %s\n", spec);
1435         return -1;
1436     }
1437
1438     return 0;
1439 }
1440
1441 static int match_filter(const struct USBAutoFilter *f1, 
1442                         const struct USBAutoFilter *f2)
1443 {
1444     return f1->bus_num    == f2->bus_num &&
1445            f1->addr       == f2->addr &&
1446            f1->vendor_id  == f2->vendor_id &&
1447            f1->product_id == f2->product_id;
1448 }
1449
1450 static int usb_host_auto_add(const char *spec)
1451 {
1452     struct USBAutoFilter filter, *f;
1453
1454     if (parse_filter(spec, &filter) < 0)
1455         return -1;
1456
1457     f = qemu_mallocz(sizeof(*f));
1458     if (!f) {
1459         fprintf(stderr, "husb: failed to allocate auto filter\n");
1460         return -1;
1461     }
1462
1463     *f = filter; 
1464
1465     if (!usb_auto_filter) {
1466         /*
1467          * First entry. Init and start the monitor.
1468          * Right now we're using timer to check for new devices.
1469          * If this turns out to be too expensive we can move that into a 
1470          * separate thread.
1471          */
1472         usb_auto_timer = qemu_new_timer(rt_clock, usb_host_auto_timer, NULL);
1473         if (!usb_auto_timer) {
1474             fprintf(stderr, "husb: failed to allocate auto scan timer\n");
1475             qemu_free(f);
1476             return -1;
1477         }
1478
1479         /* Check for new devices every two seconds */
1480         qemu_mod_timer(usb_auto_timer, qemu_get_clock(rt_clock) + 2000);
1481     }
1482
1483     dprintf("husb: added auto filter: bus_num %d addr %d vid %d pid %d\n",
1484         f->bus_num, f->addr, f->vendor_id, f->product_id);
1485
1486     f->next = usb_auto_filter;
1487     usb_auto_filter = f;
1488
1489     return 0;
1490 }
1491
1492 static int usb_host_auto_del(const char *spec)
1493 {
1494     struct USBAutoFilter *pf = usb_auto_filter;
1495     struct USBAutoFilter **prev = &usb_auto_filter;
1496     struct USBAutoFilter filter;
1497
1498     if (parse_filter(spec, &filter) < 0)
1499         return -1;
1500
1501     while (pf) {
1502         if (match_filter(pf, &filter)) {
1503             dprintf("husb: removed auto filter: bus_num %d addr %d vid %d pid %d\n",
1504                      pf->bus_num, pf->addr, pf->vendor_id, pf->product_id);
1505
1506             *prev = pf->next;
1507
1508             if (!usb_auto_filter) {
1509                 /* No more filters. Stop scanning. */
1510                 qemu_del_timer(usb_auto_timer);
1511                 qemu_free_timer(usb_auto_timer);
1512             }
1513
1514             return 0;
1515         }
1516
1517         prev = &pf->next;
1518         pf   = pf->next;
1519     }
1520
1521     return -1;
1522 }
1523
1524 typedef struct FindDeviceState {
1525     int vendor_id;
1526     int product_id;
1527     int bus_num;
1528     int addr;
1529     char product_name[PRODUCT_NAME_SZ];
1530 } FindDeviceState;
1531
1532 static int usb_host_find_device_scan(void *opaque, int bus_num, int addr,
1533                                      int class_id,
1534                                      int vendor_id, int product_id,
1535                                      const char *product_name, int speed)
1536 {
1537     FindDeviceState *s = opaque;
1538     if ((vendor_id == s->vendor_id &&
1539         product_id == s->product_id) ||
1540         (bus_num == s->bus_num &&
1541         addr == s->addr)) {
1542         pstrcpy(s->product_name, PRODUCT_NAME_SZ, product_name);
1543         s->bus_num = bus_num;
1544         s->addr = addr;
1545         return 1;
1546     } else {
1547         return 0;
1548     }
1549 }
1550
1551 /* the syntax is :
1552    'bus.addr' (decimal numbers) or
1553    'vendor_id:product_id' (hexa numbers) */
1554 static int usb_host_find_device(int *pbus_num, int *paddr,
1555                                 char *product_name, int product_name_size,
1556                                 const char *devname)
1557 {
1558     const char *p;
1559     int ret;
1560     FindDeviceState fs;
1561
1562     p = strchr(devname, '.');
1563     if (p) {
1564         *pbus_num = strtoul(devname, NULL, 0);
1565         *paddr = strtoul(p + 1, NULL, 0);
1566         fs.bus_num = *pbus_num;
1567         fs.addr = *paddr;
1568         ret = usb_host_scan(&fs, usb_host_find_device_scan);
1569         if (ret)
1570             pstrcpy(product_name, product_name_size, fs.product_name);
1571         return 0;
1572     }
1573
1574     p = strchr(devname, ':');
1575     if (p) {
1576         fs.vendor_id = strtoul(devname, NULL, 16);
1577         fs.product_id = strtoul(p + 1, NULL, 16);
1578         ret = usb_host_scan(&fs, usb_host_find_device_scan);
1579         if (ret) {
1580             *pbus_num = fs.bus_num;
1581             *paddr = fs.addr;
1582             pstrcpy(product_name, product_name_size, fs.product_name);
1583             return 0;
1584         }
1585     }
1586     return -1;
1587 }
1588
1589 /**********************/
1590 /* USB host device info */
1591
1592 struct usb_class_info {
1593     int class;
1594     const char *class_name;
1595 };
1596
1597 static const struct usb_class_info usb_class_info[] = {
1598     { USB_CLASS_AUDIO, "Audio"},
1599     { USB_CLASS_COMM, "Communication"},
1600     { USB_CLASS_HID, "HID"},
1601     { USB_CLASS_HUB, "Hub" },
1602     { USB_CLASS_PHYSICAL, "Physical" },
1603     { USB_CLASS_PRINTER, "Printer" },
1604     { USB_CLASS_MASS_STORAGE, "Storage" },
1605     { USB_CLASS_CDC_DATA, "Data" },
1606     { USB_CLASS_APP_SPEC, "Application Specific" },
1607     { USB_CLASS_VENDOR_SPEC, "Vendor Specific" },
1608     { USB_CLASS_STILL_IMAGE, "Still Image" },
1609     { USB_CLASS_CSCID, "Smart Card" },
1610     { USB_CLASS_CONTENT_SEC, "Content Security" },
1611     { -1, NULL }
1612 };
1613
1614 static const char *usb_class_str(uint8_t class)
1615 {
1616     const struct usb_class_info *p;
1617     for(p = usb_class_info; p->class != -1; p++) {
1618         if (p->class == class)
1619             break;
1620     }
1621     return p->class_name;
1622 }
1623
1624 static void usb_info_device(int bus_num, int addr, int class_id,
1625                             int vendor_id, int product_id,
1626                             const char *product_name,
1627                             int speed)
1628 {
1629     const char *class_str, *speed_str;
1630
1631     switch(speed) {
1632     case USB_SPEED_LOW:
1633         speed_str = "1.5";
1634         break;
1635     case USB_SPEED_FULL:
1636         speed_str = "12";
1637         break;
1638     case USB_SPEED_HIGH:
1639         speed_str = "480";
1640         break;
1641     default:
1642         speed_str = "?";
1643         break;
1644     }
1645
1646     term_printf("  Device %d.%d, speed %s Mb/s\n",
1647                 bus_num, addr, speed_str);
1648     class_str = usb_class_str(class_id);
1649     if (class_str)
1650         term_printf("    %s:", class_str);
1651     else
1652         term_printf("    Class %02x:", class_id);
1653     term_printf(" USB device %04x:%04x", vendor_id, product_id);
1654     if (product_name[0] != '\0')
1655         term_printf(", %s", product_name);
1656     term_printf("\n");
1657 }
1658
1659 static int usb_host_info_device(void *opaque, int bus_num, int addr,
1660                                 int class_id,
1661                                 int vendor_id, int product_id,
1662                                 const char *product_name,
1663                                 int speed)
1664 {
1665     usb_info_device(bus_num, addr, class_id, vendor_id, product_id,
1666                     product_name, speed);
1667     return 0;
1668 }
1669
1670 static void dec2str(int val, char *str, size_t size)
1671 {
1672     if (val == -1)
1673         snprintf(str, size, "*");
1674     else
1675         snprintf(str, size, "%d", val); 
1676 }
1677
1678 static void hex2str(int val, char *str, size_t size)
1679 {
1680     if (val == -1)
1681         snprintf(str, size, "*");
1682     else
1683         snprintf(str, size, "%x", val);
1684 }
1685
1686 void usb_host_info(void)
1687 {
1688     struct USBAutoFilter *f;
1689
1690     usb_host_scan(NULL, usb_host_info_device);
1691
1692     if (usb_auto_filter)
1693         term_printf("  Auto filters:\n");
1694     for (f = usb_auto_filter; f; f = f->next) {
1695         char bus[10], addr[10], vid[10], pid[10];
1696         dec2str(f->bus_num, bus, sizeof(bus));
1697         dec2str(f->addr, addr, sizeof(addr));
1698         hex2str(f->vendor_id, vid, sizeof(vid));
1699         hex2str(f->product_id, pid, sizeof(pid));
1700         term_printf("    Device %s.%s ID %s:%s\n", bus, addr, vid, pid);
1701     }
1702 }