• Home
  • Raw
  • Download

Lines Matching refs:ep

91 static void gr_dbgprint_request(const char *str, struct gr_ep *ep,  in gr_dbgprint_request()  argument
94 int buflen = ep->is_in ? req->req.length : req->req.actual; in gr_dbgprint_request()
98 dev_dbg(ep->dev->dev, "%s: 0x%p, %d bytes data%s:\n", str, req, buflen, in gr_dbgprint_request()
112 static void gr_dbgprint_request(const char *str, struct gr_ep *ep, in gr_dbgprint_request() argument
125 static void gr_seq_ep_show(struct seq_file *seq, struct gr_ep *ep) in gr_seq_ep_show() argument
127 u32 epctrl = gr_read32(&ep->regs->epctrl); in gr_seq_ep_show()
128 u32 epstat = gr_read32(&ep->regs->epstat); in gr_seq_ep_show()
132 seq_printf(seq, "%s:\n", ep->ep.name); in gr_seq_ep_show()
137 seq_printf(seq, " dma_start = %d\n", ep->dma_start); in gr_seq_ep_show()
138 seq_printf(seq, " stopped = %d\n", ep->stopped); in gr_seq_ep_show()
139 seq_printf(seq, " wedged = %d\n", ep->wedged); in gr_seq_ep_show()
140 seq_printf(seq, " callback = %d\n", ep->callback); in gr_seq_ep_show()
141 seq_printf(seq, " maxpacket = %d\n", ep->ep.maxpacket); in gr_seq_ep_show()
142 seq_printf(seq, " maxpacket_limit = %d\n", ep->ep.maxpacket_limit); in gr_seq_ep_show()
143 seq_printf(seq, " bytes_per_buffer = %d\n", ep->bytes_per_buffer); in gr_seq_ep_show()
157 if (list_empty(&ep->queue)) { in gr_seq_ep_show()
163 list_for_each_entry(req, &ep->queue, queue) { in gr_seq_ep_show()
187 struct gr_ep *ep; in gr_dfs_show() local
200 list_for_each_entry(ep, &dev->ep_list, ep_list) in gr_dfs_show()
201 gr_seq_ep_show(seq, ep); in gr_dfs_show()
231 static struct gr_dma_desc *gr_alloc_dma_desc(struct gr_ep *ep, gfp_t gfp_flags) in gr_alloc_dma_desc() argument
236 dma_desc = dma_pool_zalloc(ep->dev->desc_pool, gfp_flags, &paddr); in gr_alloc_dma_desc()
238 dev_err(ep->dev->dev, "Could not allocate from DMA pool\n"); in gr_alloc_dma_desc()
282 static void gr_finish_request(struct gr_ep *ep, struct gr_request *req, in gr_finish_request() argument
296 dev = ep->dev; in gr_finish_request()
297 usb_gadget_unmap_request(&dev->gadget, &req->req, ep->is_in); in gr_finish_request()
300 if (ep->is_in) { /* For OUT, req->req.actual gets updated bit by bit */ in gr_finish_request()
310 memcpy(buftail, ep->tailbuf, req->oddlen); in gr_finish_request()
314 dev_dbg(ep->dev->dev, "Overflow for ep %s\n", in gr_finish_request()
315 ep->ep.name); in gr_finish_request()
316 gr_dbgprint_request("OVFL", ep, req); in gr_finish_request()
322 if (ep->is_in) in gr_finish_request()
323 gr_dbgprint_request("SENT", ep, req); in gr_finish_request()
325 gr_dbgprint_request("RECV", ep, req); in gr_finish_request()
329 ep->callback = 1; in gr_finish_request()
339 usb_gadget_giveback_request(&ep->ep, &req->req); in gr_finish_request()
343 ep->callback = 0; in gr_finish_request()
364 static void gr_start_dma(struct gr_ep *ep) in gr_start_dma() argument
369 if (list_empty(&ep->queue)) { in gr_start_dma()
370 ep->dma_start = 0; in gr_start_dma()
374 req = list_first_entry(&ep->queue, struct gr_request, queue); in gr_start_dma()
385 if (!ep->is_in && req->oddlen) in gr_start_dma()
386 req->last_desc->data = ep->tailbuf_paddr; in gr_start_dma()
391 gr_write32(&ep->regs->dmaaddr, req->curr_desc->paddr); in gr_start_dma()
394 dmactrl = gr_read32(&ep->regs->dmactrl); in gr_start_dma()
395 gr_write32(&ep->regs->dmactrl, dmactrl | GR_DMACTRL_DA); in gr_start_dma()
397 ep->dma_start = 1; in gr_start_dma()
406 static void gr_dma_advance(struct gr_ep *ep, int status) in gr_dma_advance() argument
410 req = list_first_entry(&ep->queue, struct gr_request, queue); in gr_dma_advance()
411 gr_finish_request(ep, req, status); in gr_dma_advance()
412 gr_start_dma(ep); /* Regardless of ep->dma_start */ in gr_dma_advance()
421 static void gr_abort_dma(struct gr_ep *ep) in gr_abort_dma() argument
425 dmactrl = gr_read32(&ep->regs->dmactrl); in gr_abort_dma()
426 gr_write32(&ep->regs->dmactrl, dmactrl | GR_DMACTRL_AD); in gr_abort_dma()
436 static int gr_add_dma_desc(struct gr_ep *ep, struct gr_request *req, in gr_add_dma_desc() argument
441 desc = gr_alloc_dma_desc(ep, gfp_flags); in gr_add_dma_desc()
446 if (ep->is_in) in gr_add_dma_desc()
475 static int gr_setup_out_desc_list(struct gr_ep *ep, struct gr_request *req, in gr_setup_out_desc_list() argument
487 u16 size = min(bytes_left, ep->bytes_per_buffer); in gr_setup_out_desc_list()
489 if (size < ep->bytes_per_buffer) { in gr_setup_out_desc_list()
495 ret = gr_add_dma_desc(ep, req, start, size, gfp_flags); in gr_setup_out_desc_list()
508 gr_free_dma_desc_chain(ep->dev, req); in gr_setup_out_desc_list()
528 static int gr_setup_in_desc_list(struct gr_ep *ep, struct gr_request *req, in gr_setup_in_desc_list() argument
540 u16 size = min(bytes_left, ep->bytes_per_buffer); in gr_setup_in_desc_list()
542 ret = gr_add_dma_desc(ep, req, start, size, gfp_flags); in gr_setup_in_desc_list()
555 if (req->req.zero && (req->req.length % ep->ep.maxpacket == 0)) { in gr_setup_in_desc_list()
556 ret = gr_add_dma_desc(ep, req, 0, 0, gfp_flags); in gr_setup_in_desc_list()
570 gr_free_dma_desc_chain(ep->dev, req); in gr_setup_in_desc_list()
576 static int gr_queue(struct gr_ep *ep, struct gr_request *req, gfp_t gfp_flags) in gr_queue() argument
578 struct gr_udc *dev = ep->dev; in gr_queue()
581 if (unlikely(!ep->ep.desc && ep->num != 0)) { in gr_queue()
582 dev_err(dev->dev, "No ep descriptor for %s\n", ep->ep.name); in gr_queue()
589 ep->ep.name, req->req.buf, list_empty(&req->queue)); in gr_queue()
605 ret = usb_gadget_map_request(&dev->gadget, &req->req, ep->is_in); in gr_queue()
611 if (ep->is_in) in gr_queue()
612 ret = gr_setup_in_desc_list(ep, req, gfp_flags); in gr_queue()
614 ret = gr_setup_out_desc_list(ep, req, gfp_flags); in gr_queue()
620 list_add_tail(&req->queue, &ep->queue); in gr_queue()
623 if (!ep->dma_start && likely(!ep->stopped)) in gr_queue()
624 gr_start_dma(ep); in gr_queue()
634 static inline int gr_queue_int(struct gr_ep *ep, struct gr_request *req, in gr_queue_int() argument
637 if (ep->is_in) in gr_queue_int()
638 gr_dbgprint_request("RESP", ep, req); in gr_queue_int()
640 return gr_queue(ep, req, gfp_flags); in gr_queue_int()
651 static void gr_ep_nuke(struct gr_ep *ep) in gr_ep_nuke() argument
655 ep->stopped = 1; in gr_ep_nuke()
656 ep->dma_start = 0; in gr_ep_nuke()
657 gr_abort_dma(ep); in gr_ep_nuke()
659 while (!list_empty(&ep->queue)) { in gr_ep_nuke()
660 req = list_first_entry(&ep->queue, struct gr_request, queue); in gr_ep_nuke()
661 gr_finish_request(ep, req, -ESHUTDOWN); in gr_ep_nuke()
670 static void gr_ep_reset(struct gr_ep *ep) in gr_ep_reset() argument
672 gr_write32(&ep->regs->epctrl, 0); in gr_ep_reset()
673 gr_write32(&ep->regs->dmactrl, 0); in gr_ep_reset()
675 ep->ep.maxpacket = MAX_CTRL_PL_SIZE; in gr_ep_reset()
676 ep->ep.desc = NULL; in gr_ep_reset()
677 ep->stopped = 1; in gr_ep_reset()
678 ep->dma_start = 0; in gr_ep_reset()
703 static int gr_ep_halt_wedge(struct gr_ep *ep, int halt, int wedge, int fromhost) in gr_ep_halt_wedge() argument
708 if (ep->num && !ep->ep.desc) in gr_ep_halt_wedge()
711 if (ep->num && ep->ep.desc->bmAttributes == USB_ENDPOINT_XFER_ISOC) in gr_ep_halt_wedge()
715 if (!ep->num) { in gr_ep_halt_wedge()
718 gr_control_stall(ep->dev); in gr_ep_halt_wedge()
719 dev_dbg(ep->dev->dev, "EP: stall ep0\n"); in gr_ep_halt_wedge()
725 dev_dbg(ep->dev->dev, "EP: %s halt %s\n", in gr_ep_halt_wedge()
726 (halt ? (wedge ? "wedge" : "set") : "clear"), ep->ep.name); in gr_ep_halt_wedge()
728 epctrl = gr_read32(&ep->regs->epctrl); in gr_ep_halt_wedge()
731 gr_write32(&ep->regs->epctrl, epctrl | GR_EPCTRL_EH); in gr_ep_halt_wedge()
732 ep->stopped = 1; in gr_ep_halt_wedge()
734 ep->wedged = 1; in gr_ep_halt_wedge()
736 gr_write32(&ep->regs->epctrl, epctrl & ~GR_EPCTRL_EH); in gr_ep_halt_wedge()
737 ep->stopped = 0; in gr_ep_halt_wedge()
738 ep->wedged = 0; in gr_ep_halt_wedge()
741 if (!ep->dma_start) in gr_ep_halt_wedge()
742 gr_start_dma(ep); in gr_ep_halt_wedge()
776 struct gr_ep *ep; in gr_stop_activity() local
778 list_for_each_entry(ep, &dev->ep_list, ep_list) in gr_stop_activity()
779 gr_ep_nuke(ep); in gr_stop_activity()
793 struct gr_ep *ep; in gr_ep0_testmode_complete() local
797 ep = container_of(_ep, struct gr_ep, ep); in gr_ep0_testmode_complete()
798 dev = ep->dev; in gr_ep0_testmode_complete()
820 void (*complete)(struct usb_ep *ep, in gr_ep0_respond() argument
981 struct gr_ep *ep; in gr_endpoint_request() local
993 ep = (is_in ? &dev->epi[epnum] : &dev->epo[epnum]); in gr_endpoint_request()
997 halted = gr_read32(&ep->regs->epctrl) & GR_EPCTRL_EH; in gr_endpoint_request()
1003 status = gr_ep_halt_wedge(ep, 1, 0, 1); in gr_endpoint_request()
1013 if (ep->wedged) in gr_endpoint_request()
1015 status = gr_ep_halt_wedge(ep, 0, 0, 1); in gr_endpoint_request()
1236 static int gr_handle_in_ep(struct gr_ep *ep) in gr_handle_in_ep() argument
1240 req = list_first_entry(&ep->queue, struct gr_request, queue); in gr_handle_in_ep()
1247 if (gr_read32(&ep->regs->epstat) & (GR_EPSTAT_B1 | GR_EPSTAT_B0)) in gr_handle_in_ep()
1251 gr_dma_advance(ep, 0); in gr_handle_in_ep()
1261 static int gr_handle_out_ep(struct gr_ep *ep) in gr_handle_out_ep() argument
1267 struct gr_udc *dev = ep->dev; in gr_handle_out_ep()
1269 req = list_first_entry(&ep->queue, struct gr_request, queue); in gr_handle_out_ep()
1283 if (len < ep->ep.maxpacket || req->req.actual >= req->req.length) { in gr_handle_out_ep()
1286 if ((ep == &dev->epo[0]) && (dev->ep0state == GR_EP0_OSTATUS)) { in gr_handle_out_ep()
1297 gr_dma_advance(ep, 0); in gr_handle_out_ep()
1303 ep_dmactrl = gr_read32(&ep->regs->dmactrl); in gr_handle_out_ep()
1304 gr_write32(&ep->regs->dmactrl, ep_dmactrl | GR_DMACTRL_DA); in gr_handle_out_ep()
1398 struct gr_ep *ep; in gr_irq_handler() local
1414 ep = &dev->epi[i]; in gr_irq_handler()
1415 if (!ep->stopped && !ep->callback && !list_empty(&ep->queue)) in gr_irq_handler()
1416 handled = gr_handle_in_ep(ep) || handled; in gr_irq_handler()
1421 ep = &dev->epo[i]; in gr_irq_handler()
1422 if (!ep->stopped && !ep->callback && !list_empty(&ep->queue)) in gr_irq_handler()
1423 handled = gr_handle_out_ep(ep) || handled; in gr_irq_handler()
1434 list_for_each_entry(ep, &dev->ep_list, ep_list) { in gr_irq_handler()
1435 if (gr_read32(&ep->regs->dmactrl) & GR_DMACTRL_AE) { in gr_irq_handler()
1438 ep->ep.name); in gr_irq_handler()
1469 struct gr_ep *ep; in gr_ep_enable() local
1476 ep = container_of(_ep, struct gr_ep, ep); in gr_ep_enable()
1480 dev = ep->dev; in gr_ep_enable()
1483 if (ep == &dev->epo[0] || ep == &dev->epi[0]) in gr_ep_enable()
1490 epctrl = gr_read32(&ep->regs->epctrl); in gr_ep_enable()
1495 if (!ep->is_in != !usb_endpoint_dir_in(desc)) in gr_ep_enable()
1499 if ((!ep->is_in && ep->num >= dev->nepo) || in gr_ep_enable()
1500 (ep->is_in && ep->num >= dev->nepi)) in gr_ep_enable()
1513 ep->ep.name); in gr_ep_enable()
1540 } else if (max > ep->ep.maxpacket_limit) { in gr_ep_enable()
1542 max, ep->ep.maxpacket_limit); in gr_ep_enable()
1546 spin_lock(&ep->dev->lock); in gr_ep_enable()
1548 if (!ep->stopped) { in gr_ep_enable()
1549 spin_unlock(&ep->dev->lock); in gr_ep_enable()
1553 ep->stopped = 0; in gr_ep_enable()
1554 ep->wedged = 0; in gr_ep_enable()
1555 ep->ep.desc = desc; in gr_ep_enable()
1556 ep->ep.maxpacket = max; in gr_ep_enable()
1557 ep->dma_start = 0; in gr_ep_enable()
1565 ep->bytes_per_buffer = (nt + 1) * max; in gr_ep_enable()
1566 } else if (ep->is_in) { in gr_ep_enable()
1572 ep->bytes_per_buffer = (buffer_size / max) * max; in gr_ep_enable()
1578 ep->bytes_per_buffer = max; in gr_ep_enable()
1585 if (ep->is_in) in gr_ep_enable()
1587 gr_write32(&ep->regs->epctrl, epctrl); in gr_ep_enable()
1589 gr_write32(&ep->regs->dmactrl, GR_DMACTRL_IE | GR_DMACTRL_AI); in gr_ep_enable()
1591 spin_unlock(&ep->dev->lock); in gr_ep_enable()
1593 dev_dbg(ep->dev->dev, "EP: %s enabled - %s with %d bytes/buffer\n", in gr_ep_enable()
1594 ep->ep.name, gr_modestring[mode], ep->bytes_per_buffer); in gr_ep_enable()
1601 struct gr_ep *ep; in gr_ep_disable() local
1605 ep = container_of(_ep, struct gr_ep, ep); in gr_ep_disable()
1606 if (!_ep || !ep->ep.desc) in gr_ep_disable()
1609 dev = ep->dev; in gr_ep_disable()
1612 if (ep == &dev->epo[0] || ep == &dev->epi[0]) in gr_ep_disable()
1618 dev_dbg(ep->dev->dev, "EP: disable %s\n", ep->ep.name); in gr_ep_disable()
1622 gr_ep_nuke(ep); in gr_ep_disable()
1623 gr_ep_reset(ep); in gr_ep_disable()
1624 ep->ep.desc = NULL; in gr_ep_disable()
1654 struct gr_ep *ep; in gr_queue_ext() local
1662 ep = container_of(_ep, struct gr_ep, ep); in gr_queue_ext()
1664 dev = ep->dev; in gr_queue_ext()
1666 spin_lock(&ep->dev->lock); in gr_queue_ext()
1674 if ((ep == &dev->epi[0]) && (dev->ep0state == GR_EP0_ODATA)) { in gr_queue_ext()
1675 ep = &dev->epo[0]; in gr_queue_ext()
1676 ep->ep.driver_data = dev->epi[0].ep.driver_data; in gr_queue_ext()
1679 if (ep->is_in) in gr_queue_ext()
1680 gr_dbgprint_request("EXTERN", ep, req); in gr_queue_ext()
1682 ret = gr_queue(ep, req, GFP_ATOMIC); in gr_queue_ext()
1684 spin_unlock(&ep->dev->lock); in gr_queue_ext()
1693 struct gr_ep *ep; in gr_dequeue() local
1698 ep = container_of(_ep, struct gr_ep, ep); in gr_dequeue()
1699 if (!_ep || !_req || (!ep->ep.desc && ep->num != 0)) in gr_dequeue()
1701 dev = ep->dev; in gr_dequeue()
1712 list_for_each_entry(req, &ep->queue, queue) { in gr_dequeue()
1721 if (list_first_entry(&ep->queue, struct gr_request, queue) == req) { in gr_dequeue()
1723 gr_abort_dma(ep); in gr_dequeue()
1724 if (ep->stopped) in gr_dequeue()
1725 gr_finish_request(ep, req, -ECONNRESET); in gr_dequeue()
1727 gr_dma_advance(ep, -ECONNRESET); in gr_dequeue()
1730 gr_finish_request(ep, req, -ECONNRESET); in gr_dequeue()
1745 struct gr_ep *ep; in gr_set_halt_wedge() local
1749 ep = container_of(_ep, struct gr_ep, ep); in gr_set_halt_wedge()
1751 spin_lock(&ep->dev->lock); in gr_set_halt_wedge()
1754 if (halt && ep->is_in && !list_empty(&ep->queue)) { in gr_set_halt_wedge()
1759 ret = gr_ep_halt_wedge(ep, halt, wedge, 0); in gr_set_halt_wedge()
1762 spin_unlock(&ep->dev->lock); in gr_set_halt_wedge()
1785 struct gr_ep *ep; in gr_fifo_status() local
1791 ep = container_of(_ep, struct gr_ep, ep); in gr_fifo_status()
1793 epstat = gr_read32(&ep->regs->epstat); in gr_fifo_status()
1807 struct gr_ep *ep; in gr_fifo_flush() local
1812 ep = container_of(_ep, struct gr_ep, ep); in gr_fifo_flush()
1813 dev_vdbg(ep->dev->dev, "EP: flush fifo %s\n", ep->ep.name); in gr_fifo_flush()
1815 spin_lock(&ep->dev->lock); in gr_fifo_flush()
1817 epctrl = gr_read32(&ep->regs->epctrl); in gr_fifo_flush()
1819 gr_write32(&ep->regs->epctrl, epctrl); in gr_fifo_flush()
1821 spin_unlock(&ep->dev->lock); in gr_fifo_flush()
1959 struct gr_ep *ep; in gr_ep_init() local
1965 ep = &dev->epi[num]; in gr_ep_init()
1966 ep->ep.name = inames[num]; in gr_ep_init()
1967 ep->regs = &dev->regs->epi[num]; in gr_ep_init()
1969 ep = &dev->epo[num]; in gr_ep_init()
1970 ep->ep.name = onames[num]; in gr_ep_init()
1971 ep->regs = &dev->regs->epo[num]; in gr_ep_init()
1974 gr_ep_reset(ep); in gr_ep_init()
1975 ep->num = num; in gr_ep_init()
1976 ep->is_in = is_in; in gr_ep_init()
1977 ep->dev = dev; in gr_ep_init()
1978 ep->ep.ops = &gr_ep_ops; in gr_ep_init()
1979 INIT_LIST_HEAD(&ep->queue); in gr_ep_init()
1982 _req = gr_alloc_request(&ep->ep, GFP_ATOMIC); in gr_ep_init()
1988 gr_free_request(&ep->ep, _req); in gr_ep_init()
2001 usb_ep_set_maxpacket_limit(&ep->ep, MAX_CTRL_PL_SIZE); in gr_ep_init()
2002 ep->bytes_per_buffer = MAX_CTRL_PL_SIZE; in gr_ep_init()
2004 ep->ep.caps.type_control = true; in gr_ep_init()
2006 usb_ep_set_maxpacket_limit(&ep->ep, (u16)maxplimit); in gr_ep_init()
2007 list_add_tail(&ep->ep.ep_list, &dev->gadget.ep_list); in gr_ep_init()
2009 ep->ep.caps.type_iso = true; in gr_ep_init()
2010 ep->ep.caps.type_bulk = true; in gr_ep_init()
2011 ep->ep.caps.type_int = true; in gr_ep_init()
2013 list_add_tail(&ep->ep_list, &dev->ep_list); in gr_ep_init()
2016 ep->ep.caps.dir_in = true; in gr_ep_init()
2018 ep->ep.caps.dir_out = true; in gr_ep_init()
2020 ep->tailbuf = dma_alloc_coherent(dev->dev, ep->ep.maxpacket_limit, in gr_ep_init()
2021 &ep->tailbuf_paddr, GFP_ATOMIC); in gr_ep_init()
2022 if (!ep->tailbuf) in gr_ep_init()
2042 dev->gadget.ep0 = &dev->epi[0].ep; in gr_udc_init()
2079 struct gr_ep *ep; in gr_ep_remove() local
2082 ep = &dev->epi[num]; in gr_ep_remove()
2084 ep = &dev->epo[num]; in gr_ep_remove()
2086 if (ep->tailbuf) in gr_ep_remove()
2087 dma_free_coherent(dev->dev, ep->ep.maxpacket_limit, in gr_ep_remove()
2088 ep->tailbuf, ep->tailbuf_paddr); in gr_ep_remove()
2105 gr_free_request(&dev->epi[0].ep, &dev->ep0reqi->req); in gr_remove()
2106 gr_free_request(&dev->epo[0].ep, &dev->ep0reqo->req); in gr_remove()