On Thu, 3 May 2012 00:20:13 +0300, Felipe Balbi <balbi@xxxxxx> wrote: > On Wed, May 02, 2012 at 05:13:45PM +0300, Alexander Shishkin wrote: > > +#define DMA_ADDR_INVALID (~(dma_addr_t)0) > > please add a patch using the generic map/unmap routines, we should *not* > have these defines anymore. Sure, I came up with the following for the next version of the patchset: >From caa210432bfae906489160c88d6b7b91543831b8 Mon Sep 17 00:00:00 2001 From: Alexander Shishkin <alexander.shishkin@xxxxxxxxxxxxxxx> Date: Thu, 3 May 2012 13:58:33 +0300 Subject: usb: gadget: ci13xxx: use generic map/unmap routines We're one of the remaining drivers to map/unmap requests by hand. Switch to using generic gadget routines for that instead. Signed-off-by: Alexander Shishkin <alexander.shishkin@xxxxxxxxxxxxxxx> --- drivers/usb/gadget/ci13xxx_udc.c | 44 +++++++++----------------------------- drivers/usb/gadget/ci13xxx_udc.h | 1 - 2 files changed, 10 insertions(+), 35 deletions(-) diff --git a/drivers/usb/gadget/ci13xxx_udc.c b/drivers/usb/gadget/ci13xxx_udc.c index cec92a1..6360ac5 100644 --- a/drivers/usb/gadget/ci13xxx_udc.c +++ b/drivers/usb/gadget/ci13xxx_udc.c @@ -73,8 +73,6 @@ * DEFINE *****************************************************************************/ -#define DMA_ADDR_INVALID (~(dma_addr_t)0) - /* control endpoint description */ static const struct usb_endpoint_descriptor ctrl_endpt_out_desc = { @@ -1477,36 +1475,23 @@ static int _hardware_enqueue(struct ci13xxx_ep *mEp, struct ci13xxx_req *mReq) return -EALREADY; mReq->req.status = -EALREADY; - if (length && mReq->req.dma == DMA_ADDR_INVALID) { - mReq->req.dma = \ - dma_map_single(mEp->device, mReq->req.buf, - length, mEp->dir ? DMA_TO_DEVICE : - DMA_FROM_DEVICE); - if (mReq->req.dma == 0) - return -ENOMEM; - - mReq->map = 1; - } if (mReq->req.zero && length && (length % mEp->ep.maxpacket == 0)) { mReq->zptr = dma_pool_alloc(mEp->td_pool, GFP_ATOMIC, &mReq->zdma); - if (mReq->zptr == NULL) { - if (mReq->map) { - dma_unmap_single(mEp->device, mReq->req.dma, - length, mEp->dir ? DMA_TO_DEVICE : - DMA_FROM_DEVICE); - mReq->req.dma = DMA_ADDR_INVALID; - mReq->map = 0; - } + if (mReq->zptr == NULL) return -ENOMEM; - } + memset(mReq->zptr, 0, sizeof(*mReq->zptr)); mReq->zptr->next = TD_TERMINATE; mReq->zptr->token = TD_STATUS_ACTIVE; if (!mReq->req.no_interrupt) mReq->zptr->token |= TD_IOC; } + ret = usb_gadget_map_request(&udc->gadget, &mReq->req, mEp->dir); + if (ret) + return ret; + /* * TD configuration * TODO - handle requests which spawns into several TDs @@ -1589,12 +1574,7 @@ static int _hardware_dequeue(struct ci13xxx_ep *mEp, struct ci13xxx_req *mReq) mReq->req.status = 0; - if (mReq->map) { - dma_unmap_single(mEp->device, mReq->req.dma, mReq->req.length, - mEp->dir ? DMA_TO_DEVICE : DMA_FROM_DEVICE); - mReq->req.dma = DMA_ADDR_INVALID; - mReq->map = 0; - } + usb_gadget_unmap_request(&mEp->udc->gadget, &mReq->req, mEp->dir); mReq->req.status = mReq->ptr->token & TD_STATUS; if ((TD_STATUS_HALTED & mReq->req.status) != 0) @@ -2224,7 +2204,6 @@ static struct usb_request *ep_alloc_request(struct usb_ep *ep, gfp_t gfp_flags) mReq = kzalloc(sizeof(struct ci13xxx_req), gfp_flags); if (mReq != NULL) { INIT_LIST_HEAD(&mReq->queue); - mReq->req.dma = DMA_ADDR_INVALID; mReq->ptr = dma_pool_alloc(mEp->td_pool, gfp_flags, &mReq->dma); @@ -2362,12 +2341,9 @@ static int ep_dequeue(struct usb_ep *ep, struct usb_request *req) /* pop request */ list_del_init(&mReq->queue); - if (mReq->map) { - dma_unmap_single(mEp->device, mReq->req.dma, mReq->req.length, - mEp->dir ? DMA_TO_DEVICE : DMA_FROM_DEVICE); - mReq->req.dma = DMA_ADDR_INVALID; - mReq->map = 0; - } + + usb_gadget_unmap_request(&mEp->udc->gadget, req, mEp->dir); + req->status = -ECONNRESET; if (mReq->req.complete != NULL) { diff --git a/drivers/usb/gadget/ci13xxx_udc.h b/drivers/usb/gadget/ci13xxx_udc.h index a84dffb..311bbb5 100644 --- a/drivers/usb/gadget/ci13xxx_udc.h +++ b/drivers/usb/gadget/ci13xxx_udc.h @@ -71,7 +71,6 @@ struct ci13xxx_qh { /* Extension of usb_request */ struct ci13xxx_req { struct usb_request req; - unsigned map; struct list_head queue; struct ci13xxx_td *ptr; dma_addr_t dma; -- 1.7.10 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html