lkml.org 
[lkml]   [2011]   [Dec]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/9] usb: dwc3: gadget: use generic map/unmap routines
    Date
    those routines have everything we need to map/unmap
    USB requests and it's better to use them.

    Signed-off-by: Felipe Balbi <balbi@ti.com>
    ---
    drivers/usb/dwc3/gadget.c | 80 +++++++--------------------------------------
    1 files changed, 12 insertions(+), 68 deletions(-)

    diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
    index d228188..50e955f 100644
    --- a/drivers/usb/dwc3/gadget.c
    +++ b/drivers/usb/dwc3/gadget.c
    @@ -54,70 +54,6 @@
    #include "gadget.h"
    #include "io.h"

    -#define DMA_ADDR_INVALID (~(dma_addr_t)0)
    -
    -void dwc3_map_buffer_to_dma(struct dwc3_request *req)
    -{
    - struct dwc3 *dwc = req->dep->dwc;
    -
    - if (req->request.length == 0) {
    - /* req->request.dma = dwc->setup_buf_addr; */
    - return;
    - }
    -
    - if (req->request.num_sgs) {
    - int mapped;
    -
    - mapped = dma_map_sg(dwc->dev, req->request.sg,
    - req->request.num_sgs,
    - req->direction ? DMA_TO_DEVICE
    - : DMA_FROM_DEVICE);
    - if (mapped < 0) {
    - dev_err(dwc->dev, "failed to map SGs\n");
    - return;
    - }
    -
    - req->request.num_mapped_sgs = mapped;
    - return;
    - }
    -
    - if (req->request.dma == DMA_ADDR_INVALID) {
    - req->request.dma = dma_map_single(dwc->dev, req->request.buf,
    - req->request.length, req->direction
    - ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
    - req->mapped = true;
    - }
    -}
    -
    -void dwc3_unmap_buffer_from_dma(struct dwc3_request *req)
    -{
    - struct dwc3 *dwc = req->dep->dwc;
    -
    - if (req->request.length == 0) {
    - req->request.dma = DMA_ADDR_INVALID;
    - return;
    - }
    -
    - if (req->request.num_mapped_sgs) {
    - req->request.dma = DMA_ADDR_INVALID;
    - dma_unmap_sg(dwc->dev, req->request.sg,
    - req->request.num_sgs,
    - req->direction ? DMA_TO_DEVICE
    - : DMA_FROM_DEVICE);
    -
    - req->request.num_mapped_sgs = 0;
    - return;
    - }
    -
    - if (req->mapped) {
    - dma_unmap_single(dwc->dev, req->request.dma,
    - req->request.length, req->direction
    - ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
    - req->mapped = 0;
    - req->request.dma = DMA_ADDR_INVALID;
    - }
    -}
    -
    void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req,
    int status)
    {
    @@ -144,7 +80,8 @@ void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req,
    if (req->request.status == -EINPROGRESS)
    req->request.status = status;

    - dwc3_unmap_buffer_from_dma(req);
    + usb_gadget_unmap_request(&dwc->gadget, &req->request,
    + req->direction);

    dev_dbg(dwc->dev, "request %p from %s completed %d/%d ===> %d\n",
    req, dep->name, req->request.actual,
    @@ -558,7 +495,6 @@ static struct usb_request *dwc3_gadget_ep_alloc_request(struct usb_ep *ep,

    req->epnum = dep->number;
    req->dep = dep;
    - req->request.dma = DMA_ADDR_INVALID;

    return &req->request;
    }
    @@ -817,7 +753,8 @@ static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep, u16 cmd_param,
    * here and stop, unmap, free and del each of the linked
    * requests instead of we do now.
    */
    - dwc3_unmap_buffer_from_dma(req);
    + usb_gadget_unmap_request(&dwc->gadget, &req->request,
    + req->direction);
    list_del(&req->list);
    return ret;
    }
    @@ -832,6 +769,9 @@ static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep, u16 cmd_param,

    static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req)
    {
    + struct dwc3 *dwc = dep->dwc;
    + int ret;
    +
    req->request.actual = 0;
    req->request.status = -EINPROGRESS;
    req->direction = dep->direction;
    @@ -849,7 +789,11 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req)
    * This will also avoid Host cancelling URBs due to too
    * many NACKs.
    */
    - dwc3_map_buffer_to_dma(req);
    + ret = usb_gadget_map_request(&dwc->gadget, &req->request,
    + dep->direction);
    + if (ret)
    + return ret;
    +
    list_add_tail(&req->list, &dep->request_list);

    /*
    --
    1.7.8.rc3


    \
     
     \ /
      Last update: 2011-12-19 11:33    [W:4.050 / U:0.620 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site