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