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

Reply via email to