Lines Matching refs:dep

194 		struct dwc3_ep	*dep = dwc->eps[(num << 1) | 1];  in dwc3_gadget_resize_tx_fifos()  local
198 if (!(dep->flags & DWC3_EP_ENABLED)) in dwc3_gadget_resize_tx_fifos()
201 if (usb_endpoint_xfer_bulk(dep->endpoint.desc) in dwc3_gadget_resize_tx_fifos()
202 || usb_endpoint_xfer_isoc(dep->endpoint.desc)) in dwc3_gadget_resize_tx_fifos()
216 tmp = mult * (dep->endpoint.maxpacket + mdwidth); in dwc3_gadget_resize_tx_fifos()
224 dep->name, last_fifo_depth, fifo_size & 0xffff); in dwc3_gadget_resize_tx_fifos()
234 void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req, in dwc3_gadget_giveback() argument
237 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_giveback()
243 dep->busy_slot++; in dwc3_gadget_giveback()
249 if (((dep->busy_slot & DWC3_TRB_MASK) == in dwc3_gadget_giveback()
251 usb_endpoint_xfer_isoc(dep->endpoint.desc)) in dwc3_gadget_giveback()
252 dep->busy_slot++; in dwc3_gadget_giveback()
262 if (dwc->ep0_bounced && dep->number == 0) in dwc3_gadget_giveback()
269 req, dep->name, req->request.actual, in dwc3_gadget_giveback()
274 usb_gadget_giveback_request(&dep->endpoint, &req->request); in dwc3_gadget_giveback()
316 struct dwc3_ep *dep = dwc->eps[ep]; in dwc3_send_gadget_ep_cmd() local
320 trace_dwc3_gadget_ep_cmd(dep, cmd, params); in dwc3_send_gadget_ep_cmd()
353 static dma_addr_t dwc3_trb_dma_offset(struct dwc3_ep *dep, in dwc3_trb_dma_offset() argument
356 u32 offset = (char *) trb - (char *) dep->trb_pool; in dwc3_trb_dma_offset()
358 return dep->trb_pool_dma + offset; in dwc3_trb_dma_offset()
361 static int dwc3_alloc_trb_pool(struct dwc3_ep *dep) in dwc3_alloc_trb_pool() argument
363 struct dwc3 *dwc = dep->dwc; in dwc3_alloc_trb_pool()
365 if (dep->trb_pool) in dwc3_alloc_trb_pool()
368 dep->trb_pool = dma_alloc_coherent(dwc->dev, in dwc3_alloc_trb_pool()
370 &dep->trb_pool_dma, GFP_KERNEL); in dwc3_alloc_trb_pool()
371 if (!dep->trb_pool) { in dwc3_alloc_trb_pool()
372 dev_err(dep->dwc->dev, "failed to allocate trb pool for %s\n", in dwc3_alloc_trb_pool()
373 dep->name); in dwc3_alloc_trb_pool()
380 static void dwc3_free_trb_pool(struct dwc3_ep *dep) in dwc3_free_trb_pool() argument
382 struct dwc3 *dwc = dep->dwc; in dwc3_free_trb_pool()
385 dep->trb_pool, dep->trb_pool_dma); in dwc3_free_trb_pool()
387 dep->trb_pool = NULL; in dwc3_free_trb_pool()
388 dep->trb_pool_dma = 0; in dwc3_free_trb_pool()
391 static int dwc3_gadget_set_xfer_resource(struct dwc3 *dwc, struct dwc3_ep *dep);
425 static int dwc3_gadget_start_config(struct dwc3 *dwc, struct dwc3_ep *dep) in dwc3_gadget_start_config() argument
432 if (dep->number) in dwc3_gadget_start_config()
443 struct dwc3_ep *dep = dwc->eps[i]; in dwc3_gadget_start_config() local
445 if (!dep) in dwc3_gadget_start_config()
448 ret = dwc3_gadget_set_xfer_resource(dwc, dep); in dwc3_gadget_start_config()
456 static int dwc3_gadget_set_ep_config(struct dwc3 *dwc, struct dwc3_ep *dep, in dwc3_gadget_set_ep_config() argument
470 u32 burst = dep->endpoint.maxburst - 1; in dwc3_gadget_set_ep_config()
480 params.param2 |= dep->saved_state; in dwc3_gadget_set_ep_config()
489 dep->stream_capable = true; in dwc3_gadget_set_ep_config()
501 params.param1 |= DWC3_DEPCFG_EP_NUMBER(dep->number); in dwc3_gadget_set_ep_config()
507 if (dep->direction) in dwc3_gadget_set_ep_config()
508 params.param0 |= DWC3_DEPCFG_FIFO_NUMBER(dep->number >> 1); in dwc3_gadget_set_ep_config()
512 dep->interval = 1 << (desc->bInterval - 1); in dwc3_gadget_set_ep_config()
515 return dwc3_send_gadget_ep_cmd(dwc, dep->number, in dwc3_gadget_set_ep_config()
519 static int dwc3_gadget_set_xfer_resource(struct dwc3 *dwc, struct dwc3_ep *dep) in dwc3_gadget_set_xfer_resource() argument
527 return dwc3_send_gadget_ep_cmd(dwc, dep->number, in dwc3_gadget_set_xfer_resource()
538 static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep, in __dwc3_gadget_ep_enable() argument
543 struct dwc3 *dwc = dep->dwc; in __dwc3_gadget_ep_enable()
547 dwc3_trace(trace_dwc3_gadget, "Enabling %s", dep->name); in __dwc3_gadget_ep_enable()
549 if (!(dep->flags & DWC3_EP_ENABLED)) { in __dwc3_gadget_ep_enable()
550 ret = dwc3_gadget_start_config(dwc, dep); in __dwc3_gadget_ep_enable()
555 ret = dwc3_gadget_set_ep_config(dwc, dep, desc, comp_desc, ignore, in __dwc3_gadget_ep_enable()
560 if (!(dep->flags & DWC3_EP_ENABLED)) { in __dwc3_gadget_ep_enable()
564 dep->endpoint.desc = desc; in __dwc3_gadget_ep_enable()
565 dep->comp_desc = comp_desc; in __dwc3_gadget_ep_enable()
566 dep->type = usb_endpoint_type(desc); in __dwc3_gadget_ep_enable()
567 dep->flags |= DWC3_EP_ENABLED; in __dwc3_gadget_ep_enable()
570 reg |= DWC3_DALEPENA_EP(dep->number); in __dwc3_gadget_ep_enable()
577 trb_st_hw = &dep->trb_pool[0]; in __dwc3_gadget_ep_enable()
579 trb_link = &dep->trb_pool[DWC3_TRB_NUM - 1]; in __dwc3_gadget_ep_enable()
582 trb_link->bpl = lower_32_bits(dwc3_trb_dma_offset(dep, trb_st_hw)); in __dwc3_gadget_ep_enable()
583 trb_link->bph = upper_32_bits(dwc3_trb_dma_offset(dep, trb_st_hw)); in __dwc3_gadget_ep_enable()
592 static void dwc3_remove_requests(struct dwc3 *dwc, struct dwc3_ep *dep) in dwc3_remove_requests() argument
596 if (!list_empty(&dep->req_queued)) { in dwc3_remove_requests()
597 dwc3_stop_active_transfer(dwc, dep->number, true); in dwc3_remove_requests()
600 while (!list_empty(&dep->req_queued)) { in dwc3_remove_requests()
601 req = next_request(&dep->req_queued); in dwc3_remove_requests()
603 dwc3_gadget_giveback(dep, req, -ESHUTDOWN); in dwc3_remove_requests()
607 while (!list_empty(&dep->request_list)) { in dwc3_remove_requests()
608 req = next_request(&dep->request_list); in dwc3_remove_requests()
610 dwc3_gadget_giveback(dep, req, -ESHUTDOWN); in dwc3_remove_requests()
622 static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep) in __dwc3_gadget_ep_disable() argument
624 struct dwc3 *dwc = dep->dwc; in __dwc3_gadget_ep_disable()
627 dwc3_remove_requests(dwc, dep); in __dwc3_gadget_ep_disable()
630 if (dep->flags & DWC3_EP_STALL) in __dwc3_gadget_ep_disable()
631 __dwc3_gadget_ep_set_halt(dep, 0, false); in __dwc3_gadget_ep_disable()
634 reg &= ~DWC3_DALEPENA_EP(dep->number); in __dwc3_gadget_ep_disable()
637 dep->stream_capable = false; in __dwc3_gadget_ep_disable()
638 dep->endpoint.desc = NULL; in __dwc3_gadget_ep_disable()
639 dep->comp_desc = NULL; in __dwc3_gadget_ep_disable()
640 dep->type = 0; in __dwc3_gadget_ep_disable()
641 dep->flags = 0; in __dwc3_gadget_ep_disable()
664 struct dwc3_ep *dep; in dwc3_gadget_ep_enable() local
679 dep = to_dwc3_ep(ep); in dwc3_gadget_ep_enable()
680 dwc = dep->dwc; in dwc3_gadget_ep_enable()
682 if (dep->flags & DWC3_EP_ENABLED) { in dwc3_gadget_ep_enable()
684 dep->name); in dwc3_gadget_ep_enable()
690 strlcat(dep->name, "-control", sizeof(dep->name)); in dwc3_gadget_ep_enable()
693 strlcat(dep->name, "-isoc", sizeof(dep->name)); in dwc3_gadget_ep_enable()
696 strlcat(dep->name, "-bulk", sizeof(dep->name)); in dwc3_gadget_ep_enable()
699 strlcat(dep->name, "-int", sizeof(dep->name)); in dwc3_gadget_ep_enable()
706 ret = __dwc3_gadget_ep_enable(dep, desc, ep->comp_desc, false, false); in dwc3_gadget_ep_enable()
714 struct dwc3_ep *dep; in dwc3_gadget_ep_disable() local
724 dep = to_dwc3_ep(ep); in dwc3_gadget_ep_disable()
725 dwc = dep->dwc; in dwc3_gadget_ep_disable()
727 if (!(dep->flags & DWC3_EP_ENABLED)) { in dwc3_gadget_ep_disable()
729 dep->name); in dwc3_gadget_ep_disable()
733 snprintf(dep->name, sizeof(dep->name), "ep%d%s", in dwc3_gadget_ep_disable()
734 dep->number >> 1, in dwc3_gadget_ep_disable()
735 (dep->number & 1) ? "in" : "out"); in dwc3_gadget_ep_disable()
738 ret = __dwc3_gadget_ep_disable(dep); in dwc3_gadget_ep_disable()
748 struct dwc3_ep *dep = to_dwc3_ep(ep); in dwc3_gadget_ep_alloc_request() local
754 req->epnum = dep->number; in dwc3_gadget_ep_alloc_request()
755 req->dep = dep; in dwc3_gadget_ep_alloc_request()
776 static void dwc3_prepare_one_trb(struct dwc3_ep *dep, in dwc3_prepare_one_trb() argument
783 dep->name, req, (unsigned long long) dma, in dwc3_prepare_one_trb()
788 trb = &dep->trb_pool[dep->free_slot & DWC3_TRB_MASK]; in dwc3_prepare_one_trb()
793 req->trb_dma = dwc3_trb_dma_offset(dep, trb); in dwc3_prepare_one_trb()
794 req->start_slot = dep->free_slot & DWC3_TRB_MASK; in dwc3_prepare_one_trb()
797 dep->free_slot++; in dwc3_prepare_one_trb()
799 if (((dep->free_slot & DWC3_TRB_MASK) == DWC3_TRB_NUM - 1) && in dwc3_prepare_one_trb()
800 usb_endpoint_xfer_isoc(dep->endpoint.desc)) in dwc3_prepare_one_trb()
801 dep->free_slot++; in dwc3_prepare_one_trb()
807 switch (usb_endpoint_type(dep->endpoint.desc)) { in dwc3_prepare_one_trb()
834 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { in dwc3_prepare_one_trb()
844 if (usb_endpoint_xfer_bulk(dep->endpoint.desc) && dep->stream_capable) in dwc3_prepare_one_trb()
849 trace_dwc3_prepare_trb(dep, trb); in dwc3_prepare_one_trb()
861 static void dwc3_prepare_trbs(struct dwc3_ep *dep, bool starting) in dwc3_prepare_trbs() argument
871 trbs_left = (dep->busy_slot - dep->free_slot) & DWC3_TRB_MASK; in dwc3_prepare_trbs()
874 if (!usb_endpoint_xfer_isoc(dep->endpoint.desc)) { in dwc3_prepare_trbs()
875 max = DWC3_TRB_NUM - (dep->free_slot & DWC3_TRB_MASK); in dwc3_prepare_trbs()
900 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { in dwc3_prepare_trbs()
901 dep->busy_slot = 1; in dwc3_prepare_trbs()
902 dep->free_slot = 1; in dwc3_prepare_trbs()
904 dep->busy_slot = 0; in dwc3_prepare_trbs()
905 dep->free_slot = 0; in dwc3_prepare_trbs()
910 if ((trbs_left <= 1) && usb_endpoint_xfer_isoc(dep->endpoint.desc)) in dwc3_prepare_trbs()
913 list_for_each_entry_safe(req, n, &dep->request_list, list) { in dwc3_prepare_trbs()
932 if (list_empty(&dep->request_list)) in dwc3_prepare_trbs()
944 dwc3_prepare_one_trb(dep, req, dma, length, in dwc3_prepare_trbs()
962 if (list_is_last(&req->list, &dep->request_list)) in dwc3_prepare_trbs()
965 dwc3_prepare_one_trb(dep, req, dma, length, in dwc3_prepare_trbs()
974 static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep, u16 cmd_param, in __dwc3_gadget_kick_transfer() argument
979 struct dwc3 *dwc = dep->dwc; in __dwc3_gadget_kick_transfer()
983 if (start_new && (dep->flags & DWC3_EP_BUSY)) { in __dwc3_gadget_kick_transfer()
984 dwc3_trace(trace_dwc3_gadget, "%s: endpoint busy", dep->name); in __dwc3_gadget_kick_transfer()
987 dep->flags &= ~DWC3_EP_PENDING_REQUEST; in __dwc3_gadget_kick_transfer()
994 if (list_empty(&dep->req_queued)) in __dwc3_gadget_kick_transfer()
995 dwc3_prepare_trbs(dep, start_new); in __dwc3_gadget_kick_transfer()
998 req = next_request(&dep->req_queued); in __dwc3_gadget_kick_transfer()
1000 dwc3_prepare_trbs(dep, start_new); in __dwc3_gadget_kick_transfer()
1005 req = next_request(&dep->req_queued); in __dwc3_gadget_kick_transfer()
1008 dep->flags |= DWC3_EP_PENDING_REQUEST; in __dwc3_gadget_kick_transfer()
1023 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, cmd, &params); in __dwc3_gadget_kick_transfer()
1038 dep->flags |= DWC3_EP_BUSY; in __dwc3_gadget_kick_transfer()
1041 dep->resource_index = dwc3_gadget_ep_get_transfer_index(dwc, in __dwc3_gadget_kick_transfer()
1042 dep->number); in __dwc3_gadget_kick_transfer()
1043 WARN_ON_ONCE(!dep->resource_index); in __dwc3_gadget_kick_transfer()
1050 struct dwc3_ep *dep, u32 cur_uf) in __dwc3_gadget_start_isoc() argument
1054 if (list_empty(&dep->request_list)) { in __dwc3_gadget_start_isoc()
1057 dep->name); in __dwc3_gadget_start_isoc()
1058 dep->flags |= DWC3_EP_PENDING_REQUEST; in __dwc3_gadget_start_isoc()
1063 uf = cur_uf + dep->interval * 4; in __dwc3_gadget_start_isoc()
1065 __dwc3_gadget_kick_transfer(dep, uf, 1); in __dwc3_gadget_start_isoc()
1069 struct dwc3_ep *dep, const struct dwc3_event_depevt *event) in dwc3_gadget_start_isoc() argument
1073 mask = ~(dep->interval - 1); in dwc3_gadget_start_isoc()
1076 __dwc3_gadget_start_isoc(dwc, dep, cur_uf); in dwc3_gadget_start_isoc()
1079 static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req) in __dwc3_gadget_ep_queue() argument
1081 struct dwc3 *dwc = dep->dwc; in __dwc3_gadget_ep_queue()
1086 req->direction = dep->direction; in __dwc3_gadget_ep_queue()
1087 req->epnum = dep->number; in __dwc3_gadget_ep_queue()
1102 dep->direction); in __dwc3_gadget_ep_queue()
1106 list_add_tail(&req->list, &dep->request_list); in __dwc3_gadget_ep_queue()
1119 if (dep->flags & DWC3_EP_PENDING_REQUEST) { in __dwc3_gadget_ep_queue()
1126 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { in __dwc3_gadget_ep_queue()
1127 if (list_empty(&dep->req_queued)) { in __dwc3_gadget_ep_queue()
1128 dwc3_stop_active_transfer(dwc, dep->number, true); in __dwc3_gadget_ep_queue()
1129 dep->flags = DWC3_EP_ENABLED; in __dwc3_gadget_ep_queue()
1134 ret = __dwc3_gadget_kick_transfer(dep, 0, true); in __dwc3_gadget_ep_queue()
1137 dep->name); in __dwc3_gadget_ep_queue()
1146 if (usb_endpoint_xfer_isoc(dep->endpoint.desc) && in __dwc3_gadget_ep_queue()
1147 (dep->flags & DWC3_EP_BUSY) && in __dwc3_gadget_ep_queue()
1148 !(dep->flags & DWC3_EP_MISSED_ISOC)) { in __dwc3_gadget_ep_queue()
1149 WARN_ON_ONCE(!dep->resource_index); in __dwc3_gadget_ep_queue()
1150 ret = __dwc3_gadget_kick_transfer(dep, dep->resource_index, in __dwc3_gadget_ep_queue()
1154 dep->name); in __dwc3_gadget_ep_queue()
1163 if (dep->stream_capable) { in __dwc3_gadget_ep_queue()
1164 ret = __dwc3_gadget_kick_transfer(dep, 0, true); in __dwc3_gadget_ep_queue()
1167 dep->name); in __dwc3_gadget_ep_queue()
1177 struct dwc3_ep *dep = to_dwc3_ep(ep); in dwc3_gadget_ep_queue() local
1178 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_ep_queue()
1185 if (!dep->endpoint.desc) { in dwc3_gadget_ep_queue()
1192 if (WARN(req->dep != dep, "request %p belongs to '%s'\n", in dwc3_gadget_ep_queue()
1193 request, req->dep->name)) { in dwc3_gadget_ep_queue()
1200 ret = __dwc3_gadget_ep_queue(dep, req); in dwc3_gadget_ep_queue()
1214 struct dwc3_ep *dep = to_dwc3_ep(ep); in dwc3_gadget_ep_dequeue() local
1215 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_ep_dequeue()
1224 list_for_each_entry(r, &dep->request_list, list) { in dwc3_gadget_ep_dequeue()
1230 list_for_each_entry(r, &dep->req_queued, list) { in dwc3_gadget_ep_dequeue()
1236 dwc3_stop_active_transfer(dwc, dep->number, true); in dwc3_gadget_ep_dequeue()
1247 dwc3_gadget_giveback(dep, req, -ECONNRESET); in dwc3_gadget_ep_dequeue()
1255 int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value, int protocol) in __dwc3_gadget_ep_set_halt() argument
1258 struct dwc3 *dwc = dep->dwc; in __dwc3_gadget_ep_set_halt()
1261 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { in __dwc3_gadget_ep_set_halt()
1262 dev_err(dwc->dev, "%s is of Isochronous type\n", dep->name); in __dwc3_gadget_ep_set_halt()
1269 if (!protocol && ((dep->direction && dep->flags & DWC3_EP_BUSY) || in __dwc3_gadget_ep_set_halt()
1270 (!list_empty(&dep->req_queued) || in __dwc3_gadget_ep_set_halt()
1271 !list_empty(&dep->request_list)))) { in __dwc3_gadget_ep_set_halt()
1273 dep->name); in __dwc3_gadget_ep_set_halt()
1277 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, in __dwc3_gadget_ep_set_halt()
1281 dep->name); in __dwc3_gadget_ep_set_halt()
1283 dep->flags |= DWC3_EP_STALL; in __dwc3_gadget_ep_set_halt()
1285 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, in __dwc3_gadget_ep_set_halt()
1289 dep->name); in __dwc3_gadget_ep_set_halt()
1291 dep->flags &= ~(DWC3_EP_STALL | DWC3_EP_WEDGE); in __dwc3_gadget_ep_set_halt()
1299 struct dwc3_ep *dep = to_dwc3_ep(ep); in dwc3_gadget_ep_set_halt() local
1300 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_ep_set_halt()
1307 ret = __dwc3_gadget_ep_set_halt(dep, value, false); in dwc3_gadget_ep_set_halt()
1315 struct dwc3_ep *dep = to_dwc3_ep(ep); in dwc3_gadget_ep_set_wedge() local
1316 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_ep_set_wedge()
1321 dep->flags |= DWC3_EP_WEDGE; in dwc3_gadget_ep_set_wedge()
1323 if (dep->number == 0 || dep->number == 1) in dwc3_gadget_ep_set_wedge()
1326 ret = __dwc3_gadget_ep_set_halt(dep, 1, false); in dwc3_gadget_ep_set_wedge()
1566 struct dwc3_ep *dep; in dwc3_gadget_start() local
1633 dep = dwc->eps[0]; in dwc3_gadget_start()
1634 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false, in dwc3_gadget_start()
1637 dev_err(dwc->dev, "failed to enable %s\n", dep->name); in dwc3_gadget_start()
1641 dep = dwc->eps[1]; in dwc3_gadget_start()
1642 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false, in dwc3_gadget_start()
1645 dev_err(dwc->dev, "failed to enable %s\n", dep->name); in dwc3_gadget_start()
1710 struct dwc3_ep *dep; in dwc3_gadget_init_hw_endpoints() local
1716 dep = kzalloc(sizeof(*dep), GFP_KERNEL); in dwc3_gadget_init_hw_endpoints()
1717 if (!dep) in dwc3_gadget_init_hw_endpoints()
1720 dep->dwc = dwc; in dwc3_gadget_init_hw_endpoints()
1721 dep->number = epnum; in dwc3_gadget_init_hw_endpoints()
1722 dep->direction = !!direction; in dwc3_gadget_init_hw_endpoints()
1723 dwc->eps[epnum] = dep; in dwc3_gadget_init_hw_endpoints()
1725 snprintf(dep->name, sizeof(dep->name), "ep%d%s", epnum >> 1, in dwc3_gadget_init_hw_endpoints()
1728 dep->endpoint.name = dep->name; in dwc3_gadget_init_hw_endpoints()
1730 dwc3_trace(trace_dwc3_gadget, "initializing %s", dep->name); in dwc3_gadget_init_hw_endpoints()
1733 usb_ep_set_maxpacket_limit(&dep->endpoint, 512); in dwc3_gadget_init_hw_endpoints()
1734 dep->endpoint.maxburst = 1; in dwc3_gadget_init_hw_endpoints()
1735 dep->endpoint.ops = &dwc3_gadget_ep0_ops; in dwc3_gadget_init_hw_endpoints()
1737 dwc->gadget.ep0 = &dep->endpoint; in dwc3_gadget_init_hw_endpoints()
1741 usb_ep_set_maxpacket_limit(&dep->endpoint, 1024); in dwc3_gadget_init_hw_endpoints()
1742 dep->endpoint.max_streams = 15; in dwc3_gadget_init_hw_endpoints()
1743 dep->endpoint.ops = &dwc3_gadget_ep_ops; in dwc3_gadget_init_hw_endpoints()
1744 list_add_tail(&dep->endpoint.ep_list, in dwc3_gadget_init_hw_endpoints()
1747 ret = dwc3_alloc_trb_pool(dep); in dwc3_gadget_init_hw_endpoints()
1752 INIT_LIST_HEAD(&dep->request_list); in dwc3_gadget_init_hw_endpoints()
1753 INIT_LIST_HEAD(&dep->req_queued); in dwc3_gadget_init_hw_endpoints()
1784 struct dwc3_ep *dep; in dwc3_gadget_free_endpoints() local
1788 dep = dwc->eps[epnum]; in dwc3_gadget_free_endpoints()
1789 if (!dep) in dwc3_gadget_free_endpoints()
1801 dwc3_free_trb_pool(dep); in dwc3_gadget_free_endpoints()
1802 list_del(&dep->endpoint.ep_list); in dwc3_gadget_free_endpoints()
1805 kfree(dep); in dwc3_gadget_free_endpoints()
1811 static int __dwc3_cleanup_done_trbs(struct dwc3 *dwc, struct dwc3_ep *dep, in __dwc3_cleanup_done_trbs() argument
1819 trace_dwc3_complete_trb(dep, trb); in __dwc3_cleanup_done_trbs()
1831 dep->name, trb); in __dwc3_cleanup_done_trbs()
1834 if (dep->direction) { in __dwc3_cleanup_done_trbs()
1839 dep->name); in __dwc3_cleanup_done_trbs()
1855 dep->flags |= DWC3_EP_MISSED_ISOC; in __dwc3_cleanup_done_trbs()
1858 dep->name); in __dwc3_cleanup_done_trbs()
1862 dep->flags &= ~DWC3_EP_MISSED_ISOC; in __dwc3_cleanup_done_trbs()
1889 static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep, in dwc3_cleanup_done_reqs() argument
1899 req = next_request(&dep->req_queued); in dwc3_cleanup_done_reqs()
1908 usb_endpoint_xfer_isoc(dep->endpoint.desc)) in dwc3_cleanup_done_reqs()
1911 trb = &dep->trb_pool[slot]; in dwc3_cleanup_done_reqs()
1913 ret = __dwc3_cleanup_done_trbs(dwc, dep, req, trb, in dwc3_cleanup_done_reqs()
1919 dwc3_gadget_giveback(dep, req, status); in dwc3_cleanup_done_reqs()
1925 if (usb_endpoint_xfer_isoc(dep->endpoint.desc) && in dwc3_cleanup_done_reqs()
1926 list_empty(&dep->req_queued)) { in dwc3_cleanup_done_reqs()
1927 if (list_empty(&dep->request_list)) { in dwc3_cleanup_done_reqs()
1934 dep->flags = DWC3_EP_PENDING_REQUEST; in dwc3_cleanup_done_reqs()
1936 dwc3_stop_active_transfer(dwc, dep->number, true); in dwc3_cleanup_done_reqs()
1937 dep->flags = DWC3_EP_ENABLED; in dwc3_cleanup_done_reqs()
1946 struct dwc3_ep *dep, const struct dwc3_event_depevt *event) in dwc3_endpoint_transfer_complete() argument
1957 clean_busy = dwc3_cleanup_done_reqs(dwc, dep, event, status); in dwc3_endpoint_transfer_complete()
1959 usb_endpoint_xfer_isoc(dep->endpoint.desc))) in dwc3_endpoint_transfer_complete()
1960 dep->flags &= ~DWC3_EP_BUSY; in dwc3_endpoint_transfer_complete()
1971 dep = dwc->eps[i]; in dwc3_endpoint_transfer_complete()
1973 if (!(dep->flags & DWC3_EP_ENABLED)) in dwc3_endpoint_transfer_complete()
1976 if (!list_empty(&dep->req_queued)) in dwc3_endpoint_transfer_complete()
1991 struct dwc3_ep *dep; in dwc3_endpoint_interrupt() local
1994 dep = dwc->eps[epnum]; in dwc3_endpoint_interrupt()
1996 if (!(dep->flags & DWC3_EP_ENABLED)) in dwc3_endpoint_interrupt()
2006 dep->resource_index = 0; in dwc3_endpoint_interrupt()
2008 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { in dwc3_endpoint_interrupt()
2010 dep->name); in dwc3_endpoint_interrupt()
2014 dwc3_endpoint_transfer_complete(dwc, dep, event); in dwc3_endpoint_interrupt()
2017 dwc3_endpoint_transfer_complete(dwc, dep, event); in dwc3_endpoint_interrupt()
2020 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { in dwc3_endpoint_interrupt()
2021 dwc3_gadget_start_isoc(dwc, dep, event); in dwc3_endpoint_interrupt()
2026 dep->name, event->status & in dwc3_endpoint_interrupt()
2031 ret = __dwc3_gadget_kick_transfer(dep, 0, 1); in dwc3_endpoint_interrupt()
2036 dep->name); in dwc3_endpoint_interrupt()
2041 if (!usb_endpoint_xfer_bulk(dep->endpoint.desc)) { in dwc3_endpoint_interrupt()
2043 dep->name); in dwc3_endpoint_interrupt()
2061 dev_dbg(dwc->dev, "%s FIFO Overrun\n", dep->name); in dwc3_endpoint_interrupt()
2110 struct dwc3_ep *dep; in dwc3_stop_active_transfer() local
2115 dep = dwc->eps[epnum]; in dwc3_stop_active_transfer()
2117 if (!dep->resource_index) in dwc3_stop_active_transfer()
2142 cmd |= DWC3_DEPCMD_PARAM(dep->resource_index); in dwc3_stop_active_transfer()
2144 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, cmd, &params); in dwc3_stop_active_transfer()
2146 dep->resource_index = 0; in dwc3_stop_active_transfer()
2147 dep->flags &= ~DWC3_EP_BUSY; in dwc3_stop_active_transfer()
2156 struct dwc3_ep *dep; in dwc3_stop_active_transfers() local
2158 dep = dwc->eps[epnum]; in dwc3_stop_active_transfers()
2159 if (!dep) in dwc3_stop_active_transfers()
2162 if (!(dep->flags & DWC3_EP_ENABLED)) in dwc3_stop_active_transfers()
2165 dwc3_remove_requests(dwc, dep); in dwc3_stop_active_transfers()
2174 struct dwc3_ep *dep; in dwc3_clear_stall_all_ep() local
2178 dep = dwc->eps[epnum]; in dwc3_clear_stall_all_ep()
2179 if (!dep) in dwc3_clear_stall_all_ep()
2182 if (!(dep->flags & DWC3_EP_STALL)) in dwc3_clear_stall_all_ep()
2185 dep->flags &= ~DWC3_EP_STALL; in dwc3_clear_stall_all_ep()
2188 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, in dwc3_clear_stall_all_ep()
2290 struct dwc3_ep *dep; in dwc3_gadget_conndone_interrupt() local
2374 dep = dwc->eps[0]; in dwc3_gadget_conndone_interrupt()
2375 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, true, in dwc3_gadget_conndone_interrupt()
2378 dev_err(dwc->dev, "failed to enable %s\n", dep->name); in dwc3_gadget_conndone_interrupt()
2382 dep = dwc->eps[1]; in dwc3_gadget_conndone_interrupt()
2383 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, true, in dwc3_gadget_conndone_interrupt()
2386 dev_err(dwc->dev, "failed to enable %s\n", dep->name); in dwc3_gadget_conndone_interrupt()
2858 struct dwc3_ep *dep; in dwc3_gadget_resume() local
2864 dep = dwc->eps[0]; in dwc3_gadget_resume()
2865 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false, in dwc3_gadget_resume()
2870 dep = dwc->eps[1]; in dwc3_gadget_resume()
2871 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false, in dwc3_gadget_resume()