Lines Matching full:req

259 	struct usb_request	req;  member
558 static int usbf_ep0_pio_in(struct usbf_ep *ep0, struct usbf_req *req) in usbf_ep0_pio_in() argument
566 left = req->req.length - req->req.actual; in usbf_ep0_pio_in()
569 if (!req->is_zero_sent) { in usbf_ep0_pio_in()
570 if (req->req.length == 0) { in usbf_ep0_pio_in()
573 req->is_zero_sent = 1; in usbf_ep0_pio_in()
576 if ((req->req.actual % ep0->ep.maxpacket) == 0) { in usbf_ep0_pio_in()
577 if (req->req.zero) { in usbf_ep0_pio_in()
580 req->is_zero_sent = 1; in usbf_ep0_pio_in()
591 buf = req->req.buf; in usbf_ep0_pio_in()
592 buf += req->req.actual; in usbf_ep0_pio_in()
598 req->req.actual += (nb * sizeof(u32)); in usbf_ep0_pio_in()
607 req->req.actual += left; in usbf_ep0_pio_in()
612 req->req.actual, req->req.length); in usbf_ep0_pio_in()
617 static int usbf_ep0_pio_out(struct usbf_ep *ep0, struct usbf_req *req) in usbf_ep0_pio_out() argument
631 buf = req->req.buf; in usbf_ep0_pio_out()
632 buf += req->req.actual; in usbf_ep0_pio_out()
634 left = req->req.length - req->req.actual; in usbf_ep0_pio_out()
652 req->req.actual += (nb * sizeof(u32)); in usbf_ep0_pio_out()
658 req->req.actual += count; in usbf_ep0_pio_out()
662 req->req.actual, req->req.length); in usbf_ep0_pio_out()
665 dev_dbg(ep0->udc->dev, "ep0 req.status=%d\n", req_status); in usbf_ep0_pio_out()
666 req->req.status = req_status; in usbf_ep0_pio_out()
673 req->req.status = 0; in usbf_ep0_pio_out()
683 if (req->req.actual == req->req.length) { in usbf_ep0_pio_out()
684 req->req.status = 0; in usbf_ep0_pio_out()
692 if (req->req.actual != req->req.length) { in usbf_ep0_pio_out()
693 req->req.status = req->req.short_not_ok ? in usbf_ep0_pio_out()
696 req->req.status = 0; in usbf_ep0_pio_out()
737 static int usbf_epn_pio_in(struct usbf_ep *epn, struct usbf_req *req) in usbf_epn_pio_in() argument
743 left = req->req.length - req->req.actual; in usbf_epn_pio_in()
746 if (!req->is_zero_sent) { in usbf_epn_pio_in()
747 if (req->req.length == 0) { in usbf_epn_pio_in()
750 req->is_zero_sent = 1; in usbf_epn_pio_in()
753 if ((req->req.actual % epn->ep.maxpacket) == 0) { in usbf_epn_pio_in()
754 if (req->req.zero) { in usbf_epn_pio_in()
758 req->is_zero_sent = 1; in usbf_epn_pio_in()
769 buf = req->req.buf; in usbf_epn_pio_in()
770 buf += req->req.actual; in usbf_epn_pio_in()
776 req->req.actual += (nb * sizeof(u32)); in usbf_epn_pio_in()
782 req->req.actual += left; in usbf_epn_pio_in()
789 dev_dbg(epn->udc->dev, "ep%u send %u/%u\n", epn->id, req->req.actual, in usbf_epn_pio_in()
790 req->req.length); in usbf_epn_pio_in()
800 static int usbf_epn_dma_in(struct usbf_ep *epn, struct usbf_req *req) in usbf_epn_dma_in() argument
807 if (!IS_ALIGNED((uintptr_t)req->req.buf, 4)) { in usbf_epn_dma_in()
810 return usbf_epn_pio_in(epn, req); in usbf_epn_dma_in()
813 left = req->req.length - req->req.actual; in usbf_epn_dma_in()
815 switch (req->xfer_step) { in usbf_epn_dma_in()
821 req->xfer_step = USBF_XFER_WAIT_END; in usbf_epn_dma_in()
828 req->req.buf + req->req.actual, left); in usbf_epn_dma_in()
829 req->req.actual += left; in usbf_epn_dma_in()
830 req->xfer_step = USBF_XFER_WAIT_END; in usbf_epn_dma_in()
834 ret = usb_gadget_map_request(&epn->udc->gadget, &req->req, 1); in usbf_epn_dma_in()
840 req->is_mapped = 1; in usbf_epn_dma_in()
851 req->req.dma); in usbf_epn_dma_in()
880 req->dma_size = (npkt - 1) * epn->ep.maxpacket + lastpkt; in usbf_epn_dma_in()
883 req->dma_size); in usbf_epn_dma_in()
885 req->xfer_step = USBF_XFER_WAIT_DMA; in usbf_epn_dma_in()
895 usb_gadget_unmap_request(&epn->udc->gadget, &req->req, 1); in usbf_epn_dma_in()
896 req->is_mapped = 0; in usbf_epn_dma_in()
904 req->req.actual += req->dma_size; in usbf_epn_dma_in()
906 left = req->req.length - req->req.actual; in usbf_epn_dma_in()
913 req->req.buf + req->req.actual, left); in usbf_epn_dma_in()
914 req->req.actual += left; in usbf_epn_dma_in()
915 req->xfer_step = USBF_XFER_WAIT_END; in usbf_epn_dma_in()
919 if (req->req.actual % epn->ep.maxpacket) { in usbf_epn_dma_in()
929 req->xfer_step = USBF_XFER_WAIT_END; in usbf_epn_dma_in()
936 if (req->req.zero) { in usbf_epn_dma_in()
937 req->xfer_step = USBF_XFER_SEND_NULL; in usbf_epn_dma_in()
942 req->xfer_step = USBF_XFER_WAIT_END; in usbf_epn_dma_in()
948 req->xfer_step = USBF_XFER_WAIT_END; in usbf_epn_dma_in()
957 req->req.actual, req->req.length); in usbf_epn_dma_in()
958 req->xfer_step = USBF_XFER_START; in usbf_epn_dma_in()
974 static int usbf_epn_pio_out(struct usbf_ep *epn, struct usbf_req *req) in usbf_epn_pio_out() argument
988 buf = req->req.buf; in usbf_epn_pio_out()
989 buf += req->req.actual; in usbf_epn_pio_out()
991 left = req->req.length - req->req.actual; in usbf_epn_pio_out()
1010 req->req.actual += (nb * sizeof(u32)); in usbf_epn_pio_out()
1015 req->req.actual += count; in usbf_epn_pio_out()
1019 req->req.actual, req->req.length); in usbf_epn_pio_out()
1022 dev_dbg(epn->udc->dev, "ep%u req.status=%d\n", epn->id, in usbf_epn_pio_out()
1024 req->req.status = req_status; in usbf_epn_pio_out()
1031 req->req.status = 0; in usbf_epn_pio_out()
1036 if (req->req.actual == req->req.length) { in usbf_epn_pio_out()
1037 req->req.status = 0; in usbf_epn_pio_out()
1045 if (req->req.actual != req->req.length) { in usbf_epn_pio_out()
1046 req->req.status = req->req.short_not_ok ? in usbf_epn_pio_out()
1049 req->req.status = 0; in usbf_epn_pio_out()
1186 static int usbf_epn_dma_out(struct usbf_ep *epn, struct usbf_req *req) in usbf_epn_dma_out() argument
1195 if (!IS_ALIGNED((uintptr_t)req->req.buf, 4)) { in usbf_epn_dma_out()
1198 return usbf_epn_pio_out(epn, req); in usbf_epn_dma_out()
1201 switch (req->xfer_step) { in usbf_epn_dma_out()
1206 if (req->req.actual != req->req.length) { in usbf_epn_dma_out()
1207 req->req.status = req->req.short_not_ok ? in usbf_epn_dma_out()
1210 req->req.status = 0; in usbf_epn_dma_out()
1229 left = req->req.length - req->req.actual; in usbf_epn_dma_out()
1237 req->req.status = -EOVERFLOW; in usbf_epn_dma_out()
1246 req->req.buf + req->req.actual, recv); in usbf_epn_dma_out()
1247 req->req.actual += recv; in usbf_epn_dma_out()
1250 epn->id, req->req.actual, req->req.length); in usbf_epn_dma_out()
1252 req->xfer_step = USBF_XFER_START; in usbf_epn_dma_out()
1256 ret = usb_gadget_map_request(&epn->udc->gadget, &req->req, 0); in usbf_epn_dma_out()
1262 req->is_mapped = 1; in usbf_epn_dma_out()
1265 req->req.dma + req->req.actual, in usbf_epn_dma_out()
1267 req->dma_size = recv & ~0x3; in usbf_epn_dma_out()
1270 req->dma_size); in usbf_epn_dma_out()
1272 req->xfer_step = USBF_XFER_WAIT_DMA_SHORT; in usbf_epn_dma_out()
1276 ret = usb_gadget_map_request(&epn->udc->gadget, &req->req, 0); in usbf_epn_dma_out()
1282 req->is_mapped = 1; in usbf_epn_dma_out()
1291 req->req.dma + req->req.actual, in usbf_epn_dma_out()
1293 req->dma_size = npkt * epn->ep.maxpacket; in usbf_epn_dma_out()
1296 req->dma_size, npkt); in usbf_epn_dma_out()
1298 req->xfer_step = USBF_XFER_WAIT_DMA; in usbf_epn_dma_out()
1310 usb_gadget_unmap_request(&epn->udc->gadget, &req->req, 0); in usbf_epn_dma_out()
1311 req->is_mapped = 0; in usbf_epn_dma_out()
1313 req->req.actual += req->dma_size; in usbf_epn_dma_out()
1323 req->req.buf + req->req.actual, count); in usbf_epn_dma_out()
1324 req->req.actual += count; in usbf_epn_dma_out()
1328 req->req.actual, req->req.length); in usbf_epn_dma_out()
1330 req->xfer_step = USBF_XFER_START; in usbf_epn_dma_out()
1343 count = req->dma_size - dma_left; in usbf_epn_dma_out()
1348 req->req.actual += count; in usbf_epn_dma_out()
1355 &req->req, 0); in usbf_epn_dma_out()
1356 req->is_mapped = 0; in usbf_epn_dma_out()
1361 if (req->req.actual != req->req.length) { in usbf_epn_dma_out()
1362 req->req.status = req->req.short_not_ok ? in usbf_epn_dma_out()
1365 req->req.status = 0; in usbf_epn_dma_out()
1368 epn->id, req->req.actual, req->req.length); in usbf_epn_dma_out()
1369 req->xfer_step = USBF_XFER_START; in usbf_epn_dma_out()
1375 left = req->req.length - req->req.actual; in usbf_epn_dma_out()
1380 req->req.status = -EOVERFLOW; in usbf_epn_dma_out()
1382 &req->req, 0); in usbf_epn_dma_out()
1383 req->is_mapped = 0; in usbf_epn_dma_out()
1385 req->xfer_step = USBF_XFER_START; in usbf_epn_dma_out()
1391 req->req.dma + req->req.actual, in usbf_epn_dma_out()
1393 req->dma_size = recv & ~0x3; in usbf_epn_dma_out()
1396 epn->id, req->dma_size); in usbf_epn_dma_out()
1398 req->xfer_step = USBF_XFER_WAIT_DMA_SHORT; in usbf_epn_dma_out()
1402 usb_gadget_unmap_request(&epn->udc->gadget, &req->req, 0); in usbf_epn_dma_out()
1403 req->is_mapped = 0; in usbf_epn_dma_out()
1410 req->req.buf + req->req.actual, count); in usbf_epn_dma_out()
1411 req->req.actual += count; in usbf_epn_dma_out()
1415 req->req.actual, req->req.length); in usbf_epn_dma_out()
1417 req->xfer_step = USBF_XFER_START; in usbf_epn_dma_out()
1427 req->xfer_step = USBF_XFER_WAIT_BRIDGE; in usbf_epn_dma_out()
1438 usb_gadget_unmap_request(&epn->udc->gadget, &req->req, 0); in usbf_epn_dma_out()
1439 req->is_mapped = 0; in usbf_epn_dma_out()
1441 req->req.actual += req->dma_size; in usbf_epn_dma_out()
1443 req->xfer_step = USBF_XFER_START; in usbf_epn_dma_out()
1444 left = req->req.length - req->req.actual; in usbf_epn_dma_out()
1448 req->req.actual, req->req.length); in usbf_epn_dma_out()
1452 epn->id, req->req.actual, req->req.length); in usbf_epn_dma_out()
1476 static void usbf_epn_dma_abort(struct usbf_ep *epn, struct usbf_req *req) in usbf_epn_dma_abort() argument
1485 usb_gadget_unmap_request(&epn->udc->gadget, &req->req, in usbf_epn_dma_abort()
1487 req->is_mapped = 0; in usbf_epn_dma_abort()
1512 req->xfer_step = USBF_XFER_START; in usbf_epn_dma_abort()
1537 static void usbf_ep_req_done(struct usbf_ep *ep, struct usbf_req *req, in usbf_ep_req_done() argument
1540 list_del_init(&req->queue); in usbf_ep_req_done()
1543 req->req.status = status; in usbf_ep_req_done()
1545 if (req->req.status == -EINPROGRESS) in usbf_ep_req_done()
1546 req->req.status = status; in usbf_ep_req_done()
1549 dev_dbg(ep->udc->dev, "ep%u %s req done length %u/%u, status=%d\n", ep->id, in usbf_ep_req_done()
1551 req->req.actual, req->req.length, req->req.status); in usbf_ep_req_done()
1553 if (req->is_mapped) in usbf_ep_req_done()
1554 usbf_epn_dma_abort(ep, req); in usbf_ep_req_done()
1557 usb_gadget_giveback_request(&ep->ep, &req->req); in usbf_ep_req_done()
1563 struct usbf_req *req; in usbf_ep_nuke() local
1570 req = list_first_entry(&ep->queue, struct usbf_req, queue); in usbf_ep_nuke()
1571 usbf_ep_req_done(ep, req, status); in usbf_ep_nuke()
1598 struct usbf_req *req; in usbf_epn_start_queue() local
1604 req = list_first_entry_or_null(&epn->queue, struct usbf_req, queue); in usbf_epn_start_queue()
1607 if (req && !epn->is_processing) { in usbf_epn_start_queue()
1609 usbf_epn_dma_in(epn, req) : in usbf_epn_start_queue()
1610 usbf_epn_pio_in(epn, req); in usbf_epn_start_queue()
1622 if (req) { in usbf_epn_start_queue()
1645 int (*usbf_ep_xfer)(struct usbf_ep *ep, struct usbf_req *req); in usbf_ep_process_queue()
1646 struct usbf_req *req; in usbf_ep_process_queue() local
1664 req = list_first_entry_or_null(&ep->queue, struct usbf_req, queue); in usbf_ep_process_queue()
1665 if (!req) { in usbf_ep_process_queue()
1682 ret = usbf_ep_xfer(ep, req); in usbf_ep_process_queue()
1696 usbf_ep_req_done(ep, req, ret); in usbf_ep_process_queue()
1711 req = list_first_entry_or_null(&ep->queue, struct usbf_req, in usbf_ep_process_queue()
1718 if (req) { in usbf_ep_process_queue()
1733 return req ? -EINPROGRESS : 0; in usbf_ep_process_queue()
1735 } while (req); in usbf_ep_process_queue()
1916 static int usbf_ep0_queue(struct usbf_ep *ep0, struct usbf_req *req, in usbf_ep0_queue() argument
1921 req->req.actual = 0; in usbf_ep0_queue()
1922 req->req.status = -EINPROGRESS; in usbf_ep0_queue()
1923 req->is_zero_sent = 0; in usbf_ep0_queue()
1925 list_add_tail(&req->queue, &ep0->queue); in usbf_ep0_queue()
1934 if (req->req.length) { in usbf_ep0_queue()
1937 req->req.length); in usbf_ep0_queue()
1943 ret = usbf_ep0_pio_in(ep0, req); in usbf_ep0_queue()
1957 static int usbf_epn_queue(struct usbf_ep *ep, struct usbf_req *req, in usbf_epn_queue() argument
1969 req->req.actual = 0; in usbf_epn_queue()
1970 req->req.status = -EINPROGRESS; in usbf_epn_queue()
1971 req->is_zero_sent = 0; in usbf_epn_queue()
1972 req->xfer_step = USBF_XFER_START; in usbf_epn_queue()
1975 list_add_tail(&req->queue, &ep->queue); in usbf_epn_queue()
1987 struct usbf_req *req = container_of(_req, struct usbf_req, req); in usbf_ep_queue() local
1999 dev_dbg(ep->udc->dev, "ep%u %s req queue length %u, zero %u, short_not_ok %u\n", in usbf_ep_queue()
2001 req->req.length, req->req.zero, req->req.short_not_ok); in usbf_ep_queue()
2005 ret = usbf_ep0_queue(ep, req, gfp_flags); in usbf_ep_queue()
2007 ret = usbf_epn_queue(ep, req, gfp_flags); in usbf_ep_queue()
2014 struct usbf_req *req = container_of(_req, struct usbf_req, req); in usbf_ep_dequeue() local
2023 dev_dbg(ep->udc->dev, "ep%u %s req dequeue length %u/%u\n", in usbf_ep_dequeue()
2025 req->req.actual, req->req.length); in usbf_ep_dequeue()
2027 first = list_is_first(&req->queue, &ep->queue); in usbf_ep_dequeue()
2034 usbf_ep_req_done(ep, req, -ECONNRESET); in usbf_ep_dequeue()
2079 struct usbf_req *req; in usbf_ep_alloc_request() local
2084 req = kzalloc(sizeof(*req), gfp_flags); in usbf_ep_alloc_request()
2085 if (!req) in usbf_ep_alloc_request()
2088 INIT_LIST_HEAD(&req->queue); in usbf_ep_alloc_request()
2090 return &req->req; in usbf_ep_alloc_request()
2095 struct usbf_req *req; in usbf_ep_free_request() local
2102 req = container_of(_req, struct usbf_req, req); in usbf_ep_free_request()
2106 list_del_init(&req->queue); in usbf_ep_free_request()
2108 kfree(req); in usbf_ep_free_request()
2176 static void usbf_ep0_fill_req(struct usbf_ep *ep0, struct usbf_req *req, in usbf_ep0_fill_req() argument
2184 req->req.buf = ep0->udc->ep0_buf; in usbf_ep0_fill_req()
2185 req->req.length = length; in usbf_ep0_fill_req()
2186 req->req.dma = 0; in usbf_ep0_fill_req()
2187 req->req.zero = true; in usbf_ep0_fill_req()
2188 req->req.complete = complete ? complete : usbf_ep0_req_complete; in usbf_ep0_fill_req()
2189 req->req.status = -EINPROGRESS; in usbf_ep0_fill_req()
2190 req->req.context = NULL; in usbf_ep0_fill_req()
2191 req->req.actual = 0; in usbf_ep0_fill_req()
2458 "ep0 req%02x.%02x, wValue 0x%04x, wIndex 0x%04x, wLength 0x%04x\n", in usbf_handle_ep0_setup()
2554 struct usbf_req *req; in usbf_handle_ep0_out_status_start() local
2561 req = list_first_entry_or_null(&ep0->queue, struct usbf_req, queue); in usbf_handle_ep0_out_status_start()
2562 if (!req) { in usbf_handle_ep0_out_status_start()
2566 if (req->req.length) { in usbf_handle_ep0_out_status_start()
2569 req->req.length); in usbf_handle_ep0_out_status_start()
2579 struct usbf_req *req; in usbf_handle_ep0_in_status_start() local
2588 req = list_first_entry_or_null(&ep0->queue, struct usbf_req, queue); in usbf_handle_ep0_in_status_start()
2589 if (!req) { in usbf_handle_ep0_in_status_start()
2602 req = list_first_entry_or_null(&ep0->queue, struct usbf_req, queue); in usbf_handle_ep0_in_status_start()
2604 if (req->req.length) { in usbf_handle_ep0_in_status_start()
2607 req->req.length); in usbf_handle_ep0_in_status_start()
2611 ret = usbf_ep0_pio_in(ep0, req); in usbf_handle_ep0_in_status_start()
2613 usbf_ep_req_done(ep0, req, ret); in usbf_handle_ep0_in_status_start()