]> git.proxmox.com Git - qemu.git/blobdiff - docs/usb2.txt
qdev-properties-system.c: Allow vlan or netdev for -device, not both
[qemu.git] / docs / usb2.txt
index 5950c713e904c79edf71c92fbdab1a5ded18c0c2..c7a445afcd55fe1f12033d529d668a1306d5a9f4 100644 (file)
@@ -2,14 +2,16 @@
 USB 2.0 Quick Start
 ===================
 
-The QEMU EHCI Adapter does *not* support companion controllers.  That
-implies there are two completely separate USB busses: One USB 1.1 bus
-driven by the UHCI controller and one USB 2.0 bus driven by the EHCI
-controller.  Devices must be attached to the correct controller
-manually.
+The QEMU EHCI Adapter can be used with and without companion
+controllers.  See below for the companion controller mode.
+
+When not running in companion controller mode there are two completely
+separate USB busses: One USB 1.1 bus driven by the UHCI controller and
+one USB 2.0 bus driven by the EHCI controller.  Devices must be
+attached to the correct controller manually.
 
 The '-usb' switch will make qemu create the UHCI controller as part of
-the PIIX3 chipset.  The USB 1.1 bus will carry the name "usb.0".
+the PIIX3 chipset.  The USB 1.1 bus will carry the name "usb-bus.0".
 
 You can use the standard -device switch to add a EHCI controller to
 your virtual machine.  It is strongly recommended to specify an ID for
@@ -25,13 +27,49 @@ a complete example:
         -drive if=none,id=usbstick,file=/path/to/image   \
         -usb                                             \
         -device usb-ehci,id=ehci                         \
-        -device usb-tablet,bus=usb.0                     \
+        -device usb-tablet,bus=usb-bus.0                 \
         -device usb-storage,bus=ehci.0,drive=usbstick
 
 This attaches a usb tablet to the UHCI adapter and a usb mass storage
 device to the EHCI adapter.
 
 
+Companion controller support
+----------------------------
+
+Companion controller support has been added recently.  The operational
+model described above with two completely separate busses still works
+fine.  Additionally the UHCI and OHCI controllers got the ability to
+attach to a usb bus created by EHCI as companion controllers.  This is
+done by specifying the masterbus and firstport properties.  masterbus
+specifies the bus name the controller should attach to.  firstport
+specifies the first port the controller should attach to, which is
+needed as usually one ehci controller with six ports has three uhci
+companion controllers with two ports each.
+
+There is a config file in docs which will do all this for you, just
+try ...
+
+    qemu -readconfig docs/ich9-ehci-uhci.cfg
+
+... then use "bus=ehci.0" to assign your usb devices to that bus.
+
+
+xhci controller support
+-----------------------
+
+There is also xhci host controller support available.  It got a lot
+less testing than ehci and there are a bunch of known limitations, so
+ehci may work better for you.  On the other hand the xhci hardware
+design is much more virtualization-friendly, thus xhci emulation uses
+less resources (especially cpu).  If you want to give xhci a try
+use this to add the host controller ...
+
+    qemu -device nec-usb-xhci,id=xhci
+
+... then use "bus=xhci.0" when assigning usb devices.
+
+
 More USB tips & tricks
 ======================
 
@@ -50,22 +88,22 @@ ports (1-4), the emulated (1.1) USB hub has eight ports.
 
 Plugging a tablet into UHCI port 1 works like this:
 
-        -device usb-tablet,bus=usb.0,port=1
+        -device usb-tablet,bus=usb-bus.0,port=1
 
 Plugging a hub into UHCI port 2 works like this:
 
-        -device usb-hub,bus=usb.0,port=2
+        -device usb-hub,bus=usb-bus.0,port=2
 
 Plugging a virtual usb stick into port 4 of the hub just plugged works
 this way:
 
-        -device usb-storage,bus=usb.0,port=2.4,drive=...
+        -device usb-storage,bus=usb-bus.0,port=2.4,drive=...
 
 You can do basically the same in the monitor using the device_add
 command.  If you want to unplug devices too you should specify some
 unique id which you can use to refer to the device ...
 
-        (qemu) device_add usb-tablet,bus=usb.0,port=1,id=my-tablet
+        (qemu) device_add usb-tablet,bus=usb-bus.0,port=1,id=my-tablet
         (qemu) device_del my-tablet
 
 ... when unplugging it with device_del.
@@ -110,10 +148,10 @@ 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.0,hostbus=3,hostport=1  \
+    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,