Mathias:

I noticed a couple of things wrong in xhci_queue_isoc_tx_prepare().  
One of them isn't too serious: The code checks in several places 
whether the device is running at low speed.  This is useless, because 
USB does not support isochronous transfers at low speed.

More importantly, the routine sets urb->start_frame to the current 
value of the frame counter.  This is completely wrong; urb->start_frame 
is supposed to be the (micro-)frame number for when the transfer 
begins, not when the transfer was submitted.

As far as I can tell, the only way to do this correctly is to set the
Frame ID field (with SIA = 0) in the first TD of an isochronous stream,
and then set SIA = 1 in all the following TDs (see 4.11.2.5).  That
way, xhci-hcd will know exactly when the stream begins, so it can keep
track of the frame in which each URB starts.  Dealing with underruns is
left as an exercise for the implementer...

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to