David: I've got a few questions about the API; these issues don't seem to be mentioned in any detail in the kernel sources. They are about how endpoint I/O queues are supposed to be handled. My current understanding is summarized below; please indicate where any mistakes are.
Basically, all URBs destined for an endpoint go into a single queue, which advances as the HC sees fit. When something abnormal happens: If an URB terminates with an error, its queue is stopped until the URB's completion handler returns. Note that an IN transfer ending early because a short packet was received counts as an error if and only if the URB_SHORT_NOT_OK flag is set. If an URB is unlinked, its queue is stopped until the URB's completion handler returns. Is this true even if the URB wasn't at the head of its queue? Queues for isochronous endpoints are handled differently, since they advance at fixed times. Iso URBs don't terminate if they get an error. What happens to the remaining members of a queue when one is deleted? Does the queue stop? Do the following members move forward in time to fill the gap, is the queue simply left with a hole, or are there no guarantees at all? The UHCI driver currently does not follow these rules exactly. Alan Stern ------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel