Asynchronous bulk transfers in usb2 ?

Thierry Herbelot thierry.herbelot at free.fr
Wed Dec 3 07:00:03 PST 2008


Hello,

I've been looking at the usb2 code, and from what I've understood, only 
synchronous transfers are possible : a read (for exemple) is only scheduled 
when the userland program calls usb_bulk_read().

Furthermore, only fixed size buffers are used : only one buffer of 32 kbyte 
per transfer. This seems sub-optimal when reading (or writing) from userland 
blocks bigger than 32 kbytes, as multiple kernel-to-userland switches are 
necessary, and there is a latency window where no buffer exists to accept 
data between the arrival of one block and the posting of the next transfer.

One way to work around this kind of limitations is to provide in advance a 
certain number of transfers, arranged in a ring, where the callback function 
at the end of a transfer schedules the next, without any further userland 
intervention.

Is there any project for adding asynchronous bulk reads and/or writes to the 
fine usb2 stack ?

	TfH


More information about the freebsd-usb mailing list