Lines Matching refs:ep

97 #define EP_MASK_SEL(ep, dir) (1 << (((ep) * 2) + dir))  argument
127 struct usb_ep ep; member
190 struct lpc32xx_ep ep[NUM_ENDPOINTS]; member
511 static void proc_ep_show(struct seq_file *s, struct lpc32xx_ep *ep) in proc_ep_show() argument
517 ep->ep.name, ep->ep.maxpacket, in proc_ep_show()
518 ep->is_in ? "in" : "out"); in proc_ep_show()
519 seq_printf(s, " type %4s", epnames[ep->eptype]); in proc_ep_show()
520 seq_printf(s, " ints: %12d", ep->totalints); in proc_ep_show()
522 if (list_empty(&ep->queue)) in proc_ep_show()
525 list_for_each_entry(req, &ep->queue, queue) { in proc_ep_show()
538 struct lpc32xx_ep *ep; in proc_udc_show() local
554 proc_ep_show(s, &udc->ep[0]); in proc_udc_show()
555 list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) in proc_udc_show()
556 proc_ep_show(s, ep); in proc_udc_show()
1036 static int udc_ep_in_req_dma(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep) in udc_ep_in_req_dma() argument
1039 u32 hwep = ep->hwep_num; in udc_ep_in_req_dma()
1041 ep->req_pending = 1; in udc_ep_in_req_dma()
1044 req = list_entry(ep->queue.next, struct lpc32xx_request, queue); in udc_ep_in_req_dma()
1053 if (req->req.length % ep->ep.maxpacket) in udc_ep_in_req_dma()
1062 static int udc_ep_out_req_dma(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep) in udc_ep_out_req_dma() argument
1065 u32 hwep = ep->hwep_num; in udc_ep_out_req_dma()
1067 ep->req_pending = 1; in udc_ep_out_req_dma()
1070 req = list_entry(ep->queue.next, struct lpc32xx_request, queue); in udc_ep_out_req_dma()
1116 struct lpc32xx_ep *ep = &udc->ep[0]; in udc_enable() local
1136 udc_realize_hwep(udc, i, ep->ep.maxpacket); in udc_enable()
1401 struct lpc32xx_ep *ep = &udc->ep[i]; in uda_usb_reset() local
1402 ep->req_pending = 0; in uda_usb_reset()
1445 struct lpc32xx_ep *ep = &udc->ep[i]; in udc_reinit() local
1448 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list); in udc_reinit()
1449 usb_ep_set_maxpacket_limit(&ep->ep, ep->maxpacket); in udc_reinit()
1450 INIT_LIST_HEAD(&ep->queue); in udc_reinit()
1451 ep->req_pending = 0; in udc_reinit()
1458 static void done(struct lpc32xx_ep *ep, struct lpc32xx_request *req, int status) in done() argument
1460 struct lpc32xx_udc *udc = ep->udc; in done()
1468 if (ep->lep) { in done()
1469 usb_gadget_unmap_request(&udc->gadget, &req->req, ep->is_in); in done()
1476 ep_dbg(ep, "%s done %p, status %d\n", ep->ep.name, req, status); in done()
1478 ep->req_pending = 0; in done()
1480 usb_gadget_giveback_request(&ep->ep, &req->req); in done()
1485 static void nuke(struct lpc32xx_ep *ep, int status) in nuke() argument
1489 while (!list_empty(&ep->queue)) { in nuke()
1490 req = list_entry(ep->queue.next, struct lpc32xx_request, queue); in nuke()
1491 done(ep, req, status); in nuke()
1495 uda_disable_hwepint(ep->udc, ep->hwep_num); in nuke()
1496 udc_disable_hwep(ep->udc, ep->hwep_num); in nuke()
1504 struct lpc32xx_ep *ep0 = &udc->ep[0]; in udc_ep0_in_req()
1520 } else if (ts > ep0->ep.maxpacket) in udc_ep0_in_req()
1521 ts = ep0->ep.maxpacket; /* Just send what we can */ in udc_ep0_in_req()
1529 if (tsend >= ep0->ep.maxpacket) in udc_ep0_in_req()
1542 struct lpc32xx_ep *ep0 = &udc->ep[0]; in udc_ep0_out_req()
1561 if (bufferspace > ep0->ep.maxpacket) in udc_ep0_out_req()
1562 bufferspace = ep0->ep.maxpacket; in udc_ep0_out_req()
1570 if (tr < ep0->ep.maxpacket) { in udc_ep0_out_req()
1594 struct lpc32xx_ep *ep = &udc->ep[i]; in stop_activity() local
1595 nuke(ep, -ESHUTDOWN); in stop_activity()
1627 struct lpc32xx_ep *ep = container_of(_ep, struct lpc32xx_ep, ep); in lpc32xx_ep_disable() local
1628 struct lpc32xx_udc *udc = ep->udc; in lpc32xx_ep_disable()
1631 if ((ep->hwep_num_base == 0) || (ep->hwep_num == 0)) in lpc32xx_ep_disable()
1635 nuke(ep, -ESHUTDOWN); in lpc32xx_ep_disable()
1638 udc_ep_dma_disable(udc, ep->hwep_num); in lpc32xx_ep_disable()
1639 writel(1 << ep->hwep_num, USBD_EOTINTCLR(udc->udp_baseaddr)); in lpc32xx_ep_disable()
1640 writel(1 << ep->hwep_num, USBD_NDDRTINTCLR(udc->udp_baseaddr)); in lpc32xx_ep_disable()
1641 writel(1 << ep->hwep_num, USBD_SYSERRTINTCLR(udc->udp_baseaddr)); in lpc32xx_ep_disable()
1642 writel(1 << ep->hwep_num, USBD_DMARCLR(udc->udp_baseaddr)); in lpc32xx_ep_disable()
1645 udc->udca_v_base[ep->hwep_num] = 0; in lpc32xx_ep_disable()
1648 uda_clear_hwepint(udc, ep->hwep_num); in lpc32xx_ep_disable()
1649 udc_unrealize_hwep(udc, ep->hwep_num); in lpc32xx_ep_disable()
1651 ep->hwep_num = 0; in lpc32xx_ep_disable()
1665 struct lpc32xx_ep *ep = container_of(_ep, struct lpc32xx_ep, ep); in lpc32xx_ep_enable() local
1666 struct lpc32xx_udc *udc = ep->udc; in lpc32xx_ep_enable()
1672 if ((!_ep) || (!ep) || (!desc) || in lpc32xx_ep_enable()
1678 if ((maxpacket == 0) || (maxpacket > ep->maxpacket)) { in lpc32xx_ep_enable()
1684 if (ep->hwep_num_base == 0) { in lpc32xx_ep_enable()
1701 if (maxpacket > ep->maxpacket) { in lpc32xx_ep_enable()
1729 ep->is_in = (desc->bEndpointAddress & USB_DIR_IN) != 0; in lpc32xx_ep_enable()
1730 ep->ep.maxpacket = maxpacket; in lpc32xx_ep_enable()
1733 if (ep->is_in) in lpc32xx_ep_enable()
1735 ep->hwep_num = ep->hwep_num_base + EP_IN; in lpc32xx_ep_enable()
1737 ep->hwep_num = ep->hwep_num_base; in lpc32xx_ep_enable()
1739 ep_dbg(ep, "EP enabled: %s, HW:%d, MP:%d IN:%d\n", ep->ep.name, in lpc32xx_ep_enable()
1740 ep->hwep_num, maxpacket, (ep->is_in == 1)); in lpc32xx_ep_enable()
1744 udc_realize_hwep(udc, ep->hwep_num, ep->ep.maxpacket); in lpc32xx_ep_enable()
1745 udc_clr_buffer_hwep(udc, ep->hwep_num); in lpc32xx_ep_enable()
1746 uda_disable_hwepint(udc, ep->hwep_num); in lpc32xx_ep_enable()
1747 udc_clrstall_hwep(udc, ep->hwep_num); in lpc32xx_ep_enable()
1750 udc_ep_dma_disable(udc, ep->hwep_num); in lpc32xx_ep_enable()
1751 writel(1 << ep->hwep_num, USBD_EOTINTCLR(udc->udp_baseaddr)); in lpc32xx_ep_enable()
1752 writel(1 << ep->hwep_num, USBD_NDDRTINTCLR(udc->udp_baseaddr)); in lpc32xx_ep_enable()
1753 writel(1 << ep->hwep_num, USBD_SYSERRTINTCLR(udc->udp_baseaddr)); in lpc32xx_ep_enable()
1754 writel(1 << ep->hwep_num, USBD_DMARCLR(udc->udp_baseaddr)); in lpc32xx_ep_enable()
1798 struct lpc32xx_ep *ep; in lpc32xx_ep_queue() local
1804 ep = container_of(_ep, struct lpc32xx_ep, ep); in lpc32xx_ep_queue()
1810 udc = ep->udc; in lpc32xx_ep_queue()
1815 if (ep->lep) { in lpc32xx_ep_queue()
1818 status = usb_gadget_map_request(&udc->gadget, _req, ep->is_in); in lpc32xx_ep_queue()
1836 if (ep->eptype == EP_ISO_TYPE) { in lpc32xx_ep_queue()
1841 if (ep->is_in) in lpc32xx_ep_queue()
1846 dd->dd_setup = DD_SETUP_PACKETLEN(ep->ep.maxpacket) | in lpc32xx_ep_queue()
1850 ep_dbg(ep, "%s queue req %p len %d buf %p (in=%d) z=%d\n", _ep->name, in lpc32xx_ep_queue()
1851 _req, _req->length, _req->buf, ep->is_in, _req->zero); in lpc32xx_ep_queue()
1860 if (list_empty(&ep->queue)) { in lpc32xx_ep_queue()
1861 list_add_tail(&req->queue, &ep->queue); in lpc32xx_ep_queue()
1863 if (ep->hwep_num_base == 0) { in lpc32xx_ep_queue()
1865 if (ep->is_in) { in lpc32xx_ep_queue()
1874 } else if (ep->is_in) { in lpc32xx_ep_queue()
1876 if (!ep->req_pending) in lpc32xx_ep_queue()
1877 udc_ep_in_req_dma(udc, ep); in lpc32xx_ep_queue()
1880 if (!ep->req_pending) in lpc32xx_ep_queue()
1881 udc_ep_out_req_dma(udc, ep); in lpc32xx_ep_queue()
1883 list_add_tail(&req->queue, &ep->queue); in lpc32xx_ep_queue()
1893 struct lpc32xx_ep *ep; in lpc32xx_ep_dequeue() local
1897 ep = container_of(_ep, struct lpc32xx_ep, ep); in lpc32xx_ep_dequeue()
1898 if (!_ep || ep->hwep_num_base == 0) in lpc32xx_ep_dequeue()
1901 spin_lock_irqsave(&ep->udc->lock, flags); in lpc32xx_ep_dequeue()
1904 list_for_each_entry(req, &ep->queue, queue) { in lpc32xx_ep_dequeue()
1909 spin_unlock_irqrestore(&ep->udc->lock, flags); in lpc32xx_ep_dequeue()
1913 done(ep, req, -ECONNRESET); in lpc32xx_ep_dequeue()
1915 spin_unlock_irqrestore(&ep->udc->lock, flags); in lpc32xx_ep_dequeue()
1923 struct lpc32xx_ep *ep = container_of(_ep, struct lpc32xx_ep, ep); in lpc32xx_ep_set_halt() local
1924 struct lpc32xx_udc *udc = ep->udc; in lpc32xx_ep_set_halt()
1927 if ((!ep) || (ep->hwep_num <= 1)) in lpc32xx_ep_set_halt()
1931 if (ep->is_in) in lpc32xx_ep_set_halt()
1938 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(ep->hwep_num), in lpc32xx_ep_set_halt()
1942 ep->wedge = 0; in lpc32xx_ep_set_halt()
1943 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(ep->hwep_num), in lpc32xx_ep_set_halt()
1955 struct lpc32xx_ep *ep = container_of(_ep, struct lpc32xx_ep, ep); in lpc32xx_ep_set_wedge() local
1957 if (!_ep || !ep->udc) in lpc32xx_ep_set_wedge()
1960 ep->wedge = 1; in lpc32xx_ep_set_wedge()
1977 void udc_send_in_zlp(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep) in udc_send_in_zlp() argument
1980 udc_clearep_getsts(udc, ep->hwep_num); in udc_send_in_zlp()
1983 udc_write_hwep(udc, ep->hwep_num, NULL, 0); in udc_send_in_zlp()
1991 void udc_handle_eps(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep) in udc_handle_eps() argument
1996 if (ep->hwep_num <= 0) in udc_handle_eps()
1999 uda_clear_hwepint(udc, ep->hwep_num); in udc_handle_eps()
2002 if (!(udc->enabled_hwepints & (1 << ep->hwep_num))) in udc_handle_eps()
2006 epstatus = udc_clearep_getsts(udc, ep->hwep_num); in udc_handle_eps()
2015 if (ep->is_in) { in udc_handle_eps()
2016 udc_send_in_zlp(udc, ep); in udc_handle_eps()
2017 uda_disable_hwepint(udc, ep->hwep_num); in udc_handle_eps()
2022 req = list_entry(ep->queue.next, struct lpc32xx_request, queue); in udc_handle_eps()
2024 done(ep, req, 0); in udc_handle_eps()
2027 if (!list_empty(&ep->queue)) { in udc_handle_eps()
2028 if (ep->is_in) in udc_handle_eps()
2029 udc_ep_in_req_dma(udc, ep); in udc_handle_eps()
2031 udc_ep_out_req_dma(udc, ep); in udc_handle_eps()
2033 ep->req_pending = 0; in udc_handle_eps()
2039 static void udc_handle_dma_ep(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep) in udc_handle_dma_ep() argument
2046 ep->totalints++; in udc_handle_dma_ep()
2049 req = list_entry(ep->queue.next, struct lpc32xx_request, queue); in udc_handle_dma_ep()
2051 ep_err(ep, "DMA interrupt on no req!\n"); in udc_handle_dma_ep()
2058 ep_warn(ep, "DMA descriptor did not retire\n"); in udc_handle_dma_ep()
2061 udc_ep_dma_disable(udc, ep->hwep_num); in udc_handle_dma_ep()
2062 writel((1 << ep->hwep_num), USBD_EOTINTCLR(udc->udp_baseaddr)); in udc_handle_dma_ep()
2063 writel((1 << ep->hwep_num), USBD_NDDRTINTCLR(udc->udp_baseaddr)); in udc_handle_dma_ep()
2067 (1 << ep->hwep_num)) { in udc_handle_dma_ep()
2068 writel((1 << ep->hwep_num), in udc_handle_dma_ep()
2070 ep_err(ep, "AHB critical error!\n"); in udc_handle_dma_ep()
2071 ep->req_pending = 0; in udc_handle_dma_ep()
2076 done(ep, req, -ECONNABORTED); in udc_handle_dma_ep()
2085 ep->req_pending = 0; in udc_handle_dma_ep()
2086 ep_err(ep, "DMA critical EP error: DD not serviced (0x%x)!\n", in udc_handle_dma_ep()
2089 done(ep, req, -ECONNABORTED); in udc_handle_dma_ep()
2094 ep->req_pending = 0; in udc_handle_dma_ep()
2095 ep_err(ep, "DMA critical EP error: EOT prior to service completion (0x%x)!\n", in udc_handle_dma_ep()
2097 done(ep, req, -ECONNABORTED); in udc_handle_dma_ep()
2108 ep->req_pending = 0; in udc_handle_dma_ep()
2109 ep_err(ep, "DMA critical EP error: System error (0x%x)!\n", in udc_handle_dma_ep()
2111 done(ep, req, -ECONNABORTED); in udc_handle_dma_ep()
2116 if (ep->eptype == EP_ISO_TYPE) { in udc_handle_dma_ep()
2117 if (ep->is_in) in udc_handle_dma_ep()
2132 if (udc_clearep_getsts(udc, ep->hwep_num) & EP_SEL_F) { in udc_handle_dma_ep()
2133 udc_clearep_getsts(udc, ep->hwep_num); in udc_handle_dma_ep()
2134 uda_enable_hwepint(udc, ep->hwep_num); in udc_handle_dma_ep()
2135 epstatus = udc_clearep_getsts(udc, ep->hwep_num); in udc_handle_dma_ep()
2140 udc_send_in_zlp(udc, ep); in udc_handle_dma_ep()
2144 done(ep, req, 0); in udc_handle_dma_ep()
2147 udc_clearep_getsts(udc, ep->hwep_num); in udc_handle_dma_ep()
2148 if (!list_empty((&ep->queue))) { in udc_handle_dma_ep()
2149 if (ep->is_in) in udc_handle_dma_ep()
2150 udc_ep_in_req_dma(udc, ep); in udc_handle_dma_ep()
2152 udc_ep_out_req_dma(udc, ep); in udc_handle_dma_ep()
2154 ep->req_pending = 0; in udc_handle_dma_ep()
2197 struct lpc32xx_ep *ep; in udc_get_status() local
2212 ep = &udc->ep[tmp]; in udc_get_status()
2217 if (!ep->is_in) in udc_get_status()
2219 } else if (ep->is_in) in udc_get_status()
2223 udc_protocol_cmd_w(udc, CMD_SEL_EP(ep->hwep_num)); in udc_get_status()
2224 tmp = udc_protocol_cmd_r(udc, DAT_SEL_EP(ep->hwep_num)); in udc_get_status()
2244 struct lpc32xx_ep *ep, *ep0 = &udc->ep[0]; in udc_handle_ep0_setup() local
2299 ep = &udc->ep[tmp]; in udc_handle_ep0_setup()
2300 tmp = ep->hwep_num; in udc_handle_ep0_setup()
2306 else if (!ep->wedge) in udc_handle_ep0_setup()
2384 struct lpc32xx_ep *ep0 = &udc->ep[0]; in udc_handle_ep0_in()
2418 struct lpc32xx_ep *ep0 = &udc->ep[0]; in udc_handle_ep0_out()
2574 .ep[0] = {
2575 .ep = {
2587 .ep[1] = {
2588 .ep = {
2600 .ep[2] = {
2601 .ep = {
2613 .ep[3] = {
2614 .ep = {
2626 .ep[4] = {
2627 .ep = {
2639 .ep[5] = {
2640 .ep = {
2652 .ep[6] = {
2653 .ep = {
2665 .ep[7] = {
2666 .ep = {
2678 .ep[8] = {
2679 .ep = {
2691 .ep[9] = {
2692 .ep = {
2704 .ep[10] = {
2705 .ep = {
2717 .ep[11] = {
2718 .ep = {
2730 .ep[12] = {
2731 .ep = {
2743 .ep[13] = {
2744 .ep = {
2756 .ep[14] = {
2757 .ep = {
2769 .ep[15] = {
2770 .ep = {
2854 if (tmp & (1 << udc->ep[i].hwep_num)) in lpc32xx_usb_hp_irq()
2855 udc_handle_eps(udc, &udc->ep[i]); in lpc32xx_usb_hp_irq()
2879 if (tmp & (1 << udc->ep[i].hwep_num)) in lpc32xx_usb_devdma_irq()
2880 udc_handle_dma_ep(udc, &udc->ep[i]); in lpc32xx_usb_devdma_irq()
3067 udc->ep[i].udc = udc; in lpc32xx_udc_probe()
3068 udc->gadget.ep0 = &udc->ep[0].ep; in lpc32xx_udc_probe()