Re: [PATCH V3 2/5] usb: gadget/uvc: Make video streaming buffer size compliant to USB3.0 SS specs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Bhupesh,

Thank you for the patch.

On Thursday 17 January 2013 16:23:50 Bhupesh Sharma wrote:
> As per the USB3.0 specs, the bandwidth requirements of a UVC's video
> streaming endpoint will change to support super-speed. These changes will
> be dependent on whether the UVC video streaming endpoint is Bulk or
> Isochronous:
> 
> - If video streaming endpoint is Isochronous:
>   As per Section 4.4.8.2 (Isochronous Transfer Bandwidth Requirements)
>   of the USB3.0 specs:
>   	A SuperSpeed isochronous endpoint can move up to three burst
>   	transactions of up to 16 maximum sized packets (3 * 16 * 1024 bytes)
> 	per service interval.
> 
> - If video streaming endpoint is Bulk:
>   As per 4.4.6.1 (Bulk Transfer Data Packet Size) of the USB3.0 specs:
>   	An endpoint for bulk transfers shall set the maximum data packet
> 	payload size in its endpoint descriptor to 1024 bytes.
> 	It also specifies the burst size that the endpoint can accept from or
> 	transmit on the SuperSpeed bus. The allowable burst size for a
> 	bulk endpoint shall be in the range of 1 to 16.
> 
> So, in the Isochronous case, we can define the USB request's buffer to
> be equal to = (Maximum packet size) * (bMaxBurst + 1) * (Mult + 1), so
> that the UDC driver can try to send out this buffer in one Isochronous
> service interval.
> 
> The same computation will hold good for the Bulk case as the Mult
> value is 0 here and we can have a USB request buffer of maximum
> 16 * 1024 bytes size, which can be sent out by the UDC driver as
> per the Bulk bandwidth allocation on the USB3 bus.
> 
> This patch adds the above-mentioned support and is also USB2.0 backward
> compliant.

This looks good to me, except...

> Signed-off-by: Bhupesh Sharma <bhupesh.sharma@xxxxxx>
> ---
>  drivers/usb/gadget/uvc_video.c |    9 +++++++--
>  1 files changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/usb/gadget/uvc_video.c b/drivers/usb/gadget/uvc_video.c
> index b0e53a8..f7d1913 100644
> --- a/drivers/usb/gadget/uvc_video.c
> +++ b/drivers/usb/gadget/uvc_video.c
> @@ -235,7 +235,10 @@ uvc_video_alloc_requests(struct uvc_video *video)
>  	BUG_ON(video->req_size);
> 
>  	for (i = 0; i < UVC_NUM_REQUESTS; ++i) {
> -		video->req_buffer[i] = kmalloc(video->ep->maxpacket, GFP_KERNEL);
> +		video->req_buffer[i] = kmalloc(video->ep->maxpacket *
> +						video->ep->maxburst *

If I'm not mistaken maxburst is 0 for FS and HS endpoints (from 
config_ep_by_speed in drivers/usb/gadget/composite.c). The buffer size will 
then be pretty small :-)

> +						(video->ep->mult + 1),
> +						GFP_KERNEL);
>  		if (video->req_buffer[i] == NULL)
>  			goto error;
> 
> @@ -252,7 +255,9 @@ uvc_video_alloc_requests(struct uvc_video *video)
>  		list_add_tail(&video->req[i]->list, &video->req_free);
>  	}
> 
> -	video->req_size = video->ep->maxpacket;
> +	video->req_size = video->ep->maxpacket * video->ep->maxburst *
> +				(video->ep->mult + 1);
> +
>  	return 0;
> 
>  error:

-- 
Regards,

Laurent Pinchart

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux