lkml.org 
[lkml]   [2013]   [Nov]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    SubjectRe: [PATCH v5 2/5] usb: gadget: add quirk_ep_out_aligned_size field to struct usb_gadget
    Date
    On Mon, Nov 11 2013, David Cohen wrote:
    > Due to USB controllers may have different restrictions, usb gadget layer
    > needs to provide a generic way to inform gadget functions to complain
    > with non-standard requirements.
    >
    > This patch adds 'quirk_ep_out_aligned_size' field to struct usb_gadget
    > to inform when controller's epout requires buffer size to be aligned to
    > MaxPacketSize. A helper is also provided to align buffer size when
    > necessary.
    >
    > Signed-off-by: David Cohen <david.a.cohen@linux.intel.com>
    > Acked-by: Alan Stern <stern@rowland.harvard.edu>

    Acked-by: Michal Nazarewicz <mina86@mina86.com>

    > ---
    >
    > Michal,
    >
    > I added prefix 'usb: f_fs: ' to patch's subject. I did not add 'usb: gadget:
    > f_fs' due to it would be too long.
    >
    >
    > include/linux/usb/gadget.h | 16 ++++++++++++++++
    > 1 file changed, 16 insertions(+)
    >
    > diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
    > index 23b3bfd0a842..41e8834af57d 100644
    > --- a/include/linux/usb/gadget.h
    > +++ b/include/linux/usb/gadget.h
    > @@ -441,6 +441,19 @@ static inline void usb_ep_fifo_flush(struct usb_ep *ep)
    > ep->ops->fifo_flush(ep);
    > }
    >
    > +/**
    > + * usb_ep_align_maxpacketsize - returns @len aligned to ep's maxpacketsize
    > + * @ep: the endpoint whose maxpacketsize is used to align @len
    > + * @len: buffer size's length to align to @ep's maxpacketsize
    > + *
    > + * This helper is used in case it's required for any reason to align buffer's
    > + * size to an ep's maxpacketsize.
    > + */
    > +static inline size_t usb_ep_align_maxpacketsize(struct usb_ep *ep, size_t len)
    > +{
    > + return round_up(len, (size_t)ep->desc->wMaxPacketSize);
    > +}
    > +

    Come to think of it, perhaps even better helper would be:

    static inline size_t usb_ep_align_maybe(
    struct usb_gadget *gadget, struct usb_ep *ep, size_t len) {
    return gadget->quir_ep_out_aligned_size ?
    round_up(len, (size_t)ep->desc->wMaxPacketSize) : len;
    }

    >
    > /*-------------------------------------------------------------------------*/
    >
    > @@ -502,6 +515,8 @@ struct usb_gadget_ops {
    > * only supports HNP on a different root port.
    > * @b_hnp_enable: OTG device feature flag, indicating that the A-Host
    > * enabled HNP support.
    > + * @quirk_ep_out_aligned_size: epout requires buffer size to be aligned to
    > + * MaxPacketSize.
    > *
    > * Gadgets have a mostly-portable "gadget driver" implementing device
    > * functions, handling all usb configurations and interfaces. Gadget
    > @@ -541,6 +556,7 @@ struct usb_gadget {
    > unsigned b_hnp_enable:1;
    > unsigned a_hnp_support:1;
    > unsigned a_alt_hnp_support:1;
    > + unsigned quirk_ep_out_aligned_size:1;
    > };
    > #define work_to_gadget(w) (container_of((w), struct usb_gadget, work))
    >
    > --
    > 1.8.4.rc3
    >

    --
    Best regards, _ _
    .o. | Liege of Serenely Enlightened Majesty of o' \,=./ `o
    ..o | Computer Science, Michał “mina86” Nazarewicz (o o)
    ooo +--<mpn@google.com>--<xmpp:mina86@jabber.org>--ooO--(_)--Ooo--
    [unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2013-11-12 01:21    [W:5.514 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site