Lines Matching refs:dep
185 struct dwc3_ep *dep = dwc->eps[(num << 1) | 1]; in dwc3_gadget_resize_tx_fifos() local
189 if (!(dep->flags & DWC3_EP_ENABLED)) in dwc3_gadget_resize_tx_fifos()
192 if (usb_endpoint_xfer_bulk(dep->endpoint.desc) in dwc3_gadget_resize_tx_fifos()
193 || usb_endpoint_xfer_isoc(dep->endpoint.desc)) in dwc3_gadget_resize_tx_fifos()
207 tmp = mult * (dep->endpoint.maxpacket + mdwidth); in dwc3_gadget_resize_tx_fifos()
215 dep->name, last_fifo_depth, fifo_size & 0xffff); in dwc3_gadget_resize_tx_fifos()
225 void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req, in dwc3_gadget_giveback() argument
228 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_giveback()
231 dep->busy_slot++; in dwc3_gadget_giveback()
237 if (((dep->busy_slot & DWC3_TRB_MASK) == in dwc3_gadget_giveback()
239 usb_endpoint_xfer_isoc(dep->endpoint.desc)) in dwc3_gadget_giveback()
240 dep->busy_slot++; in dwc3_gadget_giveback()
252 if (dwc->ep0_bounced && dep->number == 0) in dwc3_gadget_giveback()
259 req, dep->name, req->request.actual, in dwc3_gadget_giveback()
263 usb_gadget_giveback_request(&dep->endpoint, &req->request); in dwc3_gadget_giveback()
325 static dma_addr_t dwc3_trb_dma_offset(struct dwc3_ep *dep, in dwc3_trb_dma_offset() argument
328 u32 offset = (char *) trb - (char *) dep->trb_pool; in dwc3_trb_dma_offset()
330 return dep->trb_pool_dma + offset; in dwc3_trb_dma_offset()
333 static int dwc3_alloc_trb_pool(struct dwc3_ep *dep) in dwc3_alloc_trb_pool() argument
335 if (dep->trb_pool) in dwc3_alloc_trb_pool()
338 if (dep->number == 0 || dep->number == 1) in dwc3_alloc_trb_pool()
341 dep->trb_pool = dma_alloc_coherent(sizeof(struct dwc3_trb) * in dwc3_alloc_trb_pool()
343 (unsigned long *)&dep->trb_pool_dma); in dwc3_alloc_trb_pool()
344 if (!dep->trb_pool) { in dwc3_alloc_trb_pool()
345 dev_err(dep->dwc->dev, "failed to allocate trb pool for %s\n", in dwc3_alloc_trb_pool()
346 dep->name); in dwc3_alloc_trb_pool()
353 static void dwc3_free_trb_pool(struct dwc3_ep *dep) in dwc3_free_trb_pool() argument
355 dma_free_coherent(dep->trb_pool); in dwc3_free_trb_pool()
357 dep->trb_pool = NULL; in dwc3_free_trb_pool()
358 dep->trb_pool_dma = 0; in dwc3_free_trb_pool()
361 static int dwc3_gadget_start_config(struct dwc3 *dwc, struct dwc3_ep *dep) in dwc3_gadget_start_config() argument
368 if (dep->number != 1) { in dwc3_gadget_start_config()
371 if (dep->number > 1) { in dwc3_gadget_start_config()
384 static int dwc3_gadget_set_ep_config(struct dwc3 *dwc, struct dwc3_ep *dep, in dwc3_gadget_set_ep_config() argument
398 u32 burst = dep->endpoint.maxburst - 1; in dwc3_gadget_set_ep_config()
408 params.param2 |= dep->saved_state; in dwc3_gadget_set_ep_config()
417 dep->stream_capable = true; in dwc3_gadget_set_ep_config()
429 params.param1 |= DWC3_DEPCFG_EP_NUMBER(dep->number); in dwc3_gadget_set_ep_config()
435 if (dep->direction) in dwc3_gadget_set_ep_config()
436 params.param0 |= DWC3_DEPCFG_FIFO_NUMBER(dep->number >> 1); in dwc3_gadget_set_ep_config()
440 dep->interval = 1 << (desc->bInterval - 1); in dwc3_gadget_set_ep_config()
443 return dwc3_send_gadget_ep_cmd(dwc, dep->number, in dwc3_gadget_set_ep_config()
447 static int dwc3_gadget_set_xfer_resource(struct dwc3 *dwc, struct dwc3_ep *dep) in dwc3_gadget_set_xfer_resource() argument
455 return dwc3_send_gadget_ep_cmd(dwc, dep->number, in dwc3_gadget_set_xfer_resource()
466 static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep, in __dwc3_gadget_ep_enable() argument
471 struct dwc3 *dwc = dep->dwc; in __dwc3_gadget_ep_enable()
475 dev_vdbg(dwc->dev, "Enabling %s\n", dep->name); in __dwc3_gadget_ep_enable()
477 if (!(dep->flags & DWC3_EP_ENABLED)) { in __dwc3_gadget_ep_enable()
478 ret = dwc3_gadget_start_config(dwc, dep); in __dwc3_gadget_ep_enable()
483 ret = dwc3_gadget_set_ep_config(dwc, dep, desc, comp_desc, ignore, in __dwc3_gadget_ep_enable()
488 if (!(dep->flags & DWC3_EP_ENABLED)) { in __dwc3_gadget_ep_enable()
492 ret = dwc3_gadget_set_xfer_resource(dwc, dep); in __dwc3_gadget_ep_enable()
496 dep->endpoint.desc = desc; in __dwc3_gadget_ep_enable()
497 dep->comp_desc = comp_desc; in __dwc3_gadget_ep_enable()
498 dep->type = usb_endpoint_type(desc); in __dwc3_gadget_ep_enable()
499 dep->flags |= DWC3_EP_ENABLED; in __dwc3_gadget_ep_enable()
502 reg |= DWC3_DALEPENA_EP(dep->number); in __dwc3_gadget_ep_enable()
509 trb_st_hw = &dep->trb_pool[0]; in __dwc3_gadget_ep_enable()
511 trb_link = &dep->trb_pool[DWC3_TRB_NUM - 1]; in __dwc3_gadget_ep_enable()
514 trb_link->bpl = lower_32_bits(dwc3_trb_dma_offset(dep, trb_st_hw)); in __dwc3_gadget_ep_enable()
515 trb_link->bph = upper_32_bits(dwc3_trb_dma_offset(dep, trb_st_hw)); in __dwc3_gadget_ep_enable()
524 static void dwc3_remove_requests(struct dwc3 *dwc, struct dwc3_ep *dep) in dwc3_remove_requests() argument
528 if (!list_empty(&dep->req_queued)) { in dwc3_remove_requests()
529 dwc3_stop_active_transfer(dwc, dep->number, true); in dwc3_remove_requests()
532 while (!list_empty(&dep->req_queued)) { in dwc3_remove_requests()
533 req = next_request(&dep->req_queued); in dwc3_remove_requests()
535 dwc3_gadget_giveback(dep, req, -ESHUTDOWN); in dwc3_remove_requests()
539 while (!list_empty(&dep->request_list)) { in dwc3_remove_requests()
540 req = next_request(&dep->request_list); in dwc3_remove_requests()
542 dwc3_gadget_giveback(dep, req, -ESHUTDOWN); in dwc3_remove_requests()
554 static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep) in __dwc3_gadget_ep_disable() argument
556 struct dwc3 *dwc = dep->dwc; in __dwc3_gadget_ep_disable()
559 dwc3_remove_requests(dwc, dep); in __dwc3_gadget_ep_disable()
562 if (dep->flags & DWC3_EP_STALL) in __dwc3_gadget_ep_disable()
563 __dwc3_gadget_ep_set_halt(dep, 0, false); in __dwc3_gadget_ep_disable()
566 reg &= ~DWC3_DALEPENA_EP(dep->number); in __dwc3_gadget_ep_disable()
569 dep->stream_capable = false; in __dwc3_gadget_ep_disable()
570 dep->endpoint.desc = NULL; in __dwc3_gadget_ep_disable()
571 dep->comp_desc = NULL; in __dwc3_gadget_ep_disable()
572 dep->type = 0; in __dwc3_gadget_ep_disable()
573 dep->flags = 0; in __dwc3_gadget_ep_disable()
596 struct dwc3_ep *dep; in dwc3_gadget_ep_enable() local
610 dep = to_dwc3_ep(ep); in dwc3_gadget_ep_enable()
612 if (dep->flags & DWC3_EP_ENABLED) { in dwc3_gadget_ep_enable()
614 dep->name); in dwc3_gadget_ep_enable()
620 strlcat(dep->name, "-control", sizeof(dep->name)); in dwc3_gadget_ep_enable()
623 strlcat(dep->name, "-isoc", sizeof(dep->name)); in dwc3_gadget_ep_enable()
626 strlcat(dep->name, "-bulk", sizeof(dep->name)); in dwc3_gadget_ep_enable()
629 strlcat(dep->name, "-int", sizeof(dep->name)); in dwc3_gadget_ep_enable()
636 ret = __dwc3_gadget_ep_enable(dep, desc, ep->comp_desc, false, false); in dwc3_gadget_ep_enable()
644 struct dwc3_ep *dep; in dwc3_gadget_ep_disable() local
653 dep = to_dwc3_ep(ep); in dwc3_gadget_ep_disable()
655 if (!(dep->flags & DWC3_EP_ENABLED)) { in dwc3_gadget_ep_disable()
657 dep->name); in dwc3_gadget_ep_disable()
661 snprintf(dep->name, sizeof(dep->name), "ep%d%s", in dwc3_gadget_ep_disable()
662 dep->number >> 1, in dwc3_gadget_ep_disable()
663 (dep->number & 1) ? "in" : "out"); in dwc3_gadget_ep_disable()
666 ret = __dwc3_gadget_ep_disable(dep); in dwc3_gadget_ep_disable()
676 struct dwc3_ep *dep = to_dwc3_ep(ep); in dwc3_gadget_ep_alloc_request() local
682 req->epnum = dep->number; in dwc3_gadget_ep_alloc_request()
683 req->dep = dep; in dwc3_gadget_ep_alloc_request()
701 static void dwc3_prepare_one_trb(struct dwc3_ep *dep, in dwc3_prepare_one_trb() argument
708 dep->name, req, (unsigned long long) dma, in dwc3_prepare_one_trb()
713 trb = &dep->trb_pool[dep->free_slot & DWC3_TRB_MASK]; in dwc3_prepare_one_trb()
718 req->trb_dma = dwc3_trb_dma_offset(dep, trb); in dwc3_prepare_one_trb()
719 req->start_slot = dep->free_slot & DWC3_TRB_MASK; in dwc3_prepare_one_trb()
722 dep->free_slot++; in dwc3_prepare_one_trb()
724 if (((dep->free_slot & DWC3_TRB_MASK) == DWC3_TRB_NUM - 1) && in dwc3_prepare_one_trb()
725 usb_endpoint_xfer_isoc(dep->endpoint.desc)) in dwc3_prepare_one_trb()
726 dep->free_slot++; in dwc3_prepare_one_trb()
733 if (usb_endpoint_dir_out(dep->endpoint.desc)) { in dwc3_prepare_one_trb()
734 length = dep->endpoint.maxpacket * in dwc3_prepare_one_trb()
735 ((length - 1) / dep->endpoint.maxpacket + 1); in dwc3_prepare_one_trb()
742 switch (usb_endpoint_type(dep->endpoint.desc)) { in dwc3_prepare_one_trb()
781 if (usb_endpoint_xfer_bulk(dep->endpoint.desc) && dep->stream_capable) in dwc3_prepare_one_trb()
799 static void dwc3_prepare_trbs(struct dwc3_ep *dep, bool starting) in dwc3_prepare_trbs() argument
808 trbs_left = (dep->busy_slot - dep->free_slot) & DWC3_TRB_MASK; in dwc3_prepare_trbs()
811 if (!usb_endpoint_xfer_isoc(dep->endpoint.desc)) { in dwc3_prepare_trbs()
812 max = DWC3_TRB_NUM - (dep->free_slot & DWC3_TRB_MASK); in dwc3_prepare_trbs()
837 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { in dwc3_prepare_trbs()
838 dep->busy_slot = 1; in dwc3_prepare_trbs()
839 dep->free_slot = 1; in dwc3_prepare_trbs()
841 dep->busy_slot = 0; in dwc3_prepare_trbs()
842 dep->free_slot = 0; in dwc3_prepare_trbs()
847 if ((trbs_left <= 1) && usb_endpoint_xfer_isoc(dep->endpoint.desc)) in dwc3_prepare_trbs()
850 list_for_each_entry_safe(req, n, &dep->request_list, list) { in dwc3_prepare_trbs()
857 dwc3_prepare_one_trb(dep, req, dma, length, in dwc3_prepare_trbs()
864 static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep, u16 cmd_param, in __dwc3_gadget_kick_transfer() argument
869 struct dwc3 *dwc = dep->dwc; in __dwc3_gadget_kick_transfer()
873 if (start_new && (dep->flags & DWC3_EP_BUSY)) { in __dwc3_gadget_kick_transfer()
874 dev_vdbg(dwc->dev, "%s: endpoint busy\n", dep->name); in __dwc3_gadget_kick_transfer()
877 dep->flags &= ~DWC3_EP_PENDING_REQUEST; in __dwc3_gadget_kick_transfer()
884 if (list_empty(&dep->req_queued)) in __dwc3_gadget_kick_transfer()
885 dwc3_prepare_trbs(dep, start_new); in __dwc3_gadget_kick_transfer()
888 req = next_request(&dep->req_queued); in __dwc3_gadget_kick_transfer()
890 dwc3_prepare_trbs(dep, start_new); in __dwc3_gadget_kick_transfer()
895 req = next_request(&dep->req_queued); in __dwc3_gadget_kick_transfer()
898 dep->flags |= DWC3_EP_PENDING_REQUEST; in __dwc3_gadget_kick_transfer()
913 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, cmd, ¶ms); in __dwc3_gadget_kick_transfer()
928 dep->flags |= DWC3_EP_BUSY; in __dwc3_gadget_kick_transfer()
931 dep->resource_index = dwc3_gadget_ep_get_transfer_index(dwc, in __dwc3_gadget_kick_transfer()
932 dep->number); in __dwc3_gadget_kick_transfer()
933 WARN_ON_ONCE(!dep->resource_index); in __dwc3_gadget_kick_transfer()
940 struct dwc3_ep *dep, u32 cur_uf) in __dwc3_gadget_start_isoc() argument
944 if (list_empty(&dep->request_list)) { in __dwc3_gadget_start_isoc()
946 dep->name); in __dwc3_gadget_start_isoc()
947 dep->flags |= DWC3_EP_PENDING_REQUEST; in __dwc3_gadget_start_isoc()
952 uf = cur_uf + dep->interval * 4; in __dwc3_gadget_start_isoc()
954 __dwc3_gadget_kick_transfer(dep, uf, 1); in __dwc3_gadget_start_isoc()
958 struct dwc3_ep *dep, const struct dwc3_event_depevt *event) in dwc3_gadget_start_isoc() argument
962 mask = ~(dep->interval - 1); in dwc3_gadget_start_isoc()
965 __dwc3_gadget_start_isoc(dwc, dep, cur_uf); in dwc3_gadget_start_isoc()
968 static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req) in __dwc3_gadget_ep_queue() argument
970 struct dwc3 *dwc = dep->dwc; in __dwc3_gadget_ep_queue()
975 req->direction = dep->direction; in __dwc3_gadget_ep_queue()
976 req->epnum = dep->number; in __dwc3_gadget_ep_queue()
982 if (dep->direction == 0 && in __dwc3_gadget_ep_queue()
983 req->request.length < dep->endpoint.maxpacket) in __dwc3_gadget_ep_queue()
984 req->request.length = dep->endpoint.maxpacket; in __dwc3_gadget_ep_queue()
999 dep->direction); in __dwc3_gadget_ep_queue()
1003 list_add_tail(&req->list, &dep->request_list); in __dwc3_gadget_ep_queue()
1016 if (dep->flags & DWC3_EP_PENDING_REQUEST) { in __dwc3_gadget_ep_queue()
1023 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { in __dwc3_gadget_ep_queue()
1024 if (list_empty(&dep->req_queued)) { in __dwc3_gadget_ep_queue()
1025 dwc3_stop_active_transfer(dwc, dep->number, true); in __dwc3_gadget_ep_queue()
1026 dep->flags = DWC3_EP_ENABLED; in __dwc3_gadget_ep_queue()
1031 ret = __dwc3_gadget_kick_transfer(dep, 0, true); in __dwc3_gadget_ep_queue()
1034 dep->name); in __dwc3_gadget_ep_queue()
1043 if (usb_endpoint_xfer_isoc(dep->endpoint.desc) && in __dwc3_gadget_ep_queue()
1044 (dep->flags & DWC3_EP_BUSY) && in __dwc3_gadget_ep_queue()
1045 !(dep->flags & DWC3_EP_MISSED_ISOC)) { in __dwc3_gadget_ep_queue()
1046 WARN_ON_ONCE(!dep->resource_index); in __dwc3_gadget_ep_queue()
1047 ret = __dwc3_gadget_kick_transfer(dep, dep->resource_index, in __dwc3_gadget_ep_queue()
1051 dep->name); in __dwc3_gadget_ep_queue()
1060 if (dep->stream_capable) { in __dwc3_gadget_ep_queue()
1063 ret = __dwc3_gadget_kick_transfer(dep, 0, true); in __dwc3_gadget_ep_queue()
1066 dep->name); in __dwc3_gadget_ep_queue()
1077 struct dwc3_ep *dep = to_dwc3_ep(ep); in dwc3_gadget_ep_queue() local
1084 if (!dep->endpoint.desc) { in dwc3_gadget_ep_queue()
1091 if (req->dep != dep) { in dwc3_gadget_ep_queue()
1093 request, req->dep->name); in dwc3_gadget_ep_queue()
1101 ret = __dwc3_gadget_ep_queue(dep, req); in dwc3_gadget_ep_queue()
1115 struct dwc3_ep *dep = to_dwc3_ep(ep); in dwc3_gadget_ep_dequeue() local
1116 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_ep_dequeue()
1123 list_for_each_entry(r, &dep->request_list, list) { in dwc3_gadget_ep_dequeue()
1129 list_for_each_entry(r, &dep->req_queued, list) { in dwc3_gadget_ep_dequeue()
1135 dwc3_stop_active_transfer(dwc, dep->number, true); in dwc3_gadget_ep_dequeue()
1146 dwc3_gadget_giveback(dep, req, -ECONNRESET); in dwc3_gadget_ep_dequeue()
1154 int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value, int protocol) in __dwc3_gadget_ep_set_halt() argument
1157 struct dwc3 *dwc = dep->dwc; in __dwc3_gadget_ep_set_halt()
1160 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { in __dwc3_gadget_ep_set_halt()
1161 dev_err(dwc->dev, "%s is of Isochronous type\n", dep->name); in __dwc3_gadget_ep_set_halt()
1168 if (!protocol && ((dep->direction && dep->flags & DWC3_EP_BUSY) || in __dwc3_gadget_ep_set_halt()
1169 (!list_empty(&dep->req_queued) || in __dwc3_gadget_ep_set_halt()
1170 !list_empty(&dep->request_list)))) { in __dwc3_gadget_ep_set_halt()
1172 dep->name); in __dwc3_gadget_ep_set_halt()
1176 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, in __dwc3_gadget_ep_set_halt()
1180 dep->name); in __dwc3_gadget_ep_set_halt()
1182 dep->flags |= DWC3_EP_STALL; in __dwc3_gadget_ep_set_halt()
1184 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, in __dwc3_gadget_ep_set_halt()
1188 dep->name); in __dwc3_gadget_ep_set_halt()
1190 dep->flags &= ~(DWC3_EP_STALL | DWC3_EP_WEDGE); in __dwc3_gadget_ep_set_halt()
1198 struct dwc3_ep *dep = to_dwc3_ep(ep); in dwc3_gadget_ep_set_halt() local
1205 ret = __dwc3_gadget_ep_set_halt(dep, value, false); in dwc3_gadget_ep_set_halt()
1213 struct dwc3_ep *dep = to_dwc3_ep(ep); in dwc3_gadget_ep_set_wedge() local
1218 dep->flags |= DWC3_EP_WEDGE; in dwc3_gadget_ep_set_wedge()
1220 if (dep->number == 0 || dep->number == 1) in dwc3_gadget_ep_set_wedge()
1223 ret = __dwc3_gadget_ep_set_halt(dep, 1, false); in dwc3_gadget_ep_set_wedge()
1460 struct dwc3_ep *dep; in dwc3_gadget_start() local
1519 dep = dwc->eps[0]; in dwc3_gadget_start()
1520 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false, in dwc3_gadget_start()
1523 dev_err(dwc->dev, "failed to enable %s\n", dep->name); in dwc3_gadget_start()
1527 dep = dwc->eps[1]; in dwc3_gadget_start()
1528 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false, in dwc3_gadget_start()
1531 dev_err(dwc->dev, "failed to enable %s\n", dep->name); in dwc3_gadget_start()
1589 struct dwc3_ep *dep; in dwc3_gadget_init_hw_endpoints() local
1595 dep = kzalloc(sizeof(*dep), GFP_KERNEL); in dwc3_gadget_init_hw_endpoints()
1596 if (!dep) in dwc3_gadget_init_hw_endpoints()
1599 dep->dwc = dwc; in dwc3_gadget_init_hw_endpoints()
1600 dep->number = epnum; in dwc3_gadget_init_hw_endpoints()
1601 dep->direction = !!direction; in dwc3_gadget_init_hw_endpoints()
1602 dwc->eps[epnum] = dep; in dwc3_gadget_init_hw_endpoints()
1604 snprintf(dep->name, sizeof(dep->name), "ep%d%s", epnum >> 1, in dwc3_gadget_init_hw_endpoints()
1607 dep->endpoint.name = dep->name; in dwc3_gadget_init_hw_endpoints()
1609 dev_vdbg(dwc->dev, "initializing %s\n", dep->name); in dwc3_gadget_init_hw_endpoints()
1612 usb_ep_set_maxpacket_limit(&dep->endpoint, 512); in dwc3_gadget_init_hw_endpoints()
1613 dep->endpoint.maxburst = 1; in dwc3_gadget_init_hw_endpoints()
1614 dep->endpoint.ops = &dwc3_gadget_ep0_ops; in dwc3_gadget_init_hw_endpoints()
1616 dwc->gadget.ep0 = &dep->endpoint; in dwc3_gadget_init_hw_endpoints()
1621 usb_ep_set_maxpacket_limit(&dep->endpoint, 512); in dwc3_gadget_init_hw_endpoints()
1623 usb_ep_set_maxpacket_limit(&dep->endpoint, 1024); in dwc3_gadget_init_hw_endpoints()
1624 dep->endpoint.max_streams = 15; in dwc3_gadget_init_hw_endpoints()
1625 dep->endpoint.ops = &dwc3_gadget_ep_ops; in dwc3_gadget_init_hw_endpoints()
1626 list_add_tail(&dep->endpoint.ep_list, in dwc3_gadget_init_hw_endpoints()
1629 ret = dwc3_alloc_trb_pool(dep); in dwc3_gadget_init_hw_endpoints()
1634 INIT_LIST_HEAD(&dep->request_list); in dwc3_gadget_init_hw_endpoints()
1635 INIT_LIST_HEAD(&dep->req_queued); in dwc3_gadget_init_hw_endpoints()
1664 struct dwc3_ep *dep; in dwc3_gadget_free_endpoints() local
1668 dep = dwc->eps[epnum]; in dwc3_gadget_free_endpoints()
1669 if (!dep) in dwc3_gadget_free_endpoints()
1681 dwc3_free_trb_pool(dep); in dwc3_gadget_free_endpoints()
1682 list_del(&dep->endpoint.ep_list); in dwc3_gadget_free_endpoints()
1685 kfree(dep); in dwc3_gadget_free_endpoints()
1691 static int __dwc3_cleanup_done_trbs(struct dwc3 *dwc, struct dwc3_ep *dep, in __dwc3_cleanup_done_trbs() argument
1709 dep->name, trb); in __dwc3_cleanup_done_trbs()
1712 if (dep->direction) { in __dwc3_cleanup_done_trbs()
1717 dep->name); in __dwc3_cleanup_done_trbs()
1733 dep->flags |= DWC3_EP_MISSED_ISOC; in __dwc3_cleanup_done_trbs()
1736 dep->name); in __dwc3_cleanup_done_trbs()
1740 dep->flags &= ~DWC3_EP_MISSED_ISOC; in __dwc3_cleanup_done_trbs()
1767 static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep, in dwc3_cleanup_done_reqs() argument
1774 req = next_request(&dep->req_queued); in dwc3_cleanup_done_reqs()
1782 usb_endpoint_xfer_isoc(dep->endpoint.desc)) in dwc3_cleanup_done_reqs()
1785 trb = &dep->trb_pool[slot]; in dwc3_cleanup_done_reqs()
1788 __dwc3_cleanup_done_trbs(dwc, dep, req, trb, event, status); in dwc3_cleanup_done_reqs()
1789 dwc3_gadget_giveback(dep, req, status); in dwc3_cleanup_done_reqs()
1791 if (usb_endpoint_xfer_isoc(dep->endpoint.desc) && in dwc3_cleanup_done_reqs()
1792 list_empty(&dep->req_queued)) { in dwc3_cleanup_done_reqs()
1793 if (list_empty(&dep->request_list)) { in dwc3_cleanup_done_reqs()
1800 dep->flags = DWC3_EP_PENDING_REQUEST; in dwc3_cleanup_done_reqs()
1802 dwc3_stop_active_transfer(dwc, dep->number, true); in dwc3_cleanup_done_reqs()
1803 dep->flags = DWC3_EP_ENABLED; in dwc3_cleanup_done_reqs()
1812 struct dwc3_ep *dep, const struct dwc3_event_depevt *event) in dwc3_endpoint_transfer_complete() argument
1824 clean_busy = dwc3_cleanup_done_reqs(dwc, dep, event, status); in dwc3_endpoint_transfer_complete()
1826 usb_endpoint_xfer_isoc(dep->endpoint.desc))) in dwc3_endpoint_transfer_complete()
1827 dep->flags &= ~DWC3_EP_BUSY; in dwc3_endpoint_transfer_complete()
1838 dep = dwc->eps[i]; in dwc3_endpoint_transfer_complete()
1840 if (!(dep->flags & DWC3_EP_ENABLED)) in dwc3_endpoint_transfer_complete()
1843 if (!list_empty(&dep->req_queued)) in dwc3_endpoint_transfer_complete()
1854 if (!usb_endpoint_xfer_isoc(dep->endpoint.desc)) { in dwc3_endpoint_transfer_complete()
1855 ret = __dwc3_gadget_kick_transfer(dep, 0, is_xfer_complete); in dwc3_endpoint_transfer_complete()
1864 struct dwc3_ep *dep; in dwc3_endpoint_interrupt() local
1867 dep = dwc->eps[epnum]; in dwc3_endpoint_interrupt()
1869 if (!(dep->flags & DWC3_EP_ENABLED)) in dwc3_endpoint_interrupt()
1879 dep->resource_index = 0; in dwc3_endpoint_interrupt()
1881 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { in dwc3_endpoint_interrupt()
1883 dep->name); in dwc3_endpoint_interrupt()
1887 dwc3_endpoint_transfer_complete(dwc, dep, event); in dwc3_endpoint_interrupt()
1890 dwc3_endpoint_transfer_complete(dwc, dep, event); in dwc3_endpoint_interrupt()
1893 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { in dwc3_endpoint_interrupt()
1894 dwc3_gadget_start_isoc(dwc, dep, event); in dwc3_endpoint_interrupt()
1899 dep->name, event->status & in dwc3_endpoint_interrupt()
1904 ret = __dwc3_gadget_kick_transfer(dep, 0, 1); in dwc3_endpoint_interrupt()
1909 dep->name); in dwc3_endpoint_interrupt()
1914 if (!usb_endpoint_xfer_bulk(dep->endpoint.desc)) { in dwc3_endpoint_interrupt()
1916 dep->name); in dwc3_endpoint_interrupt()
1933 dev_dbg(dwc->dev, "%s FIFO Overrun\n", dep->name); in dwc3_endpoint_interrupt()
1981 struct dwc3_ep *dep; in dwc3_stop_active_transfer() local
1986 dep = dwc->eps[epnum]; in dwc3_stop_active_transfer()
1988 if (!dep->resource_index) in dwc3_stop_active_transfer()
2013 cmd |= DWC3_DEPCMD_PARAM(dep->resource_index); in dwc3_stop_active_transfer()
2015 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, cmd, ¶ms); in dwc3_stop_active_transfer()
2017 dep->resource_index = 0; in dwc3_stop_active_transfer()
2018 dep->flags &= ~DWC3_EP_BUSY; in dwc3_stop_active_transfer()
2027 struct dwc3_ep *dep; in dwc3_stop_active_transfers() local
2029 dep = dwc->eps[epnum]; in dwc3_stop_active_transfers()
2030 if (!dep) in dwc3_stop_active_transfers()
2033 if (!(dep->flags & DWC3_EP_ENABLED)) in dwc3_stop_active_transfers()
2036 dwc3_remove_requests(dwc, dep); in dwc3_stop_active_transfers()
2045 struct dwc3_ep *dep; in dwc3_clear_stall_all_ep() local
2049 dep = dwc->eps[epnum]; in dwc3_clear_stall_all_ep()
2050 if (!dep) in dwc3_clear_stall_all_ep()
2053 if (!(dep->flags & DWC3_EP_STALL)) in dwc3_clear_stall_all_ep()
2056 dep->flags &= ~DWC3_EP_STALL; in dwc3_clear_stall_all_ep()
2059 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, in dwc3_clear_stall_all_ep()
2163 struct dwc3_ep *dep; in dwc3_gadget_conndone_interrupt() local
2246 dep = dwc->eps[0]; in dwc3_gadget_conndone_interrupt()
2247 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, true, in dwc3_gadget_conndone_interrupt()
2250 dev_err(dwc->dev, "failed to enable %s\n", dep->name); in dwc3_gadget_conndone_interrupt()
2254 dep = dwc->eps[1]; in dwc3_gadget_conndone_interrupt()
2255 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, true, in dwc3_gadget_conndone_interrupt()
2258 dev_err(dwc->dev, "failed to enable %s\n", dep->name); in dwc3_gadget_conndone_interrupt()