lkml.org 
[lkml]   [2016]   [Jul]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH] usb: gadget: f_midi: Add checking if it need align buffer's size to an ep's maxpacketsize
    Date
    On Fri, Jul 08 2016, Baolin Wang wrote:
    > On 7 July 2016 at 20:51, Michal Nazarewicz <mina86@mina86.com> wrote:
    >> On Thu, Jul 07 2016, Baolin Wang wrote:
    >>> Some gadget device (such as dwc3 gadget) requires quirk_ep_out_aligned_size
    >>> attribute, which means it need to align the request buffer's size to an ep's
    >>> maxpacketsize.
    >>>
    >>> Thus we add usb_ep_align_maybe() function to check if it is need to align
    >>> the request buffer's size to an ep's maxpacketsize.
    >>>
    >>> Signed-off-by: Baolin Wang <baolin.wang@linaro.org>
    >>
    >> Acked-by: Michal Nazarewicz <mina86@mina86.com>
    >>
    >>> ---
    >>> drivers/usb/gadget/function/f_midi.c | 18 +++++++++++-------
    >>> 1 file changed, 11 insertions(+), 7 deletions(-)
    >>>
    >>> diff --git a/drivers/usb/gadget/function/f_midi.c b/drivers/usb/gadget/function/f_midi.c
    >>> index 58fc199..2e3f11e 100644
    >>> --- a/drivers/usb/gadget/function/f_midi.c
    >>> +++ b/drivers/usb/gadget/function/f_midi.c
    >>> @@ -328,7 +328,7 @@ static int f_midi_start_ep(struct f_midi *midi,
    >>> static int f_midi_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
    >>> {
    >>> struct f_midi *midi = func_to_midi(f);
    >>> - unsigned i;
    >>> + unsigned i, length;
    >>> int err;
    >>>
    >>> /* we only set alt for MIDIStreaming interface */
    >>> @@ -345,9 +345,11 @@ static int f_midi_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
    >>>
    >>> /* pre-allocate write usb requests to use on f_midi_transmit. */
    >>> while (kfifo_avail(&midi->in_req_fifo)) {
    >>> - struct usb_request *req =
    >>> - midi_alloc_ep_req(midi->in_ep, midi->buflen);
    >>> + struct usb_request *req;
    >>>
    >>> + length = usb_ep_align_maybe(midi->gadget, midi->in_ep,
    >>> + midi->buflen);
    >>> + req = midi_alloc_ep_req(midi->in_ep, length);
    >>> if (req == NULL)
    >>> return -ENOMEM;
    >>>
    >>> @@ -359,10 +361,12 @@ static int f_midi_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
    >>>
    >>> /* allocate a bunch of read buffers and queue them all at once. */
    >>> for (i = 0; i < midi->qlen && err == 0; i++) {
    >>> - struct usb_request *req =
    >>> - midi_alloc_ep_req(midi->out_ep,
    >>> - max_t(unsigned, midi->buflen,
    >>> - bulk_out_desc.wMaxPacketSize));
    >>> + struct usb_request *req;
    >>> +
    >>> + length = usb_ep_align_maybe(midi->gadget, midi->out_ep,
    >>> + midi->buflen);
    >>> + req = midi_alloc_ep_req(midi->out_ep,
    >>> + max_t(unsigned, length, bulk_out_desc.wMaxPacketSize));
    >>
    >> Perhaps:
    >>
    >> + length = midi->buflen < bulk_out_desc.wMaxPacketSize
    >> + ? bulk_out_desc.wMaxPacketSize
    >> + : usb_ep_align_maybe(midi->gadget, midi->out_ep,
    >> + midi->buflen);
    >> + req = midi_alloc_ep_req(midi->out_ep, length);
    >>
    >> I find it somewhat cleaner. Up to you.
    >
    > But if the gadget does not requires 'quirk_ep_out_aligned_size', then
    > we also can keep midi->buflen length although midi->buflen <
    > bulk_out_desc.wMaxPacketSize, right? Thanks for your comment.

    I don’t know. That’s not what the original code was doing. The
    original code was using:

    max_t(unsigned, midi->buflen, bulk_out_desc.wMaxPacketSize));

    for some reason.>

    >>> if (req == NULL)
    >>> return -ENOMEM;
    >>>
    >>
    >> --
    >> Best regards
    >> ミハウ “𝓶𝓲𝓷𝓪86” ナザレヴイツ
    >> «If at first you don’t succeed, give up skydiving»
    >
    >
    >
    > --
    > Baolin.wang
    > Best Regards

    --
    Best regards
    ミハウ “𝓶𝓲𝓷𝓪86” ナザレヴイツ
    «If at first you don’t succeed, give up skydiving»

    \
     
     \ /
      Last update: 2016-07-08 15:41    [W:2.199 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site