aboutsummaryrefslogtreecommitdiff
path: root/docs/usb2.txt
blob: 6a88d5314f9c18a9a0d02746ba5395b1de57a2e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

More USB tips & tricks
======================

Recently the USB pass through driver (also known as usb-host) and the
QEMU USB subsystem gained a few capabilities which are available only
via qdev properties, i,e. when using '-device'.

USB pass through hints
----------------------

The usb-host driver has a bunch of properties to specify the device
which should be passed to the guest:

  hostbus=<nr> -- Specifies the bus number the device must be attached
  to.

  hostaddr=<nr> -- Specifies the device address the device got
  assigned by the guest os.

  hostport=<str> -- Specifies the physical port the device is attached
  to.

  vendorid=<hexnr> -- Specifies the vendor ID of the device.
  productid=<hexnr> -- Specifies the product ID of the device.

In theory you can combine all these properties as you like.  In
practice only a few combinations are useful:

  (1) vendorid+productid -- match for a specific device, pass it to
      the guest when it shows up somewhere in the host.

  (2) hostbus+hostport -- match for a specific physical port in the
      host, any device which is plugged in there gets passed to the
      guest.

  (3) hostbus+hostaddr -- most useful for ad-hoc pass through as the
      hostaddr isn't stable, the next time you plug in the device it
      gets a new one ...

Note that USB 1.1 devices are handled by UHCI/OHCI and USB 2.0 by
EHCI.  That means a device plugged into the very same physical port
may show up on different buses depending on the speed.  The port I'm
using for testing is bus 1 + port 1 for 2.0 devices and bus 3 + port 1
for 1.1 devices.  Passing through any device plugged into that port
and also assign them to the correct bus can be done this way:

    qemu -M pc ${otheroptions}                               \
        -usb                                                 \
        -device usb-ehci,id=ehci                             \
        -device usb-host,bus=usb-bus.0,hostbus=3,hostport=1  \
        -device usb-host,bus=ehci.0,hostbus=1,hostport=1

enjoy,
  Gerd

--
Gerd Hoffmann <kraxel@redhat.com>