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.sha...@st.com>
> ---
>  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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to