Hi Gerd, qemu-devel
We are trying to use USB host device assignment to propagate
Logitech H340 headset to QEMU guest with virtual XHCI controller
running Windows 10.
For some reason headphone function of the device does not work -
guest OS claims that the device does not complete requests.
We have a bunch of other devices that work, also, the same device operates
1. connected to physical machine running Windows 10,
2. assigned to the same QEMU VM running Ubuntu Linux or Windows 7,
3. assigned to QEMU VM with virtual OHCI controller and Windows 10.
From what we see, the difference between this Logitech device and other devices
is that it exposes Isochronous Synch Endpoint (see USB audio spec 22.214.171.124) for
Windows traces show (AFAICT, they are pretty cryptic) that the device does not
isochronous IN transfers issued for this endpoint.
The difference between the problematic guest OS (Windows 10) and working
guest OS (Ubuntu Linux) is that Windows 10 driver uses event data TRB entries
for completion notification while Linux sets IOC bit in data transfer TRB
This difference exists for both ISO IN and ISO OUT endpoints of headphones
On QEMU side it looks like guest sends a bunch of ISO OUT requests with data,
1 ISO is request to synch endpoint and then hangs reading MFINDEX register
Of course QEMU processes this ISO IN request and issues data transfer event
TRB which is visible in sniffer running on the guest side (Wireshark).
QEMU also generates events for all ISO OUT transfers, they are visible in
the sniffer as well.
There is a separate parts of logic in XHCI controller code responsible for
of Event Data Transfer Event TRBs and this code works properly as far as we can
Do you have any idea about what could be wrong with this device or
corresponding XHCI code?
Do you see any additional research directions or places to look into?
Thank you in advance,