summaryrefslogtreecommitdiff
path: root/drivers/usb/gadget/udc/gr_udc.h
diff options
context:
space:
mode:
authorAndreas Larsson <andreas@gaisler.com>2014-09-15 12:32:54 +0200
committerFelipe Balbi <balbi@ti.com>2014-09-16 10:01:45 -0500
commit5b484989a998074762281a1ae71b2d88f26f66d6 (patch)
tree3b030e6fd8f43661117addcb28bdbbd575636243 /drivers/usb/gadget/udc/gr_udc.h
parentaf54954ad02091506ced45588215d389d606f74e (diff)
usb: gadget: gr_udc: Add bounce buffer to handle odd sized OUT requests
This adds a bounce buffer that handles the end of OUT requests where req.length is not divisible by ep->ep.maxpacket. Before this, such requests were rejected as the DMA engine cannot restrict itself to buffers that are smaller than ep->ep.maxpacket. Signed-off-by: Andreas Larsson <andreas@gaisler.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/gadget/udc/gr_udc.h')
-rw-r--r--drivers/usb/gadget/udc/gr_udc.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/usb/gadget/udc/gr_udc.h b/drivers/usb/gadget/udc/gr_udc.h
index 8388897d9ec3..4297c4e8021f 100644
--- a/drivers/usb/gadget/udc/gr_udc.h
+++ b/drivers/usb/gadget/udc/gr_udc.h
@@ -156,6 +156,10 @@ struct gr_ep {
struct list_head queue;
struct list_head ep_list;
+
+ /* Bounce buffer for end of "odd" sized OUT requests */
+ void *tailbuf;
+ dma_addr_t tailbuf_paddr;
};
struct gr_request {
@@ -167,6 +171,9 @@ struct gr_request {
struct gr_dma_desc *curr_desc; /* Current descriptor */
struct gr_dma_desc *last_desc; /* Last in the chain */
+ u16 evenlen; /* Size of even length head (if oddlen != 0) */
+ u16 oddlen; /* Size of odd length tail if buffer length is "odd" */
+
u8 setup; /* Setup packet */
};