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 = dep->endpoint.maxpacket * in dwc3_prepare_one_trb()
736 ((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()
1590 struct dwc3_ep *dep; in dwc3_gadget_init_hw_endpoints() local
1596 dep = kzalloc(sizeof(*dep), GFP_KERNEL); in dwc3_gadget_init_hw_endpoints()
1597 if (!dep) in dwc3_gadget_init_hw_endpoints()
1600 dep->dwc = dwc; in dwc3_gadget_init_hw_endpoints()
1601 dep->number = epnum; in dwc3_gadget_init_hw_endpoints()
1602 dep->direction = !!direction; in dwc3_gadget_init_hw_endpoints()
1603 dwc->eps[epnum] = dep; in dwc3_gadget_init_hw_endpoints()
1605 snprintf(dep->name, sizeof(dep->name), "ep%d%s", epnum >> 1, in dwc3_gadget_init_hw_endpoints()
1608 dep->endpoint.name = dep->name; in dwc3_gadget_init_hw_endpoints()
1610 dev_vdbg(dwc->dev, "initializing %s\n", dep->name); in dwc3_gadget_init_hw_endpoints()
1613 usb_ep_set_maxpacket_limit(&dep->endpoint, 512); in dwc3_gadget_init_hw_endpoints()
1614 dep->endpoint.maxburst = 1; in dwc3_gadget_init_hw_endpoints()
1615 dep->endpoint.ops = &dwc3_gadget_ep0_ops; in dwc3_gadget_init_hw_endpoints()
1617 dwc->gadget.ep0 = &dep->endpoint; in dwc3_gadget_init_hw_endpoints()
1622 usb_ep_set_maxpacket_limit(&dep->endpoint, 512); in dwc3_gadget_init_hw_endpoints()
1624 usb_ep_set_maxpacket_limit(&dep->endpoint, 1024); in dwc3_gadget_init_hw_endpoints()
1625 dep->endpoint.max_streams = 15; in dwc3_gadget_init_hw_endpoints()
1626 dep->endpoint.ops = &dwc3_gadget_ep_ops; in dwc3_gadget_init_hw_endpoints()
1627 list_add_tail(&dep->endpoint.ep_list, in dwc3_gadget_init_hw_endpoints()
1630 ret = dwc3_alloc_trb_pool(dep); in dwc3_gadget_init_hw_endpoints()
1635 INIT_LIST_HEAD(&dep->request_list); in dwc3_gadget_init_hw_endpoints()
1636 INIT_LIST_HEAD(&dep->req_queued); in dwc3_gadget_init_hw_endpoints()
1665 struct dwc3_ep *dep; in dwc3_gadget_free_endpoints() local
1669 dep = dwc->eps[epnum]; in dwc3_gadget_free_endpoints()
1670 if (!dep) in dwc3_gadget_free_endpoints()
1682 dwc3_free_trb_pool(dep); in dwc3_gadget_free_endpoints()
1683 list_del(&dep->endpoint.ep_list); in dwc3_gadget_free_endpoints()
1686 kfree(dep); in dwc3_gadget_free_endpoints()
1692 static int __dwc3_cleanup_done_trbs(struct dwc3 *dwc, struct dwc3_ep *dep, in __dwc3_cleanup_done_trbs() argument
1711 dep->name, trb); in __dwc3_cleanup_done_trbs()
1714 if (dep->direction) { in __dwc3_cleanup_done_trbs()
1719 dep->name); in __dwc3_cleanup_done_trbs()
1735 dep->flags |= DWC3_EP_MISSED_ISOC; in __dwc3_cleanup_done_trbs()
1738 dep->name); in __dwc3_cleanup_done_trbs()
1742 dep->flags &= ~DWC3_EP_MISSED_ISOC; in __dwc3_cleanup_done_trbs()
1756 if (usb_endpoint_dir_out(dep->endpoint.desc) && in __dwc3_cleanup_done_trbs()
1757 (req->request.length % dep->endpoint.maxpacket)) { in __dwc3_cleanup_done_trbs()
1758 length = dep->endpoint.maxpacket * in __dwc3_cleanup_done_trbs()
1759 ((req->request.length - 1) / dep->endpoint.maxpacket + 1); in __dwc3_cleanup_done_trbs()
1776 static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep, in dwc3_cleanup_done_reqs() argument
1783 req = next_request(&dep->req_queued); in dwc3_cleanup_done_reqs()
1791 usb_endpoint_xfer_isoc(dep->endpoint.desc)) in dwc3_cleanup_done_reqs()
1794 trb = &dep->trb_pool[slot]; in dwc3_cleanup_done_reqs()
1797 __dwc3_cleanup_done_trbs(dwc, dep, req, trb, event, status); in dwc3_cleanup_done_reqs()
1798 dwc3_gadget_giveback(dep, req, status); in dwc3_cleanup_done_reqs()
1800 if (usb_endpoint_xfer_isoc(dep->endpoint.desc) && in dwc3_cleanup_done_reqs()
1801 list_empty(&dep->req_queued)) { in dwc3_cleanup_done_reqs()
1802 if (list_empty(&dep->request_list)) { in dwc3_cleanup_done_reqs()
1809 dep->flags = DWC3_EP_PENDING_REQUEST; in dwc3_cleanup_done_reqs()
1811 dwc3_stop_active_transfer(dwc, dep->number, true); in dwc3_cleanup_done_reqs()
1812 dep->flags = DWC3_EP_ENABLED; in dwc3_cleanup_done_reqs()
1821 struct dwc3_ep *dep, const struct dwc3_event_depevt *event) in dwc3_endpoint_transfer_complete() argument
1833 clean_busy = dwc3_cleanup_done_reqs(dwc, dep, event, status); in dwc3_endpoint_transfer_complete()
1835 usb_endpoint_xfer_isoc(dep->endpoint.desc))) in dwc3_endpoint_transfer_complete()
1836 dep->flags &= ~DWC3_EP_BUSY; in dwc3_endpoint_transfer_complete()
1847 dep = dwc->eps[i]; in dwc3_endpoint_transfer_complete()
1849 if (!(dep->flags & DWC3_EP_ENABLED)) in dwc3_endpoint_transfer_complete()
1852 if (!list_empty(&dep->req_queued)) in dwc3_endpoint_transfer_complete()
1863 if (!usb_endpoint_xfer_isoc(dep->endpoint.desc)) { in dwc3_endpoint_transfer_complete()
1864 ret = __dwc3_gadget_kick_transfer(dep, 0, is_xfer_complete); in dwc3_endpoint_transfer_complete()
1873 struct dwc3_ep *dep; in dwc3_endpoint_interrupt() local
1876 dep = dwc->eps[epnum]; in dwc3_endpoint_interrupt()
1878 if (!(dep->flags & DWC3_EP_ENABLED)) in dwc3_endpoint_interrupt()
1888 dep->resource_index = 0; in dwc3_endpoint_interrupt()
1890 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { in dwc3_endpoint_interrupt()
1892 dep->name); in dwc3_endpoint_interrupt()
1896 dwc3_endpoint_transfer_complete(dwc, dep, event); in dwc3_endpoint_interrupt()
1899 dwc3_endpoint_transfer_complete(dwc, dep, event); in dwc3_endpoint_interrupt()
1902 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { in dwc3_endpoint_interrupt()
1903 dwc3_gadget_start_isoc(dwc, dep, event); in dwc3_endpoint_interrupt()
1908 dep->name, event->status & in dwc3_endpoint_interrupt()
1913 ret = __dwc3_gadget_kick_transfer(dep, 0, 1); in dwc3_endpoint_interrupt()
1918 dep->name); in dwc3_endpoint_interrupt()
1923 if (!usb_endpoint_xfer_bulk(dep->endpoint.desc)) { in dwc3_endpoint_interrupt()
1925 dep->name); in dwc3_endpoint_interrupt()
1942 dev_dbg(dwc->dev, "%s FIFO Overrun\n", dep->name); in dwc3_endpoint_interrupt()
1990 struct dwc3_ep *dep; in dwc3_stop_active_transfer() local
1995 dep = dwc->eps[epnum]; in dwc3_stop_active_transfer()
1997 if (!dep->resource_index) in dwc3_stop_active_transfer()
2022 cmd |= DWC3_DEPCMD_PARAM(dep->resource_index); in dwc3_stop_active_transfer()
2024 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, cmd, ¶ms); in dwc3_stop_active_transfer()
2026 dep->resource_index = 0; in dwc3_stop_active_transfer()
2027 dep->flags &= ~DWC3_EP_BUSY; in dwc3_stop_active_transfer()
2036 struct dwc3_ep *dep; in dwc3_stop_active_transfers() local
2038 dep = dwc->eps[epnum]; in dwc3_stop_active_transfers()
2039 if (!dep) in dwc3_stop_active_transfers()
2042 if (!(dep->flags & DWC3_EP_ENABLED)) in dwc3_stop_active_transfers()
2045 dwc3_remove_requests(dwc, dep); in dwc3_stop_active_transfers()
2054 struct dwc3_ep *dep; in dwc3_clear_stall_all_ep() local
2058 dep = dwc->eps[epnum]; in dwc3_clear_stall_all_ep()
2059 if (!dep) in dwc3_clear_stall_all_ep()
2062 if (!(dep->flags & DWC3_EP_STALL)) in dwc3_clear_stall_all_ep()
2065 dep->flags &= ~DWC3_EP_STALL; in dwc3_clear_stall_all_ep()
2068 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, in dwc3_clear_stall_all_ep()
2172 struct dwc3_ep *dep; in dwc3_gadget_conndone_interrupt() local
2258 dep = dwc->eps[0]; in dwc3_gadget_conndone_interrupt()
2259 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, true, in dwc3_gadget_conndone_interrupt()
2262 dev_err(dwc->dev, "failed to enable %s\n", dep->name); in dwc3_gadget_conndone_interrupt()
2266 dep = dwc->eps[1]; in dwc3_gadget_conndone_interrupt()
2267 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, true, in dwc3_gadget_conndone_interrupt()
2270 dev_err(dwc->dev, "failed to enable %s\n", dep->name); in dwc3_gadget_conndone_interrupt()