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

Reply via email to