mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-11-27 09:12:44 +00:00
MFC r305284:
Fix array size issue when using the pre-scaling feature for ISOCHRONOUS USB transfers. Make sure enough length and buffer pointers are allocated when setting up the libusb transfer structure to support the maximum number of frames the kernel can handle.
This commit is contained in:
parent
07a65abf25
commit
4177236d20
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/stable/10/; revision=305641
@ -176,6 +176,12 @@ libusb20_tr_open_stream(struct libusb20_transfer *xfer, uint32_t MaxBufSize,
|
||||
return (LIBUSB20_ERROR_BUSY);
|
||||
if (MaxFrameCount & LIBUSB20_MAX_FRAME_PRE_SCALE) {
|
||||
MaxFrameCount &= ~LIBUSB20_MAX_FRAME_PRE_SCALE;
|
||||
/*
|
||||
* The kernel can setup 8 times more frames when
|
||||
* pre-scaling ISOCHRONOUS transfers. Make sure the
|
||||
* length and pointer buffers are big enough:
|
||||
*/
|
||||
MaxFrameCount *= 8;
|
||||
pre_scale = 1;
|
||||
} else {
|
||||
pre_scale = 0;
|
||||
@ -200,8 +206,13 @@ libusb20_tr_open_stream(struct libusb20_transfer *xfer, uint32_t MaxBufSize,
|
||||
}
|
||||
memset(xfer->ppBuffer, 0, size);
|
||||
|
||||
error = xfer->pdev->methods->tr_open(xfer, MaxBufSize,
|
||||
MaxFrameCount, ep_no, stream_id, pre_scale);
|
||||
if (pre_scale) {
|
||||
error = xfer->pdev->methods->tr_open(xfer, MaxBufSize,
|
||||
MaxFrameCount / 8, ep_no, stream_id, 1);
|
||||
} else {
|
||||
error = xfer->pdev->methods->tr_open(xfer, MaxBufSize,
|
||||
MaxFrameCount, ep_no, stream_id, 0);
|
||||
}
|
||||
|
||||
if (error) {
|
||||
free(xfer->ppBuffer);
|
||||
|
Loading…
Reference in New Issue
Block a user