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 properly when: 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 that work is that it exposes Isochronous Synch Endpoint (see USB audio spec 3.7.2.2) for headphones function. Windows traces show (AFAICT, they are pretty cryptic) that the device does not properly complete 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 descriptors. This difference exists for both ISO IN and ISO OUT endpoints of headphones function. 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 repeatedly. 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 generation of Event Data Transfer Event TRBs and this code works properly as far as we can tell. 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, Dmitry