Lines Matching full:request
59 * + request lossage observed with gadgetfs
81 static inline void map_dma_buffer(struct musb_request *request, in map_dma_buffer() argument
87 request->map_state = UN_MAPPED; in map_dma_buffer()
92 /* Check if DMA engine can handle this request. in map_dma_buffer()
93 * DMA code must reject the USB request explicitly. in map_dma_buffer()
94 * Default behaviour is to map the request. in map_dma_buffer()
98 musb_ep->packet_sz, request->request.buf, in map_dma_buffer()
99 request->request.length); in map_dma_buffer()
103 if (request->request.dma == DMA_ADDR_INVALID) { in map_dma_buffer()
104 request->request.dma = dma_map_single( in map_dma_buffer()
106 request->request.buf, in map_dma_buffer()
107 request->request.length, in map_dma_buffer()
108 request->tx in map_dma_buffer()
111 request->map_state = MUSB_MAPPED; in map_dma_buffer()
114 request->request.dma, in map_dma_buffer()
115 request->request.length, in map_dma_buffer()
116 request->tx in map_dma_buffer()
119 request->map_state = PRE_MAPPED; in map_dma_buffer()
124 static inline void unmap_dma_buffer(struct musb_request *request, in unmap_dma_buffer() argument
127 if (!is_buffer_mapped(request)) in unmap_dma_buffer()
130 if (request->request.dma == DMA_ADDR_INVALID) { in unmap_dma_buffer()
135 if (request->map_state == MUSB_MAPPED) { in unmap_dma_buffer()
137 request->request.dma, in unmap_dma_buffer()
138 request->request.length, in unmap_dma_buffer()
139 request->tx in unmap_dma_buffer()
142 request->request.dma = DMA_ADDR_INVALID; in unmap_dma_buffer()
145 request->request.dma, in unmap_dma_buffer()
146 request->request.length, in unmap_dma_buffer()
147 request->tx in unmap_dma_buffer()
151 request->map_state = UN_MAPPED; in unmap_dma_buffer()
154 static inline void map_dma_buffer(struct musb_request *request, in map_dma_buffer() argument
159 static inline void unmap_dma_buffer(struct musb_request *request, in unmap_dma_buffer() argument
166 * Immediately complete a request.
168 * @param request the request to complete
169 * @param status the status to complete the request with
174 struct usb_request *request, in musb_g_giveback() argument
183 req = to_musb_request(request); in musb_g_giveback()
186 if (req->request.status == -EINPROGRESS) in musb_g_giveback()
187 req->request.status = status; in musb_g_giveback()
193 if (request->status == 0) in musb_g_giveback()
194 dev_dbg(musb->controller, "%s done request %p, %d/%d\n", in musb_g_giveback()
195 ep->end_point.name, request, in musb_g_giveback()
196 req->request.actual, req->request.length); in musb_g_giveback()
198 dev_dbg(musb->controller, "%s request %p, %d/%d fault %d\n", in musb_g_giveback()
199 ep->end_point.name, request, in musb_g_giveback()
200 req->request.actual, req->request.length, in musb_g_giveback()
201 request->status); in musb_g_giveback()
202 req->request.complete(&req->ep->end_point, &req->request); in musb_g_giveback()
251 musb_g_giveback(ep, &req->request, status); in nuke()
285 - Request is queued by the gadget driver.
297 | -> Complete Request
298 | -> Continue next request (call txstate)
309 * the IRQ routine or from ep.queue() to kickstart a request on an
319 struct usb_request *request; in txstate() local
327 dev_dbg(musb->controller, "ep:%s disabled - ignore request\n", in txstate()
341 request = &req->request; in txstate()
343 (int)(request->length - request->actual)); in txstate()
367 request_size = min_t(size_t, request->length - request->actual, in txstate()
370 use_dma = (request->dma != DMA_ADDR_INVALID); in txstate()
384 request->dma + request->actual, request_size); in txstate()
439 request->dma + request->actual, in txstate()
451 request->zero, in txstate()
452 request->dma + request->actual, in txstate()
466 (u8 *) (request->buf + request->actual)); in txstate()
467 request->actual += fifo_count; in txstate()
476 request->actual, request->length, in txstate()
490 struct usb_request *request; in musb_g_tx() local
498 request = &req->request; in musb_g_tx()
522 epnum, request); in musb_g_tx()
534 if (request) { in musb_g_tx()
545 request->actual += musb_ep->dma->actual_len; in musb_g_tx()
547 epnum, csr, musb_ep->dma->actual_len, request); in musb_g_tx()
554 if ((request->zero && request->length in musb_g_tx()
555 && (request->length % musb_ep->packet_sz == 0) in musb_g_tx()
556 && (request->actual == request->length)) in musb_g_tx()
559 (request->actual & in musb_g_tx()
573 request->zero = 0; in musb_g_tx()
576 if (request->actual == request->length) { in musb_g_tx()
577 musb_g_giveback(musb_ep, request, 0); in musb_g_tx()
606 - Request is queued by the gadget class driver.
611 | -> if request queued, call rxstate
618 | | by the request, or host
620 | | complete the request,
638 struct usb_request *request = &req->request; in rxstate() local
656 dev_dbg(musb->controller, "ep:%s disabled - ignore request\n", in rxstate()
684 !request->short_not_ok, in rxstate()
685 request->dma + request->actual, in rxstate()
686 request->length - request->actual)) { in rxstate()
709 if (request->short_not_ok && len == musb_ep->packet_sz) in rxstate()
714 if (request->actual < request->length) { in rxstate()
729 * in advance. For mass storage class, request->length = what the host in rxstate()
731 * request->length is routinely more than what the host sends. For in rxstate()
769 if (request->actual < request->length) { in rxstate()
772 transfer_size = min(request->length - request->actual, in rxstate()
776 transfer_size = min(request->length - request->actual, in rxstate()
785 request->dma in rxstate()
786 + request->actual, in rxstate()
795 (request->actual < request->length)) { in rxstate()
807 else if (request->short_not_ok) in rxstate()
808 transfer_size = min(request->length - in rxstate()
809 request->actual, in rxstate()
812 transfer_size = min(request->length - in rxstate()
813 request->actual, in rxstate()
834 request->dma in rxstate()
835 + request->actual, in rxstate()
842 fifo_count = request->length - request->actual; in rxstate()
854 u32 dma_addr = request->dma + request->actual; in rxstate()
883 (request->buf + request->actual)); in rxstate()
884 request->actual += fifo_count; in rxstate()
898 if (request->actual == request->length || len < musb_ep->packet_sz) in rxstate()
899 musb_g_giveback(musb_ep, request, 0); in rxstate()
903 * Data ready for a request; called from IRQ
909 struct usb_request *request; in musb_g_rx() local
927 request = &req->request; in musb_g_rx()
933 csr, dma ? " (dma)" : "", request); in musb_g_rx()
947 dev_dbg(musb->controller, "%s iso overrun on %p\n", musb_ep->name, request); in musb_g_rx()
948 if (request->status == -EINPROGRESS) in musb_g_rx()
949 request->status = -EOVERFLOW; in musb_g_rx()
970 request->actual += musb_ep->dma->actual_len; in musb_g_rx()
975 musb_ep->dma->actual_len, request); in musb_g_rx()
989 if ((request->actual < request->length) in musb_g_rx()
1002 musb_g_giveback(musb_ep, request, 0); in musb_g_rx()
1021 /* Analyze request */ in musb_g_rx()
1260 * Allocate a request for an endpoint.
1267 struct musb_request *request = NULL; in musb_alloc_request() local
1269 request = kzalloc(sizeof *request, gfp_flags); in musb_alloc_request()
1270 if (!request) { in musb_alloc_request()
1275 request->request.dma = DMA_ADDR_INVALID; in musb_alloc_request()
1276 request->epnum = musb_ep->current_epnum; in musb_alloc_request()
1277 request->ep = musb_ep; in musb_alloc_request()
1279 return &request->request; in musb_alloc_request()
1283 * Free a request
1305 dev_dbg(musb->controller, "<== %s request %p len %u on hw_ep%d\n", in musb_ep_restart()
1307 &req->request, req->request.length, req->epnum); in musb_ep_restart()
1320 struct musb_request *request; in musb_gadget_queue() local
1333 request = to_musb_request(req); in musb_gadget_queue()
1334 request->musb = musb; in musb_gadget_queue()
1336 if (request->ep != musb_ep) in musb_gadget_queue()
1339 dev_dbg(musb->controller, "<== to %s request=%p\n", ep->name, req); in musb_gadget_queue()
1341 /* request is mine now... */ in musb_gadget_queue()
1342 request->request.actual = 0; in musb_gadget_queue()
1343 request->request.status = -EINPROGRESS; in musb_gadget_queue()
1344 request->epnum = musb_ep->current_epnum; in musb_gadget_queue()
1345 request->tx = musb_ep->is_in; in musb_gadget_queue()
1347 map_dma_buffer(request, musb, musb_ep); in musb_gadget_queue()
1359 /* add request to the list */ in musb_gadget_queue()
1360 list_add_tail(&request->list, &musb_ep->req_list); in musb_gadget_queue()
1363 if (!musb_ep->busy && &request->list == musb_ep->req_list.next) in musb_gadget_queue()
1364 musb_ep_restart(musb, request); in musb_gadget_queue()
1371 static int musb_gadget_dequeue(struct usb_ep *ep, struct usb_request *request) in musb_gadget_dequeue() argument
1374 struct musb_request *req = to_musb_request(request); in musb_gadget_dequeue()
1380 if (!ep || !request || to_musb_request(request)->ep != musb_ep) in musb_gadget_dequeue()
1390 dev_dbg(musb->controller, "request %p not queued to %s\n", request, ep->name); in musb_gadget_dequeue()
1395 /* if the hardware doesn't have the request, easy ... */ in musb_gadget_dequeue()
1397 musb_g_giveback(musb_ep, request, -ECONNRESET); in musb_gadget_dequeue()
1409 musb_g_giveback(musb_ep, request, -ECONNRESET); in musb_gadget_dequeue()
1414 musb_g_giveback(musb_ep, request, -ECONNRESET); in musb_gadget_dequeue()
1437 struct musb_request *request; in musb_gadget_set_halt() local
1453 request = next_request(musb_ep); in musb_gadget_set_halt()
1455 if (request) { in musb_gadget_set_halt()
1456 dev_dbg(musb->controller, "request in progress, cannot halt %s\n", in musb_gadget_set_halt()
1499 /* maybe start the first request in the queue */ in musb_gadget_set_halt()
1500 if (!musb_ep->busy && !value && request) { in musb_gadget_set_halt()
1501 dev_dbg(musb->controller, "restarting the request\n"); in musb_gadget_set_halt()
1502 musb_ep_restart(musb, request); in musb_gadget_set_halt()