diff options
Diffstat (limited to 'drivers/usb/gadget/ci_udc.c')
-rw-r--r-- | drivers/usb/gadget/ci_udc.c | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/drivers/usb/gadget/ci_udc.c b/drivers/usb/gadget/ci_udc.c index aadff42a9c..3e8eb8799f 100644 --- a/drivers/usb/gadget/ci_udc.c +++ b/drivers/usb/gadget/ci_udc.c @@ -221,8 +221,8 @@ static void ci_flush_qtd(int ep_num) */ static void ci_flush_td(struct ept_queue_item *td) { - const uint32_t start = (uint32_t)td; - const uint32_t end = (uint32_t) td + ILIST_ENT_SZ; + const unsigned long start = (unsigned long)td; + const unsigned long end = (unsigned long)td + ILIST_ENT_SZ; flush_dcache_range(start, end); } @@ -249,8 +249,8 @@ static void ci_invalidate_qtd(int ep_num) */ static void ci_invalidate_td(struct ept_queue_item *td) { - const uint32_t start = (uint32_t)td; - const uint32_t end = start + ILIST_ENT_SZ; + const unsigned long start = (unsigned long)td; + const unsigned long end = start + ILIST_ENT_SZ; invalidate_dcache_range(start, end); } @@ -258,10 +258,12 @@ static struct usb_request * ci_ep_alloc_request(struct usb_ep *ep, unsigned int gfp_flags) { struct ci_ep *ci_ep = container_of(ep, struct ci_ep, ep); - int num; + int num = -1; struct ci_req *ci_req; - num = ci_ep->desc->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; + if (ci_ep->desc) + num = ci_ep->desc->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; + if (num == 0 && controller.ep0_req) return &controller.ep0_req->req; @@ -281,9 +283,11 @@ static void ci_ep_free_request(struct usb_ep *ep, struct usb_request *req) { struct ci_ep *ci_ep = container_of(ep, struct ci_ep, ep); struct ci_req *ci_req = container_of(req, struct ci_req, req); - int num; + int num = -1; + + if (ci_ep->desc) + num = ci_ep->desc->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; - num = ci_ep->desc->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; if (num == 0) { if (!controller.ep0_req) return; @@ -459,7 +463,7 @@ static void ci_ep_submit_next_request(struct ci_ep *ci_ep) if (len) { qtd = (struct ept_queue_item *) memalign(ILIST_ALIGN, ILIST_ENT_SZ); - dtd->next = (uint32_t)qtd; + dtd->next = (unsigned long)qtd; dtd = qtd; memset(dtd, 0, ILIST_ENT_SZ); } @@ -503,10 +507,10 @@ static void ci_ep_submit_next_request(struct ci_ep *ci_ep) ci_flush_qtd(num); - item = (struct ept_queue_item *)head->next; + item = (struct ept_queue_item *)(unsigned long)head->next; while (item->next != TERMINATE) { - ci_flush_td((struct ept_queue_item *)item->next); - item = (struct ept_queue_item *)item->next; + ci_flush_td((struct ept_queue_item *)(unsigned long)item->next); + item = (struct ept_queue_item *)(unsigned long)item->next; } DBG("ept%d %s queue len %x, req %p, buffer %p\n", @@ -594,7 +598,8 @@ static void handle_ep_complete(struct ci_ep *ci_ep) printf("EP%d/%s FAIL info=%x pg0=%x\n", num, in ? "in" : "out", item->info, item->page0); if (j != ci_req->dtd_count - 1) - next_td = (struct ept_queue_item *)item->next; + next_td = (struct ept_queue_item *)(unsigned long) + item->next; if (j != 0) free(item); } |