Lines Matching refs:hwreq

341 static int add_td_to_list(struct ci_hw_ep *hwep, struct ci_hw_req *hwreq,  in add_td_to_list()  argument
364 u32 mul = hwreq->req.length / hwep->ep.maxpacket; in add_td_to_list()
366 if (hwreq->req.length == 0 in add_td_to_list()
367 || hwreq->req.length % hwep->ep.maxpacket) in add_td_to_list()
372 temp = (u32) (hwreq->req.dma + hwreq->req.actual); in add_td_to_list()
382 hwreq->req.actual += length; in add_td_to_list()
384 if (!list_empty(&hwreq->tds)) { in add_td_to_list()
386 lastnode = list_entry(hwreq->tds.prev, in add_td_to_list()
392 list_add_tail(&node->td, &hwreq->tds); in add_td_to_list()
413 static int _hardware_enqueue(struct ci_hw_ep *hwep, struct ci_hw_req *hwreq) in _hardware_enqueue() argument
417 unsigned rest = hwreq->req.length; in _hardware_enqueue()
422 if (hwreq->req.status == -EALREADY) in _hardware_enqueue()
425 hwreq->req.status = -EALREADY; in _hardware_enqueue()
427 ret = usb_gadget_map_request(&ci->gadget, &hwreq->req, hwep->dir); in _hardware_enqueue()
435 if (hwreq->req.dma % PAGE_SIZE) in _hardware_enqueue()
439 add_td_to_list(hwep, hwreq, 0); in _hardware_enqueue()
442 unsigned count = min(hwreq->req.length - hwreq->req.actual, in _hardware_enqueue()
444 add_td_to_list(hwep, hwreq, count); in _hardware_enqueue()
448 if (hwreq->req.zero && hwreq->req.length in _hardware_enqueue()
449 && (hwreq->req.length % hwep->ep.maxpacket == 0)) in _hardware_enqueue()
450 add_td_to_list(hwep, hwreq, 0); in _hardware_enqueue()
452 firstnode = list_first_entry(&hwreq->tds, struct td_node, td); in _hardware_enqueue()
454 lastnode = list_entry(hwreq->tds.prev, in _hardware_enqueue()
458 if (!hwreq->req.no_interrupt) in _hardware_enqueue()
462 hwreq->req.actual = 0; in _hardware_enqueue()
494 u32 mul = hwreq->req.length / hwep->ep.maxpacket; in _hardware_enqueue()
496 if (hwreq->req.length == 0 in _hardware_enqueue()
497 || hwreq->req.length % hwep->ep.maxpacket) in _hardware_enqueue()
544 static int _hardware_dequeue(struct ci_hw_ep *hwep, struct ci_hw_req *hwreq) in _hardware_dequeue() argument
549 unsigned actual = hwreq->req.length; in _hardware_dequeue()
552 if (hwreq->req.status != -EALREADY) in _hardware_dequeue()
555 hwreq->req.status = 0; in _hardware_dequeue()
557 list_for_each_entry_safe(node, tmpnode, &hwreq->tds, td) { in _hardware_dequeue()
565 hwreq->req.status = -EALREADY; in _hardware_dequeue()
573 hwreq->req.status = tmptoken & TD_STATUS; in _hardware_dequeue()
574 if ((TD_STATUS_HALTED & hwreq->req.status)) { in _hardware_dequeue()
575 hwreq->req.status = -EPIPE; in _hardware_dequeue()
577 } else if ((TD_STATUS_DT_ERR & hwreq->req.status)) { in _hardware_dequeue()
578 hwreq->req.status = -EPROTO; in _hardware_dequeue()
580 } else if ((TD_STATUS_TR_ERR & hwreq->req.status)) { in _hardware_dequeue()
581 hwreq->req.status = -EILSEQ; in _hardware_dequeue()
587 hwreq->req.status = -EPROTO; in _hardware_dequeue()
603 usb_gadget_unmap_request(&hwep->ci->gadget, &hwreq->req, hwep->dir); in _hardware_dequeue()
605 hwreq->req.actual += actual; in _hardware_dequeue()
607 if (hwreq->req.status) in _hardware_dequeue()
608 return hwreq->req.status; in _hardware_dequeue()
610 return hwreq->req.actual; in _hardware_dequeue()
633 struct ci_hw_req *hwreq = list_entry(hwep->qh.queue.next, in _ep_nuke() local
636 list_for_each_entry_safe(node, tmpnode, &hwreq->tds, td) { in _ep_nuke()
643 list_del_init(&hwreq->queue); in _ep_nuke()
644 hwreq->req.status = -ESHUTDOWN; in _ep_nuke()
646 if (hwreq->req.complete != NULL) { in _ep_nuke()
648 usb_gadget_giveback_request(&hwep->ep, &hwreq->req); in _ep_nuke()
798 struct ci_hw_req *hwreq = container_of(req, struct ci_hw_req, req); in _ep_queue() local
818 hwreq->req.length > (1 + hwep->ep.mult) * hwep->ep.maxpacket) { in _ep_queue()
824 if (!list_empty(&hwreq->queue)) { in _ep_queue()
830 hwreq->req.status = -EINPROGRESS; in _ep_queue()
831 hwreq->req.actual = 0; in _ep_queue()
833 retval = _hardware_enqueue(hwep, hwreq); in _ep_queue()
838 list_add_tail(&hwreq->queue, &hwep->qh.queue); in _ep_queue()
962 struct ci_hw_req *hwreq, *hwreqtemp; in isr_tr_complete_low() local
966 list_for_each_entry_safe(hwreq, hwreqtemp, &hwep->qh.queue, in isr_tr_complete_low()
968 retval = _hardware_dequeue(hwep, hwreq); in isr_tr_complete_low()
971 list_del_init(&hwreq->queue); in isr_tr_complete_low()
972 if (hwreq->req.complete != NULL) { in isr_tr_complete_low()
975 hwreq->req.length) in isr_tr_complete_low()
977 usb_gadget_giveback_request(&hweptemp->ep, &hwreq->req); in isr_tr_complete_low()
1312 struct ci_hw_req *hwreq = NULL; in ep_alloc_request() local
1317 hwreq = kzalloc(sizeof(struct ci_hw_req), gfp_flags); in ep_alloc_request()
1318 if (hwreq != NULL) { in ep_alloc_request()
1319 INIT_LIST_HEAD(&hwreq->queue); in ep_alloc_request()
1320 INIT_LIST_HEAD(&hwreq->tds); in ep_alloc_request()
1323 return (hwreq == NULL) ? NULL : &hwreq->req; in ep_alloc_request()
1334 struct ci_hw_req *hwreq = container_of(req, struct ci_hw_req, req); in ep_free_request() local
1340 } else if (!list_empty(&hwreq->queue)) { in ep_free_request()
1347 list_for_each_entry_safe(node, tmpnode, &hwreq->tds, td) { in ep_free_request()
1354 kfree(hwreq); in ep_free_request()
1388 struct ci_hw_req *hwreq = container_of(req, struct ci_hw_req, req); in ep_dequeue() local
1392 if (ep == NULL || req == NULL || hwreq->req.status != -EALREADY || in ep_dequeue()
1393 hwep->ep.desc == NULL || list_empty(&hwreq->queue) || in ep_dequeue()
1401 list_for_each_entry_safe(node, tmpnode, &hwreq->tds, td) { in ep_dequeue()
1408 list_del_init(&hwreq->queue); in ep_dequeue()
1414 if (hwreq->req.complete != NULL) { in ep_dequeue()
1416 usb_gadget_giveback_request(&hwep->ep, &hwreq->req); in ep_dequeue()