On 09/15/17 00:02, Ard Biesheuvel wrote:
> 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]>

Commit f9c59fa44ae2.

Thanks!
Laszlo
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to