Messages in this thread | | | Date | Mon, 11 Nov 2013 16:03:59 -0800 | From | David Cohen <> | Subject | Re: [PATCH v5 2/5] usb: gadget: add quirk_ep_out_aligned_size field to struct usb_gadget |
| |
On 11/11/2013 03:55 PM, Michal Nazarewicz wrote: > 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; > }
The CPU time to check unsigned:1 and possibly jump is about the same as round_up() itself. For readability matters, we can round_up() directly.
Br, David
| |