On Sunday, 14. February 2010 12:17:58 Jie Zhang wrote:
> On Sun, Feb 14, 2010 at 5:58 PM, Jim Paris <jim@xxxxxxxx> wrote:
> >> +#ifdef __linux__
> >> + /* We can't set readbuffer_chunksize larger than
> >> MAX_BULK_BUFFER_LENGTH, + which is defined in libusb-1.0.
> >> Otherwise, each USB read request will + be divided into
> >> multiple URBs. This will cause issues on Linux kernel + older
> >> than 2.6.32. */
> >> + if (chunksize > 16384)
> >> + chunksize = 16384;
> > Shouldn't this be
> >> + if (chunksize > MAX_BULK_BUFFER_LENGTH)
> >> + chunksize = MAX_BULK_BUFFER_LENGTH;
> MAX_BULK_BUFFER_LENGTH is a macro defined in an internal header file
> in libusb. So we can't use it here.
Hmm, here's a comment from libusb 1.0:
/* usbfs places a 16kb limit on bulk URBs. we divide up larger requests
* into smaller units to meet such restriction, then fire off all the
* units at once. it would be simpler if we just fired one unit at a
* but there is a big performance gain through doing it this way. */
int num_urbs = transfer->length / MAX_BULK_BUFFER_LENGTH;
Just guess what happens if the usbfs restriction is resolved
and libusb adjusts the interface... this -will- break.
Is there some data structure we could read out?
Or include the internal header file during the build
stage of libftdi to determine the value?
btw: Thanks for applying the other patches!
libftdi - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to libftdi+unsubscribe@xxxxxxxxxxxxxxxxxxxxxxx