Lines Matching refs:req
74 static int udc_free_dma_chain(struct udc *dev, struct udc_request *req);
75 static int udc_create_dma_chain(struct udc_ep *ep, struct udc_request *req,
496 udc_free_request(&ep->ep, &ep->bna_dummy_req->req); in udc_ep_disable()
508 struct udc_request *req; in udc_alloc_request() local
518 req = kzalloc(sizeof(struct udc_request), gfp); in udc_alloc_request()
519 if (!req) in udc_alloc_request()
522 req->req.dma = DMA_DONT_USE; in udc_alloc_request()
523 INIT_LIST_HEAD(&req->queue); in udc_alloc_request()
528 &req->td_phys); in udc_alloc_request()
530 kfree(req); in udc_alloc_request()
536 req, dma_desc, in udc_alloc_request()
537 (unsigned long)req->td_phys); in udc_alloc_request()
543 req->td_data = dma_desc; in udc_alloc_request()
544 req->td_data_last = NULL; in udc_alloc_request()
545 req->chain_len = 1; in udc_alloc_request()
548 return &req->req; in udc_alloc_request()
556 struct udc_request *req; in udc_free_request() local
562 req = container_of(usbreq, struct udc_request, req); in udc_free_request()
563 VDBG(ep->dev, "free_req req=%p\n", req); in udc_free_request()
564 BUG_ON(!list_empty(&req->queue)); in udc_free_request()
565 if (req->td_data) { in udc_free_request()
566 VDBG(ep->dev, "req->td_data=%p\n", req->td_data); in udc_free_request()
569 if (req->chain_len > 1) in udc_free_request()
570 udc_free_dma_chain(ep->dev, req); in udc_free_request()
572 pci_pool_free(ep->dev->data_requests, req->td_data, in udc_free_request()
573 req->td_phys); in udc_free_request()
575 kfree(req); in udc_free_request()
579 static void udc_init_bna_dummy(struct udc_request *req) in udc_init_bna_dummy() argument
581 if (req) { in udc_init_bna_dummy()
583 req->td_data->status |= AMD_BIT(UDC_DMA_IN_STS_L); in udc_init_bna_dummy()
585 req->td_data->next = req->td_phys; in udc_init_bna_dummy()
587 req->td_data->status in udc_init_bna_dummy()
588 = AMD_ADDBITS(req->td_data->status, in udc_init_bna_dummy()
593 req->td_data, req->td_data->status); in udc_init_bna_dummy()
601 struct udc_request *req = NULL; in udc_alloc_bna_dummy() local
607 req = container_of(_req, struct udc_request, req); in udc_alloc_bna_dummy()
608 ep->bna_dummy_req = req; in udc_alloc_bna_dummy()
609 udc_init_bna_dummy(req); in udc_alloc_bna_dummy()
611 return req; in udc_alloc_bna_dummy()
616 udc_txfifo_write(struct udc_ep *ep, struct usb_request *req) in udc_txfifo_write() argument
624 if (!req || !ep) in udc_txfifo_write()
627 req_buf = req->buf + req->actual; in udc_txfifo_write()
629 remaining = req->length - req->actual; in udc_txfifo_write()
689 udc_rxfifo_read(struct udc_ep *ep, struct udc_request *req) in udc_rxfifo_read() argument
700 buf_space = req->req.length - req->req.actual; in udc_rxfifo_read()
701 buf = req->req.buf + req->req.actual; in udc_rxfifo_read()
707 req->req.status = -EOVERFLOW; in udc_rxfifo_read()
711 req->req.actual += bytes; in udc_rxfifo_read()
715 || ((req->req.actual == req->req.length) && !req->req.zero)) in udc_rxfifo_read()
726 static int prep_dma(struct udc_ep *ep, struct udc_request *req, gfp_t gfp) in prep_dma() argument
733 ep->num, req->td_data); in prep_dma()
736 req->td_data->bufptr = req->req.dma; in prep_dma()
739 req->td_data->status |= AMD_BIT(UDC_DMA_IN_STS_L); in prep_dma()
744 retval = udc_create_dma_chain(ep, req, ep->ep.maxpacket, gfp); in prep_dma()
751 if (req->req.length == ep->ep.maxpacket) { in prep_dma()
753 req->td_data->status = in prep_dma()
754 AMD_ADDBITS(req->td_data->status, in prep_dma()
766 use_dma_ppb, req->req.length, in prep_dma()
772 if (!use_dma_ppb || req->req.length < ep->ep.maxpacket in prep_dma()
776 req->td_data->status = in prep_dma()
777 AMD_ADDBITS(req->td_data->status, in prep_dma()
778 req->req.length, in prep_dma()
781 req->td_data->status = in prep_dma()
782 AMD_ADDBITS(req->td_data->status, in prep_dma()
787 req->td_data->status = in prep_dma()
788 AMD_ADDBITS(req->td_data->status, in prep_dma()
794 req->td_data->status = in prep_dma()
795 AMD_ADDBITS(req->td_data->status, in prep_dma()
816 complete_req(struct udc_ep *ep, struct udc_request *req, int sts) in complete_req() argument
828 usb_gadget_unmap_request(&dev->gadget, &req->req, ep->in); in complete_req()
834 if (req->req.status == -EINPROGRESS) in complete_req()
835 req->req.status = sts; in complete_req()
838 list_del_init(&req->queue); in complete_req()
841 &req->req, req->req.length, ep->ep.name, sts); in complete_req()
844 usb_gadget_giveback_request(&ep->ep, &req->req); in complete_req()
850 static int udc_free_dma_chain(struct udc *dev, struct udc_request *req) in udc_free_dma_chain() argument
858 DBG(dev, "free chain req = %p\n", req); in udc_free_dma_chain()
861 td_last = req->td_data; in udc_free_dma_chain()
864 for (i = 1; i < req->chain_len; i++) { in udc_free_dma_chain()
876 static struct udc_data_dma *udc_get_last_dma_desc(struct udc_request *req) in udc_get_last_dma_desc() argument
880 td = req->td_data; in udc_get_last_dma_desc()
889 static u32 udc_get_ppbdu_rxbytes(struct udc_request *req) in udc_get_ppbdu_rxbytes() argument
894 td = req->td_data; in udc_get_ppbdu_rxbytes()
914 struct udc_request *req, in udc_create_dma_chain() argument
918 unsigned long bytes = req->req.length; in udc_create_dma_chain()
933 req->td_data->status &= AMD_CLEAR_BIT(UDC_DMA_IN_STS_L); in udc_create_dma_chain()
936 len = req->req.length / ep->ep.maxpacket; in udc_create_dma_chain()
937 if (req->req.length % ep->ep.maxpacket) in udc_create_dma_chain()
940 if (len > req->chain_len) { in udc_create_dma_chain()
942 if (req->chain_len > 1) in udc_create_dma_chain()
943 udc_free_dma_chain(ep->dev, req); in udc_create_dma_chain()
944 req->chain_len = len; in udc_create_dma_chain()
948 td = req->td_data; in udc_create_dma_chain()
963 req->td_data->next); in udc_create_dma_chain()
972 td->bufptr = req->req.dma + i; /* assign buffer */ in udc_create_dma_chain()
987 req->td_data->next = dma_addr; in udc_create_dma_chain()
995 req->td_data->status = in udc_create_dma_chain()
996 AMD_ADDBITS(req->td_data->status, in udc_create_dma_chain()
1024 req->td_data_last = td; in udc_create_dma_chain()
1055 struct udc_request *req; in udc_queue() local
1060 req = container_of(usbreq, struct udc_request, req); in udc_queue()
1063 || !list_empty(&req->queue)) in udc_queue()
1078 VDBG(dev, "DMA map req %p\n", req); in udc_queue()
1086 req->td_data, usbreq->buf); in udc_queue()
1091 req->dma_done = 0; in udc_queue()
1098 complete_req(ep, req, 0); in udc_queue()
1124 retval = prep_dma(ep, req, GFP_ATOMIC); in udc_queue()
1130 req->td_data->status = in udc_queue()
1131 AMD_ADDBITS(req->td_data->status, in udc_queue()
1156 req->td_data, in udc_queue()
1161 writel(req->td_phys, &ep->regs->desptr); in udc_queue()
1192 retval = prep_dma(ep, req, GFP_ATOMIC); in udc_queue()
1199 if (req) { in udc_queue()
1201 list_add_tail(&req->queue, &ep->queue); in udc_queue()
1206 req->dma_going = 1; in udc_queue()
1220 if (udc_rxfifo_read(ep, req)) { in udc_queue()
1222 complete_req(ep, req, 0); in udc_queue()
1238 struct udc_request *req; in empty_req_queue() local
1242 req = list_entry(ep->queue.next, in empty_req_queue()
1245 complete_req(ep, req, -ESHUTDOWN); in empty_req_queue()
1253 struct udc_request *req; in udc_dequeue() local
1262 req = container_of(usbreq, struct udc_request, req); in udc_dequeue()
1268 if (ep->queue.next == &req->queue) { in udc_dequeue()
1269 if (ep->dma && req->dma_going) { in udc_dequeue()
1283 dma_sts = AMD_GETBITS(req->td_data->status, in udc_dequeue()
1288 udc_init_bna_dummy(ep->req); in udc_dequeue()
1296 complete_req(ep, req, -ECONNRESET); in udc_dequeue()
2050 struct udc_request *req; in udc_data_out_isr() local
2087 req = list_entry(ep->queue.next, in udc_data_out_isr()
2090 req = NULL; in udc_data_out_isr()
2093 VDBG(dev, "req = %p\n", req); in udc_data_out_isr()
2098 if (req && udc_rxfifo_read(ep, req)) { in udc_data_out_isr()
2102 complete_req(ep, req, 0); in udc_data_out_isr()
2105 req = list_entry(ep->queue.next, in udc_data_out_isr()
2108 req = NULL; in udc_data_out_isr()
2112 } else if (!ep->cancel_transfer && req != NULL) { in udc_data_out_isr()
2117 dma_done = AMD_GETBITS(req->td_data->status, in udc_data_out_isr()
2127 memcpy(req->td_data, ep->bna_dummy_req->td_data, in udc_data_out_isr()
2130 udc_init_bna_dummy(ep->req); in udc_data_out_isr()
2132 td = udc_get_last_dma_desc(req); in udc_data_out_isr()
2139 count = AMD_GETBITS(req->td_data->status, in udc_data_out_isr()
2144 VDBG(dev, "req->td_data=%p\n", req->td_data); in udc_data_out_isr()
2149 count = udc_get_ppbdu_rxbytes(req); in udc_data_out_isr()
2154 if (!count && req->req.length in udc_data_out_isr()
2166 tmp = req->req.length - req->req.actual; in udc_data_out_isr()
2171 req->req.status = -EOVERFLOW; in udc_data_out_isr()
2175 req->req.actual += count; in udc_data_out_isr()
2176 req->dma_going = 0; in udc_data_out_isr()
2178 complete_req(ep, req, 0); in udc_data_out_isr()
2182 req = list_entry(ep->queue.next, in udc_data_out_isr()
2191 if (req->dma_going == 0) { in udc_data_out_isr()
2193 if (prep_dma(ep, req, GFP_ATOMIC) != 0) in udc_data_out_isr()
2196 writel(req->td_phys, in udc_data_out_isr()
2198 req->dma_going = 1; in udc_data_out_isr()
2265 struct udc_request *req; in udc_data_in_isr() local
2304 req = list_entry(ep->queue.next, in udc_data_in_isr()
2311 td = udc_get_last_dma_desc(req); in udc_data_in_isr()
2317 req->req.actual = req->req.length; in udc_data_in_isr()
2321 req->req.actual = req->req.length; in udc_data_in_isr()
2324 if (req->req.actual == req->req.length) { in udc_data_in_isr()
2326 complete_req(ep, req, 0); in udc_data_in_isr()
2327 req->dma_going = 0; in udc_data_in_isr()
2349 req = list_entry(ep->queue.next, in udc_data_in_isr()
2354 udc_txfifo_write(ep, &req->req); in udc_data_in_isr()
2355 len = req->req.length - req->req.actual; in udc_data_in_isr()
2358 req->req.actual += len; in udc_data_in_isr()
2359 if (req->req.actual == req->req.length in udc_data_in_isr()
2362 complete_req(ep, req, 0); in udc_data_in_isr()
2365 } else if (req && !req->dma_going) { in udc_data_in_isr()
2367 req, req->td_data); in udc_data_in_isr()
2368 if (req->td_data) { in udc_data_in_isr()
2370 req->dma_going = 1; in udc_data_in_isr()
2376 if (use_dma_ppb && req->req.length > in udc_data_in_isr()
2378 req->td_data->status &= in udc_data_in_isr()
2384 writel(req->td_phys, &ep->regs->desptr); in udc_data_in_isr()
2387 req->td_data->status = in udc_data_in_isr()
2389 req->td_data->status, in udc_data_in_isr()
2639 struct udc_request *req; in udc_control_in_isr() local
2675 req = list_entry(ep->queue.next, in udc_control_in_isr()
2680 writel(req->td_phys, &ep->regs->desptr); in udc_control_in_isr()
2682 req->td_data->status = in udc_control_in_isr()
2684 req->td_data->status, in udc_control_in_isr()
2696 req->req.actual = req->req.length; in udc_control_in_isr()
2699 complete_req(ep, req, 0); in udc_control_in_isr()
2703 udc_txfifo_write(ep, &req->req); in udc_control_in_isr()
2706 len = req->req.length - req->req.actual; in udc_control_in_isr()
2710 req->req.actual += len; in udc_control_in_isr()
2711 if (req->req.actual == req->req.length in udc_control_in_isr()
2714 complete_req(ep, req, 0); in udc_control_in_isr()