Lines Matching full:request
58 * + request lossage observed with gadgetfs
80 static inline void map_dma_buffer(struct musb_request *request, in map_dma_buffer() argument
86 request->map_state = UN_MAPPED; in map_dma_buffer()
91 /* Check if DMA engine can handle this request. in map_dma_buffer()
92 * DMA code must reject the USB request explicitly. in map_dma_buffer()
93 * Default behaviour is to map the request. in map_dma_buffer()
97 musb_ep->packet_sz, request->request.buf, in map_dma_buffer()
98 request->request.length); in map_dma_buffer()
102 if (request->request.dma == DMA_ADDR_INVALID) { in map_dma_buffer()
103 request->request.dma = dma_map_single( in map_dma_buffer()
105 request->request.buf, in map_dma_buffer()
106 request->request.length, in map_dma_buffer()
107 request->tx in map_dma_buffer()
110 request->map_state = MUSB_MAPPED; in map_dma_buffer()
113 request->request.dma, in map_dma_buffer()
114 request->request.length, in map_dma_buffer()
115 request->tx in map_dma_buffer()
118 request->map_state = PRE_MAPPED; in map_dma_buffer()
123 static inline void unmap_dma_buffer(struct musb_request *request, in unmap_dma_buffer() argument
126 if (!is_buffer_mapped(request)) in unmap_dma_buffer()
129 if (request->request.dma == DMA_ADDR_INVALID) { in unmap_dma_buffer()
134 if (request->map_state == MUSB_MAPPED) { in unmap_dma_buffer()
136 request->request.dma, in unmap_dma_buffer()
137 request->request.length, in unmap_dma_buffer()
138 request->tx in unmap_dma_buffer()
141 request->request.dma = DMA_ADDR_INVALID; in unmap_dma_buffer()
144 request->request.dma, in unmap_dma_buffer()
145 request->request.length, in unmap_dma_buffer()
146 request->tx in unmap_dma_buffer()
150 request->map_state = UN_MAPPED; in unmap_dma_buffer()
153 static inline void map_dma_buffer(struct musb_request *request, in map_dma_buffer() argument
158 static inline void unmap_dma_buffer(struct musb_request *request, in unmap_dma_buffer() argument
165 * Immediately complete a request.
167 * @param request the request to complete
168 * @param status the status to complete the request with
173 struct usb_request *request, in musb_g_giveback() argument
182 req = to_musb_request(request); in musb_g_giveback()
185 if (req->request.status == -EINPROGRESS) in musb_g_giveback()
186 req->request.status = status; in musb_g_giveback()
192 if (request->status == 0) in musb_g_giveback()
193 dev_dbg(musb->controller, "%s done request %p, %d/%d\n", in musb_g_giveback()
194 ep->end_point.name, request, in musb_g_giveback()
195 req->request.actual, req->request.length); in musb_g_giveback()
197 dev_dbg(musb->controller, "%s request %p, %d/%d fault %d\n", in musb_g_giveback()
198 ep->end_point.name, request, in musb_g_giveback()
199 req->request.actual, req->request.length, in musb_g_giveback()
200 request->status); in musb_g_giveback()
201 req->request.complete(&req->ep->end_point, &req->request); in musb_g_giveback()
250 musb_g_giveback(ep, &req->request, status); in nuke()
284 - Request is queued by the gadget driver.
296 | -> Complete Request
297 | -> Continue next request (call txstate)
308 * the IRQ routine or from ep.queue() to kickstart a request on an
318 struct usb_request *request; in txstate() local
326 dev_dbg(musb->controller, "ep:%s disabled - ignore request\n", in txstate()
340 request = &req->request; in txstate()
342 (int)(request->length - request->actual)); in txstate()
366 request_size = min_t(size_t, request->length - request->actual, in txstate()
369 use_dma = (request->dma != DMA_ADDR_INVALID); in txstate()
383 request->dma + request->actual, request_size); in txstate()
438 request->dma + request->actual, in txstate()
450 request->zero, in txstate()
451 request->dma + request->actual, in txstate()
465 (u8 *) (request->buf + request->actual)); in txstate()
466 request->actual += fifo_count; in txstate()
475 request->actual, request->length, in txstate()
489 struct usb_request *request; in musb_g_tx() local
497 request = &req->request; in musb_g_tx()
521 epnum, request); in musb_g_tx()
533 if (request) { in musb_g_tx()
544 request->actual += musb_ep->dma->actual_len; in musb_g_tx()
546 epnum, csr, musb_ep->dma->actual_len, request); in musb_g_tx()
553 if ((request->zero && request->length in musb_g_tx()
554 && (request->length % musb_ep->packet_sz == 0) in musb_g_tx()
555 && (request->actual == request->length)) in musb_g_tx()
558 (request->actual & in musb_g_tx()
572 request->zero = 0; in musb_g_tx()
575 if (request->actual == request->length) { in musb_g_tx()
576 musb_g_giveback(musb_ep, request, 0); in musb_g_tx()
605 - Request is queued by the gadget class driver.
610 | -> if request queued, call rxstate
617 | | by the request, or host
619 | | complete the request,
637 struct usb_request *request = &req->request; in rxstate() local
655 dev_dbg(musb->controller, "ep:%s disabled - ignore request\n", in rxstate()
683 !request->short_not_ok, in rxstate()
684 request->dma + request->actual, in rxstate()
685 request->length - request->actual)) { in rxstate()
708 if (request->short_not_ok && len == musb_ep->packet_sz) in rxstate()
713 if (request->actual < request->length) { in rxstate()
728 * in advance. For mass storage class, request->length = what the host in rxstate()
730 * request->length is routinely more than what the host sends. For in rxstate()
768 if (request->actual < request->length) { in rxstate()
771 transfer_size = min(request->length - request->actual, in rxstate()
775 transfer_size = min(request->length - request->actual, in rxstate()
784 request->dma in rxstate()
785 + request->actual, in rxstate()
794 (request->actual < request->length)) { in rxstate()
806 else if (request->short_not_ok) in rxstate()
807 transfer_size = min(request->length - in rxstate()
808 request->actual, in rxstate()
811 transfer_size = min(request->length - in rxstate()
812 request->actual, in rxstate()
833 request->dma in rxstate()
834 + request->actual, in rxstate()
841 fifo_count = request->length - request->actual; in rxstate()
853 u32 dma_addr = request->dma + request->actual; in rxstate()
882 (request->buf + request->actual)); in rxstate()
883 request->actual += fifo_count; in rxstate()
897 if (request->actual == request->length || len < musb_ep->packet_sz) in rxstate()
898 musb_g_giveback(musb_ep, request, 0); in rxstate()
902 * Data ready for a request; called from IRQ
908 struct usb_request *request; in musb_g_rx() local
926 request = &req->request; in musb_g_rx()
932 csr, dma ? " (dma)" : "", request); in musb_g_rx()
946 dev_dbg(musb->controller, "%s iso overrun on %p\n", musb_ep->name, request); in musb_g_rx()
947 if (request->status == -EINPROGRESS) in musb_g_rx()
948 request->status = -EOVERFLOW; in musb_g_rx()
969 request->actual += musb_ep->dma->actual_len; in musb_g_rx()
974 musb_ep->dma->actual_len, request); in musb_g_rx()
988 if ((request->actual < request->length) in musb_g_rx()
1001 musb_g_giveback(musb_ep, request, 0); in musb_g_rx()
1020 /* Analyze request */ in musb_g_rx()
1259 * Allocate a request for an endpoint.
1266 struct musb_request *request = NULL; in musb_alloc_request() local
1268 request = kzalloc(sizeof *request, gfp_flags); in musb_alloc_request()
1269 if (!request) { in musb_alloc_request()
1274 request->request.dma = DMA_ADDR_INVALID; in musb_alloc_request()
1275 request->epnum = musb_ep->current_epnum; in musb_alloc_request()
1276 request->ep = musb_ep; in musb_alloc_request()
1278 return &request->request; in musb_alloc_request()
1282 * Free a request
1304 dev_dbg(musb->controller, "<== %s request %p len %u on hw_ep%d\n", in musb_ep_restart()
1306 &req->request, req->request.length, req->epnum); in musb_ep_restart()
1319 struct musb_request *request; in musb_gadget_queue() local
1332 request = to_musb_request(req); in musb_gadget_queue()
1333 request->musb = musb; in musb_gadget_queue()
1335 if (request->ep != musb_ep) in musb_gadget_queue()
1338 dev_dbg(musb->controller, "<== to %s request=%p\n", ep->name, req); in musb_gadget_queue()
1340 /* request is mine now... */ in musb_gadget_queue()
1341 request->request.actual = 0; in musb_gadget_queue()
1342 request->request.status = -EINPROGRESS; in musb_gadget_queue()
1343 request->epnum = musb_ep->current_epnum; in musb_gadget_queue()
1344 request->tx = musb_ep->is_in; in musb_gadget_queue()
1346 map_dma_buffer(request, musb, musb_ep); in musb_gadget_queue()
1358 /* add request to the list */ in musb_gadget_queue()
1359 list_add_tail(&request->list, &musb_ep->req_list); in musb_gadget_queue()
1362 if (!musb_ep->busy && &request->list == musb_ep->req_list.next) in musb_gadget_queue()
1363 musb_ep_restart(musb, request); in musb_gadget_queue()
1370 static int musb_gadget_dequeue(struct usb_ep *ep, struct usb_request *request) in musb_gadget_dequeue() argument
1373 struct musb_request *req = to_musb_request(request); in musb_gadget_dequeue()
1379 if (!ep || !request || to_musb_request(request)->ep != musb_ep) in musb_gadget_dequeue()
1389 dev_dbg(musb->controller, "request %p not queued to %s\n", request, ep->name); in musb_gadget_dequeue()
1394 /* if the hardware doesn't have the request, easy ... */ in musb_gadget_dequeue()
1396 musb_g_giveback(musb_ep, request, -ECONNRESET); in musb_gadget_dequeue()
1408 musb_g_giveback(musb_ep, request, -ECONNRESET); in musb_gadget_dequeue()
1413 musb_g_giveback(musb_ep, request, -ECONNRESET); in musb_gadget_dequeue()
1436 struct musb_request *request; in musb_gadget_set_halt() local
1452 request = next_request(musb_ep); in musb_gadget_set_halt()
1454 if (request) { in musb_gadget_set_halt()
1455 dev_dbg(musb->controller, "request in progress, cannot halt %s\n", in musb_gadget_set_halt()
1498 /* maybe start the first request in the queue */ in musb_gadget_set_halt()
1499 if (!musb_ep->busy && !value && request) { in musb_gadget_set_halt()
1500 dev_dbg(musb->controller, "restarting the request\n"); in musb_gadget_set_halt()
1501 musb_ep_restart(musb, request); in musb_gadget_set_halt()