Lines Matching refs:req
268 struct goku_request *req; in goku_alloc_request() local
272 req = kzalloc(sizeof *req, gfp_flags); in goku_alloc_request()
273 if (!req) in goku_alloc_request()
276 INIT_LIST_HEAD(&req->queue); in goku_alloc_request()
277 return &req->req; in goku_alloc_request()
283 struct goku_request *req; in goku_free_request() local
288 req = container_of(_req, struct goku_request, req); in goku_free_request()
289 WARN_ON(!list_empty(&req->queue)); in goku_free_request()
290 kfree(req); in goku_free_request()
296 done(struct goku_ep *ep, struct goku_request *req, int status) in done() argument
301 list_del_init(&req->queue); in done()
303 if (likely(req->req.status == -EINPROGRESS)) in done()
304 req->req.status = status; in done()
306 status = req->req.status; in done()
311 usb_gadget_unmap_request(&dev->gadget, &req->req, ep->is_in); in done()
317 ep->ep.name, &req->req, status, in done()
318 req->req.actual, req->req.length); in done()
323 usb_gadget_giveback_request(&ep->ep, &req->req); in done()
331 write_packet(u32 __iomem *fifo, u8 *buf, struct goku_request *req, unsigned max) in write_packet() argument
335 length = min(req->req.length - req->req.actual, max); in write_packet()
336 req->req.actual += length; in write_packet()
345 static int write_fifo(struct goku_ep *ep, struct goku_request *req) in write_fifo() argument
354 buf = req->req.buf + req->req.actual; in write_fifo()
369 count = write_packet(ep->reg_fifo, buf, req, ep->ep.maxpacket); in write_fifo()
380 if (likely(req->req.length != req->req.actual) in write_fifo()
381 || req->req.zero) in write_fifo()
390 req->req.length - req->req.actual, req); in write_fifo()
397 done(ep, req, 0); in write_fifo()
404 static int read_fifo(struct goku_ep *ep, struct goku_request *req) in read_fifo() argument
413 buf = req->req.buf + req->req.actual; in read_fifo()
427 bufferspace = req->req.length - req->req.actual; in read_fifo()
445 req->req.actual += size; in read_fifo()
450 req, req->req.actual, req->req.length); in read_fifo()
460 if (req->req.status != -EOVERFLOW) in read_fifo()
463 req->req.status = -EOVERFLOW; in read_fifo()
471 if (unlikely(is_short || req->req.actual == req->req.length)) { in read_fifo()
484 done(ep, req, 0); in read_fifo()
488 req = list_entry(ep->queue.next, in read_fifo()
519 struct goku_request *req; in pio_advance() local
523 req = list_entry(ep->queue.next, struct goku_request, queue); in pio_advance()
524 (ep->is_in ? write_fifo : read_fifo)(ep, req); in pio_advance()
531 static int start_dma(struct goku_ep *ep, struct goku_request *req) in start_dma() argument
535 u32 start = req->req.dma; in start_dma()
536 u32 end = start + req->req.length - 1; in start_dma()
551 if (unlikely(req->req.length == 0)) in start_dma()
553 else if ((req->req.length % ep->ep.maxpacket) != 0 in start_dma()
554 || req->req.zero) in start_dma()
588 struct goku_request *req; in dma_advance() local
603 req = list_entry(ep->queue.next, struct goku_request, queue); in dma_advance()
609 req->req.actual = readl(®s->in_dma_current); in dma_advance()
617 req->req.actual = readl(®s->out_dma_current); in dma_advance()
619 req->req.actual -= req->req.dma; in dma_advance()
620 req->req.actual++; in dma_advance()
625 req->req.actual, req->req.length, req); in dma_advance()
627 done(ep, req, 0); in dma_advance()
630 req = list_entry(ep->queue.next, struct goku_request, queue); in dma_advance()
631 (void) start_dma(ep, req); in dma_advance()
637 struct goku_request *req; in abort_dma() local
648 req = list_entry(ep->queue.next, struct goku_request, queue); in abort_dma()
686 req->req.actual = (curr - req->req.dma) + 1; in abort_dma()
687 req->req.status = status; in abort_dma()
691 req->req.actual, req->req.length); in abort_dma()
700 req->req.actual = req->req.length; in abort_dma()
701 req->req.status = 0; in abort_dma()
709 struct goku_request *req; in goku_queue() local
716 req = container_of(_req, struct goku_request, req); in goku_queue()
718 || !_req->buf || !list_empty(&req->queue))) in goku_queue()
733 status = usb_gadget_map_request(&dev->gadget, &req->req, in goku_queue()
762 status = start_dma(ep, req); in goku_queue()
764 status = (ep->is_in ? write_fifo : read_fifo)(ep, req); in goku_queue()
769 req = NULL; in goku_queue()
774 if (likely(req != NULL)) in goku_queue()
775 list_add_tail(&req->queue, &ep->queue); in goku_queue()
792 struct goku_request *req; in nuke() local
800 req = list_entry(ep->queue.next, struct goku_request, queue); in nuke()
801 done(ep, req, status); in nuke()
808 struct goku_request *req; in goku_dequeue() local
832 list_for_each_entry (req, &ep->queue, queue) { in goku_dequeue()
833 if (&req->req == _req) in goku_dequeue()
836 if (&req->req != _req) { in goku_dequeue()
841 if (ep->dma && ep->queue.next == &req->queue && !ep->stopped) { in goku_dequeue()
843 done(ep, req, -ECONNRESET); in goku_dequeue()
845 } else if (!list_empty(&req->queue)) in goku_dequeue()
846 done(ep, req, -ECONNRESET); in goku_dequeue()
848 req = NULL; in goku_dequeue()
851 return req ? 0 : -EOPNOTSUPP; in goku_dequeue()
865 struct goku_request *req; in goku_clear_halt() local
869 req = list_entry(ep->queue.next, struct goku_request, in goku_clear_halt()
871 (void) start_dma(ep, req); in goku_clear_halt()
1164 struct goku_request *req; in udc_proc_read() local
1190 list_for_each_entry(req, &ep->queue, queue) { in udc_proc_read()
1191 if (ep->dma && req->queue.prev == &ep->queue) { in udc_proc_read()
1196 tmp -= req->req.dma; in udc_proc_read()
1199 tmp = req->req.actual; in udc_proc_read()
1202 &req->req, tmp, req->req.length, in udc_proc_read()
1203 req->req.buf); in udc_proc_read()