diff options
author | David Brownell <david-b@pacbell.net> | 2007-07-01 21:21:00 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-07-13 01:34:42 +0200 |
commit | c67ab134ba9f83f9de86e58adfeaa14a9efa6e00 (patch) | |
tree | df9022b4a38e955abbf254d71e00ac1fecce6420 /drivers/usb/gadget/goku_udc.c | |
parent | usb gadget stack: remove usb_ep_*_buffer(), part 1 (diff) | |
download | linux-c67ab134ba9f83f9de86e58adfeaa14a9efa6e00.tar.xz linux-c67ab134ba9f83f9de86e58adfeaa14a9efa6e00.zip |
usb gadget stack: remove usb_ep_*_buffer(), part 2
This patch removes controller driver infrastructure which supported
the now-removed usb_ep_{alloc,free}_buffer() calls.
As can be seen, many of the implementations of this were broken to
various degrees. Many didn't properly return dma-coherent mappings;
those which did so were necessarily ugly because of bogosity in the
underlying dma_free_coherent() calls ... which on many platforms
can't be called from the same contexts (notably in_irq) from which
their dma_alloc_coherent() sibling can be called.
The main potential downside of removing this is that gadget drivers
wouldn't have specific knowledge that the controller drivers have:
endpoints that aren't dma-capable don't need any dma mappings at all.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/gadget/goku_udc.c')
-rw-r--r-- | drivers/usb/gadget/goku_udc.c | 48 |
1 files changed, 0 insertions, 48 deletions
diff --git a/drivers/usb/gadget/goku_udc.c b/drivers/usb/gadget/goku_udc.c index ae931af05cef..dfadb643597b 100644 --- a/drivers/usb/gadget/goku_udc.c +++ b/drivers/usb/gadget/goku_udc.c @@ -296,51 +296,6 @@ goku_free_request(struct usb_ep *_ep, struct usb_request *_req) /*-------------------------------------------------------------------------*/ -/* allocating buffers this way eliminates dma mapping overhead, which - * on some platforms will mean eliminating a per-io buffer copy. with - * some kinds of system caches, further tweaks may still be needed. - */ -static void * -goku_alloc_buffer(struct usb_ep *_ep, unsigned bytes, - dma_addr_t *dma, gfp_t gfp_flags) -{ - void *retval; - struct goku_ep *ep; - - ep = container_of(_ep, struct goku_ep, ep); - if (!_ep) - return NULL; - *dma = DMA_ADDR_INVALID; - - if (ep->dma) { - /* the main problem with this call is that it wastes memory - * on typical 1/N page allocations: it allocates 1-N pages. - */ -#warning Using dma_alloc_coherent even with buffers smaller than a page. - retval = dma_alloc_coherent(&ep->dev->pdev->dev, - bytes, dma, gfp_flags); - } else - retval = kmalloc(bytes, gfp_flags); - return retval; -} - -static void -goku_free_buffer(struct usb_ep *_ep, void *buf, dma_addr_t dma, unsigned bytes) -{ - /* free memory into the right allocator */ - if (dma != DMA_ADDR_INVALID) { - struct goku_ep *ep; - - ep = container_of(_ep, struct goku_ep, ep); - if (!_ep) - return; - dma_free_coherent(&ep->dev->pdev->dev, bytes, buf, dma); - } else - kfree (buf); -} - -/*-------------------------------------------------------------------------*/ - static void done(struct goku_ep *ep, struct goku_request *req, int status) { @@ -1026,9 +981,6 @@ static struct usb_ep_ops goku_ep_ops = { .alloc_request = goku_alloc_request, .free_request = goku_free_request, - .alloc_buffer = goku_alloc_buffer, - .free_buffer = goku_free_buffer, - .queue = goku_queue, .dequeue = goku_dequeue, |