On 14 September 2017 at 08:37, Laszlo Ersek <[email protected]> wrote: > The feature is primarily useful for modern AARCH64 guests that have no > built-in virtio block / SCSI drivers; as on "qemu-system-aarch64 -M virt", > there are no IDE or AHCI controllers that could be used as fallback. XHCI > is available in "-M virt" however, and because XHCI predates AARCH64 by > several years, said guests are expected to have built-in drivers for it. > > Other device models ("usb-uas", "usb-bot") are out of scope for now, > similarly to USB1.x (UHCI) and USB2 (EHCI) host controllers, and similarly > to USB hubs (which are USB1.1 only). In particular, port mapping between > EHCI and companion UHCI controllers is very complex; it even leads to PCI > slot/function differences between the OpenFirmware device paths exported > by QEMU and the the UEFI device paths generated by edk2. > > The number of ports on the XHCI controller defaults to 4, but it can be > raised via the "p3" property to 15. In addition, several XHCI controllers > can be grouped into a single-slot, multi-function PCI device. These allow > for a good number of usb-storage devices, while their desired boot order > remains recognizable to this patch. > > In the example below, we create two XHCI controllers, grouped into PCI > slot 00:02 as functions 0 and 1. Both controllers are given 15 ports. We > attach a "usb-storage" device to controller 1 at port 3 (ports are 1-based > in QEMU, 0-based in edk2), and attach another "usb-storage" device to > controller 2 at port 9. > > QEMU command line options (NB. they apply equally to aarch64/virt and > x86_64/{i440fx,q35}): > > -device qemu-xhci,id=xhci1,p3=15,addr=02.0,multifunction=on \ > -device qemu-xhci,id=xhci2,p3=15,addr=02.1 \ > \ > -drive id=disk1,if=none,format=qcow2,$DISK1_OPTIONS \ > -drive id=disk2,if=none,format=qcow2,$DISK2_OPTIONS \ > \ > -device usb-storage,drive=disk1,bus=xhci1.0,port=3,bootindex=1 \ > -device usb-storage,drive=disk2,bus=xhci2.0,port=9,bootindex=2 \ > > Libvirt domain XML fragment: > > <controller type='usb' index='1' model='qemu-xhci' ports='15'> > <address type='pci' > domain='0x0000' bus='0x00' slot='0x02' function='0x0' > multifunction='on'/> > </controller> > <controller type='usb' index='2' model='qemu-xhci' ports='15'> > <address type='pci' > domain='0x0000' bus='0x00' slot='0x02' function='0x1'/> > </controller> > > <disk type='file' device='disk'> > <driver name='qemu' type='qcow2'/> > <source file='...'/> > <target dev='sda' bus='usb'/> > <boot order='1'/> > <address type='usb' bus='1' port='3'/> > </disk> > <disk type='file' device='disk'> > <driver name='qemu' type='qcow2'/> > <source file='...'/> > <target dev='sdb' bus='usb'/> > <boot order='2'/> > <address type='usb' bus='2' port='9'/> > </disk> > > Cc: Ard Biesheuvel <[email protected]> > Cc: Gerd Hoffmann <[email protected]> > Cc: Jordan Justen <[email protected]> > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Laszlo Ersek <[email protected]>
Acked-by: Ard Biesheuvel <[email protected]> _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

