Lines Matching refs:req

555 	udc_free_request(&ep->ep, &ep->bna_dummy_req->req);  in udc_ep_disable()
567 struct udc_request *req; in udc_alloc_request() local
577 req = kzalloc(sizeof(struct udc_request), gfp); in udc_alloc_request()
578 if (!req) in udc_alloc_request()
581 req->req.dma = DMA_DONT_USE; in udc_alloc_request()
582 INIT_LIST_HEAD(&req->queue); in udc_alloc_request()
587 &req->td_phys); in udc_alloc_request()
589 kfree(req); in udc_alloc_request()
595 req, dma_desc, in udc_alloc_request()
596 (unsigned long)req->td_phys); in udc_alloc_request()
602 req->td_data = dma_desc; in udc_alloc_request()
603 req->td_data_last = NULL; in udc_alloc_request()
604 req->chain_len = 1; in udc_alloc_request()
607 return &req->req; in udc_alloc_request()
611 static int udc_free_dma_chain(struct udc *dev, struct udc_request *req) in udc_free_dma_chain() argument
618 DBG(dev, "free chain req = %p\n", req); in udc_free_dma_chain()
621 td_last = req->td_data; in udc_free_dma_chain()
624 for (i = 1; i < req->chain_len; i++) { in udc_free_dma_chain()
639 struct udc_request *req; in udc_free_request() local
645 req = container_of(usbreq, struct udc_request, req); in udc_free_request()
646 VDBG(ep->dev, "free_req req=%p\n", req); in udc_free_request()
647 BUG_ON(!list_empty(&req->queue)); in udc_free_request()
648 if (req->td_data) { in udc_free_request()
649 VDBG(ep->dev, "req->td_data=%p\n", req->td_data); in udc_free_request()
652 if (req->chain_len > 1) in udc_free_request()
653 udc_free_dma_chain(ep->dev, req); in udc_free_request()
655 pci_pool_free(ep->dev->data_requests, req->td_data, in udc_free_request()
656 req->td_phys); in udc_free_request()
658 kfree(req); in udc_free_request()
662 static void udc_init_bna_dummy(struct udc_request *req) in udc_init_bna_dummy() argument
664 if (req) { in udc_init_bna_dummy()
666 req->td_data->status |= AMD_BIT(UDC_DMA_IN_STS_L); in udc_init_bna_dummy()
668 req->td_data->next = req->td_phys; in udc_init_bna_dummy()
670 req->td_data->status in udc_init_bna_dummy()
671 = AMD_ADDBITS(req->td_data->status, in udc_init_bna_dummy()
676 req->td_data, req->td_data->status); in udc_init_bna_dummy()
684 struct udc_request *req = NULL; in udc_alloc_bna_dummy() local
690 req = container_of(_req, struct udc_request, req); in udc_alloc_bna_dummy()
691 ep->bna_dummy_req = req; in udc_alloc_bna_dummy()
692 udc_init_bna_dummy(req); in udc_alloc_bna_dummy()
694 return req; in udc_alloc_bna_dummy()
699 udc_txfifo_write(struct udc_ep *ep, struct usb_request *req) in udc_txfifo_write() argument
707 if (!req || !ep) in udc_txfifo_write()
710 req_buf = req->buf + req->actual; in udc_txfifo_write()
712 remaining = req->length - req->actual; in udc_txfifo_write()
772 udc_rxfifo_read(struct udc_ep *ep, struct udc_request *req) in udc_rxfifo_read() argument
783 buf_space = req->req.length - req->req.actual; in udc_rxfifo_read()
784 buf = req->req.buf + req->req.actual; in udc_rxfifo_read()
790 req->req.status = -EOVERFLOW; in udc_rxfifo_read()
794 req->req.actual += bytes; in udc_rxfifo_read()
798 || ((req->req.actual == req->req.length) && !req->req.zero)) in udc_rxfifo_read()
811 struct udc_request *req, in udc_create_dma_chain() argument
815 unsigned long bytes = req->req.length; in udc_create_dma_chain()
830 req->td_data->status &= AMD_CLEAR_BIT(UDC_DMA_IN_STS_L); in udc_create_dma_chain()
833 len = req->req.length / ep->ep.maxpacket; in udc_create_dma_chain()
834 if (req->req.length % ep->ep.maxpacket) in udc_create_dma_chain()
837 if (len > req->chain_len) { in udc_create_dma_chain()
839 if (req->chain_len > 1) in udc_create_dma_chain()
840 udc_free_dma_chain(ep->dev, req); in udc_create_dma_chain()
841 req->chain_len = len; in udc_create_dma_chain()
845 td = req->td_data; in udc_create_dma_chain()
859 req->td_data->next); in udc_create_dma_chain()
867 td->bufptr = req->req.dma + i; /* assign buffer */ in udc_create_dma_chain()
882 req->td_data->next = dma_addr; in udc_create_dma_chain()
890 req->td_data->status = in udc_create_dma_chain()
891 AMD_ADDBITS(req->td_data->status, in udc_create_dma_chain()
919 req->td_data_last = td; in udc_create_dma_chain()
926 static int prep_dma(struct udc_ep *ep, struct udc_request *req, gfp_t gfp) in prep_dma() argument
933 ep->num, req->td_data); in prep_dma()
936 req->td_data->bufptr = req->req.dma; in prep_dma()
939 req->td_data->status |= AMD_BIT(UDC_DMA_IN_STS_L); in prep_dma()
944 retval = udc_create_dma_chain(ep, req, ep->ep.maxpacket, gfp); in prep_dma()
951 if (req->req.length == ep->ep.maxpacket) { in prep_dma()
953 req->td_data->status = in prep_dma()
954 AMD_ADDBITS(req->td_data->status, in prep_dma()
966 use_dma_ppb, req->req.length, in prep_dma()
972 if (!use_dma_ppb || req->req.length < ep->ep.maxpacket in prep_dma()
976 req->td_data->status = in prep_dma()
977 AMD_ADDBITS(req->td_data->status, in prep_dma()
978 req->req.length, in prep_dma()
981 req->td_data->status = in prep_dma()
982 AMD_ADDBITS(req->td_data->status, in prep_dma()
987 req->td_data->status = in prep_dma()
988 AMD_ADDBITS(req->td_data->status, in prep_dma()
994 req->td_data->status = in prep_dma()
995 AMD_ADDBITS(req->td_data->status, in prep_dma()
1016 complete_req(struct udc_ep *ep, struct udc_request *req, int sts) in complete_req() argument
1028 usb_gadget_unmap_request(&dev->gadget, &req->req, ep->in); in complete_req()
1034 if (req->req.status == -EINPROGRESS) in complete_req()
1035 req->req.status = sts; in complete_req()
1038 list_del_init(&req->queue); in complete_req()
1041 &req->req, req->req.length, ep->ep.name, sts); in complete_req()
1044 usb_gadget_giveback_request(&ep->ep, &req->req); in complete_req()
1050 static struct udc_data_dma *udc_get_last_dma_desc(struct udc_request *req) in udc_get_last_dma_desc() argument
1054 td = req->td_data; in udc_get_last_dma_desc()
1063 static u32 udc_get_ppbdu_rxbytes(struct udc_request *req) in udc_get_ppbdu_rxbytes() argument
1068 td = req->td_data; in udc_get_ppbdu_rxbytes()
1110 struct udc_request *req; in udc_queue() local
1115 req = container_of(usbreq, struct udc_request, req); in udc_queue()
1118 || !list_empty(&req->queue)) in udc_queue()
1133 VDBG(dev, "DMA map req %p\n", req); in udc_queue()
1141 req->td_data, usbreq->buf); in udc_queue()
1146 req->dma_done = 0; in udc_queue()
1153 complete_req(ep, req, 0); in udc_queue()
1179 retval = prep_dma(ep, req, GFP_ATOMIC); in udc_queue()
1185 req->td_data->status = in udc_queue()
1186 AMD_ADDBITS(req->td_data->status, in udc_queue()
1211 req->td_data, in udc_queue()
1216 writel(req->td_phys, &ep->regs->desptr); in udc_queue()
1247 retval = prep_dma(ep, req, GFP_ATOMIC); in udc_queue()
1254 if (req) { in udc_queue()
1256 list_add_tail(&req->queue, &ep->queue); in udc_queue()
1261 req->dma_going = 1; in udc_queue()
1275 if (udc_rxfifo_read(ep, req)) { in udc_queue()
1277 complete_req(ep, req, 0); in udc_queue()
1293 struct udc_request *req; in empty_req_queue() local
1297 req = list_entry(ep->queue.next, in empty_req_queue()
1300 complete_req(ep, req, -ESHUTDOWN); in empty_req_queue()
1308 struct udc_request *req; in udc_dequeue() local
1317 req = container_of(usbreq, struct udc_request, req); in udc_dequeue()
1323 if (ep->queue.next == &req->queue) { in udc_dequeue()
1324 if (ep->dma && req->dma_going) { in udc_dequeue()
1338 dma_sts = AMD_GETBITS(req->td_data->status, in udc_dequeue()
1343 udc_init_bna_dummy(ep->req); in udc_dequeue()
1351 complete_req(ep, req, -ECONNRESET); in udc_dequeue()
2126 struct udc_request *req; in udc_data_out_isr() local
2163 req = list_entry(ep->queue.next, in udc_data_out_isr()
2166 req = NULL; in udc_data_out_isr()
2169 VDBG(dev, "req = %p\n", req); in udc_data_out_isr()
2174 if (req && udc_rxfifo_read(ep, req)) { in udc_data_out_isr()
2178 complete_req(ep, req, 0); in udc_data_out_isr()
2181 req = list_entry(ep->queue.next, in udc_data_out_isr()
2184 req = NULL; in udc_data_out_isr()
2188 } else if (!ep->cancel_transfer && req) { in udc_data_out_isr()
2193 dma_done = AMD_GETBITS(req->td_data->status, in udc_data_out_isr()
2203 memcpy(req->td_data, ep->bna_dummy_req->td_data, in udc_data_out_isr()
2206 udc_init_bna_dummy(ep->req); in udc_data_out_isr()
2208 td = udc_get_last_dma_desc(req); in udc_data_out_isr()
2215 count = AMD_GETBITS(req->td_data->status, in udc_data_out_isr()
2220 VDBG(dev, "req->td_data=%p\n", req->td_data); in udc_data_out_isr()
2225 count = udc_get_ppbdu_rxbytes(req); in udc_data_out_isr()
2230 if (!count && req->req.length in udc_data_out_isr()
2242 tmp = req->req.length - req->req.actual; in udc_data_out_isr()
2247 req->req.status = -EOVERFLOW; in udc_data_out_isr()
2251 req->req.actual += count; in udc_data_out_isr()
2252 req->dma_going = 0; in udc_data_out_isr()
2254 complete_req(ep, req, 0); in udc_data_out_isr()
2258 req = list_entry(ep->queue.next, in udc_data_out_isr()
2267 if (req->dma_going == 0) { in udc_data_out_isr()
2269 if (prep_dma(ep, req, GFP_ATOMIC) != 0) in udc_data_out_isr()
2272 writel(req->td_phys, in udc_data_out_isr()
2274 req->dma_going = 1; in udc_data_out_isr()
2341 struct udc_request *req; in udc_data_in_isr() local
2380 req = list_entry(ep->queue.next, in udc_data_in_isr()
2387 td = udc_get_last_dma_desc(req); in udc_data_in_isr()
2393 req->req.actual = req->req.length; in udc_data_in_isr()
2397 req->req.actual = req->req.length; in udc_data_in_isr()
2400 if (req->req.actual == req->req.length) { in udc_data_in_isr()
2402 complete_req(ep, req, 0); in udc_data_in_isr()
2403 req->dma_going = 0; in udc_data_in_isr()
2425 req = list_entry(ep->queue.next, in udc_data_in_isr()
2430 udc_txfifo_write(ep, &req->req); in udc_data_in_isr()
2431 len = req->req.length - req->req.actual; in udc_data_in_isr()
2434 req->req.actual += len; in udc_data_in_isr()
2435 if (req->req.actual == req->req.length in udc_data_in_isr()
2438 complete_req(ep, req, 0); in udc_data_in_isr()
2441 } else if (req && !req->dma_going) { in udc_data_in_isr()
2443 req, req->td_data); in udc_data_in_isr()
2444 if (req->td_data) { in udc_data_in_isr()
2446 req->dma_going = 1; in udc_data_in_isr()
2452 if (use_dma_ppb && req->req.length > in udc_data_in_isr()
2454 req->td_data->status &= in udc_data_in_isr()
2460 writel(req->td_phys, &ep->regs->desptr); in udc_data_in_isr()
2463 req->td_data->status = in udc_data_in_isr()
2465 req->td_data->status, in udc_data_in_isr()
2715 struct udc_request *req; in udc_control_in_isr() local
2751 req = list_entry(ep->queue.next, in udc_control_in_isr()
2756 writel(req->td_phys, &ep->regs->desptr); in udc_control_in_isr()
2758 req->td_data->status = in udc_control_in_isr()
2760 req->td_data->status, in udc_control_in_isr()
2772 req->req.actual = req->req.length; in udc_control_in_isr()
2775 complete_req(ep, req, 0); in udc_control_in_isr()
2779 udc_txfifo_write(ep, &req->req); in udc_control_in_isr()
2782 len = req->req.length - req->req.actual; in udc_control_in_isr()
2786 req->req.actual += len; in udc_control_in_isr()
2787 if (req->req.actual == req->req.length in udc_control_in_isr()
2790 complete_req(ep, req, 0); in udc_control_in_isr()