Lines Matching refs:ep
109 static void proc_ep_show(struct seq_file *s, struct at91_ep *ep) in proc_ep_show() argument
118 struct at91_udc *udc = ep->udc; in proc_ep_show()
122 csr = __raw_readl(ep->creg); in proc_ep_show()
128 ep->ep.name, ep->ep.maxpacket, in proc_ep_show()
129 ep->is_in ? "in" : "out", in proc_ep_show()
130 ep->is_iso ? " iso" : "", in proc_ep_show()
131 ep->is_pingpong in proc_ep_show()
132 ? (ep->fifo_bank ? "pong" : "ping") in proc_ep_show()
134 ep->stopped ? " stopped" : ""); in proc_ep_show()
154 if (list_empty (&ep->queue)) in proc_ep_show()
157 else list_for_each_entry (req, &ep->queue, queue) { in proc_ep_show()
189 struct at91_ep *ep; in proc_udc_show() local
232 proc_ep_show(s, &udc->ep[0]); in proc_udc_show()
233 list_for_each_entry (ep, &udc->gadget.ep_list, ep.ep_list) { in proc_udc_show()
234 if (ep->ep.desc) in proc_udc_show()
235 proc_ep_show(s, ep); in proc_udc_show()
275 static void done(struct at91_ep *ep, struct at91_request *req, int status) in done() argument
277 unsigned stopped = ep->stopped; in done()
278 struct at91_udc *udc = ep->udc; in done()
286 VDBG("%s done %p, status %d\n", ep->ep.name, req, status); in done()
288 ep->stopped = 1; in done()
290 usb_gadget_giveback_request(&ep->ep, &req->req); in done()
292 ep->stopped = stopped; in done()
295 if (list_empty(&ep->queue) && ep->int_mask != (1 << 0)) in done()
296 at91_udp_write(udc, AT91_UDP_IDR, ep->int_mask); in done()
326 static int read_fifo (struct at91_ep *ep, struct at91_request *req) in read_fifo() argument
328 u32 __iomem *creg = ep->creg; in read_fifo()
329 u8 __iomem *dreg = ep->creg + (AT91_UDP_FDR(0) - AT91_UDP_CSR(0)); in read_fifo()
347 if (count > ep->ep.maxpacket) in read_fifo()
348 count = ep->ep.maxpacket; in read_fifo()
350 DBG("%s buffer overflow\n", ep->ep.name); in read_fifo()
358 if (ep->is_pingpong) { in read_fifo()
359 if (ep->fifo_bank == 0) { in read_fifo()
361 ep->fifo_bank = 1; in read_fifo()
364 ep->fifo_bank = 0; in read_fifo()
371 is_done = (count < ep->ep.maxpacket); in read_fifo()
375 PACKET("%s %p out/%d%s\n", ep->ep.name, &req->req, count, in read_fifo()
383 done(ep, req, 0); in read_fifo()
384 else if (ep->is_pingpong) { in read_fifo()
401 static int write_fifo(struct at91_ep *ep, struct at91_request *req) in write_fifo() argument
403 u32 __iomem *creg = ep->creg; in write_fifo()
405 u8 __iomem *dreg = ep->creg + (AT91_UDP_FDR(0) - AT91_UDP_CSR(0)); in write_fifo()
435 if (ep->ep.maxpacket < total) { in write_fifo()
436 count = ep->ep.maxpacket; in write_fifo()
440 is_last = (count < ep->ep.maxpacket) || !req->req.zero; in write_fifo()
462 PACKET("%s %p in/%d%s\n", ep->ep.name, &req->req, count, in write_fifo()
465 done(ep, req, 0); in write_fifo()
469 static void nuke(struct at91_ep *ep, int status) in nuke() argument
474 ep->stopped = 1; in nuke()
475 if (list_empty(&ep->queue)) in nuke()
478 VDBG("%s %s\n", __func__, ep->ep.name); in nuke()
479 while (!list_empty(&ep->queue)) { in nuke()
480 req = list_entry(ep->queue.next, struct at91_request, queue); in nuke()
481 done(ep, req, status); in nuke()
490 struct at91_ep *ep = container_of(_ep, struct at91_ep, ep); in at91_ep_enable() local
496 if (!_ep || !ep in at91_ep_enable()
500 || maxpacket > ep->maxpacket) { in at91_ep_enable()
505 udc = ep->udc; in at91_ep_enable()
532 if (!ep->is_pingpong) { in at91_ep_enable()
543 ep->is_in = usb_endpoint_dir_in(desc); in at91_ep_enable()
544 ep->is_iso = (tmp == USB_ENDPOINT_XFER_ISOC); in at91_ep_enable()
545 ep->stopped = 0; in at91_ep_enable()
546 if (ep->is_in) in at91_ep_enable()
550 __raw_writel(tmp, ep->creg); in at91_ep_enable()
552 ep->ep.maxpacket = maxpacket; in at91_ep_enable()
558 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask); in at91_ep_enable()
567 struct at91_ep *ep = container_of(_ep, struct at91_ep, ep); in at91_ep_disable() local
568 struct at91_udc *udc = ep->udc; in at91_ep_disable()
571 if (ep == &ep->udc->ep[0]) in at91_ep_disable()
576 nuke(ep, -ESHUTDOWN); in at91_ep_disable()
579 ep->ep.desc = NULL; in at91_ep_disable()
580 ep->ep.maxpacket = ep->maxpacket; in at91_ep_disable()
583 if (ep->udc->clocked) { in at91_ep_disable()
584 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask); in at91_ep_disable()
586 __raw_writel(0, ep->creg); in at91_ep_disable()
624 struct at91_ep *ep; in at91_ep_queue() local
630 ep = container_of(_ep, struct at91_ep, ep); in at91_ep_queue()
638 if (!_ep || (!ep->ep.desc && ep->ep.name != ep0name)) { in at91_ep_queue()
643 udc = ep->udc; in at91_ep_queue()
656 if (list_empty(&ep->queue) && !ep->stopped) { in at91_ep_queue()
667 is_ep0 = (ep->ep.name == ep0name); in at91_ep_queue()
690 tmp = __raw_readl(ep->creg); in at91_ep_queue()
693 __raw_writel(tmp, ep->creg); in at91_ep_queue()
699 if (ep->is_in) in at91_ep_queue()
700 status = write_fifo(ep, req); in at91_ep_queue()
702 status = read_fifo(ep, req); in at91_ep_queue()
712 list_add_tail (&req->queue, &ep->queue); in at91_ep_queue()
713 at91_udp_write(udc, AT91_UDP_IER, ep->int_mask); in at91_ep_queue()
722 struct at91_ep *ep; in at91_ep_dequeue() local
727 ep = container_of(_ep, struct at91_ep, ep); in at91_ep_dequeue()
728 if (!_ep || ep->ep.name == ep0name) in at91_ep_dequeue()
731 udc = ep->udc; in at91_ep_dequeue()
736 list_for_each_entry (req, &ep->queue, queue) { in at91_ep_dequeue()
745 done(ep, req, -ECONNRESET); in at91_ep_dequeue()
752 struct at91_ep *ep = container_of(_ep, struct at91_ep, ep); in at91_ep_set_halt() local
753 struct at91_udc *udc = ep->udc; in at91_ep_set_halt()
759 if (!_ep || ep->is_iso || !ep->udc->clocked) in at91_ep_set_halt()
762 creg = ep->creg; in at91_ep_set_halt()
772 if (ep->is_in && (!list_empty(&ep->queue) || (csr >> 16) != 0)) in at91_ep_set_halt()
779 VDBG("halt %s\n", ep->ep.name); in at91_ep_set_halt()
781 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask); in at91_ep_set_halt()
850 struct at91_ep *ep = &udc->ep[i]; in udc_reinit() local
853 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list); in udc_reinit()
854 ep->ep.desc = NULL; in udc_reinit()
855 ep->stopped = 0; in udc_reinit()
856 ep->fifo_bank = 0; in udc_reinit()
857 usb_ep_set_maxpacket_limit(&ep->ep, ep->maxpacket); in udc_reinit()
858 ep->creg = (void __iomem *) udc->udp_baseaddr + AT91_UDP_CSR(i); in udc_reinit()
860 INIT_LIST_HEAD(&ep->queue); in udc_reinit()
875 struct at91_ep *ep = &udc->ep[i]; in reset_gadget() local
877 ep->stopped = 1; in reset_gadget()
878 nuke(ep, -ESHUTDOWN); in reset_gadget()
900 struct at91_ep *ep = &udc->ep[i]; in stop_activity() local
901 ep->stopped = 1; in stop_activity()
902 nuke(ep, -ESHUTDOWN); in stop_activity()
1020 static int handle_ep(struct at91_ep *ep) in handle_ep() argument
1023 u32 __iomem *creg = ep->creg; in handle_ep()
1026 if (!list_empty(&ep->queue)) in handle_ep()
1027 req = list_entry(ep->queue.next, in handle_ep()
1032 if (ep->is_in) { in handle_ep()
1039 return write_fifo(ep, req); in handle_ep()
1044 if (ep->is_iso && req) in handle_ep()
1052 return read_fifo(ep, req); in handle_ep()
1062 static void handle_setup(struct at91_udc *udc, struct at91_ep *ep, u32 csr) in handle_setup() argument
1064 u32 __iomem *creg = ep->creg; in handle_setup()
1065 u8 __iomem *dreg = ep->creg + (AT91_UDP_FDR(0) - AT91_UDP_CSR(0)); in handle_setup()
1078 ep->is_in = 1; in handle_setup()
1081 ep->is_in = 0; in handle_setup()
1093 ep->stopped = 0; in handle_setup()
1191 ep = &udc->ep[tmp]; in handle_setup()
1192 if (tmp >= NUM_ENDPOINTS || (tmp && !ep->ep.desc)) in handle_setup()
1197 if (!ep->is_in) in handle_setup()
1199 } else if (ep->is_in) in handle_setup()
1202 PACKET("get %s status\n", ep->ep.name); in handle_setup()
1203 if (__raw_readl(ep->creg) & AT91_UDP_FORCESTALL) in handle_setup()
1214 ep = &udc->ep[tmp]; in handle_setup()
1217 if (!ep->ep.desc || ep->is_iso) in handle_setup()
1220 if (!ep->is_in) in handle_setup()
1222 } else if (ep->is_in) in handle_setup()
1225 tmp = __raw_readl(ep->creg); in handle_setup()
1228 __raw_writel(tmp, ep->creg); in handle_setup()
1233 ep = &udc->ep[tmp]; in handle_setup()
1238 if (!ep->ep.desc || ep->is_iso) in handle_setup()
1241 if (!ep->is_in) in handle_setup()
1243 } else if (ep->is_in) in handle_setup()
1246 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask); in handle_setup()
1248 tmp = __raw_readl(ep->creg); in handle_setup()
1251 __raw_writel(tmp, ep->creg); in handle_setup()
1252 if (!list_empty(&ep->queue)) in handle_setup()
1253 handle_ep(ep); in handle_setup()
1290 struct at91_ep *ep0 = &udc->ep[0]; in handle_ep0()
1505 struct at91_ep *ep = &udc->ep[1]; in at91_udc_irq() local
1512 handle_ep(ep); in at91_udc_irq()
1513 ep++; in at91_udc_irq()
1614 struct at91_ep *ep; in at91rm9200_udc_init() local
1619 ep = &udc->ep[i]; in at91rm9200_udc_init()
1624 ep->maxpacket = 8; in at91rm9200_udc_init()
1627 ep->maxpacket = 64; in at91rm9200_udc_init()
1630 ep->maxpacket = 256; in at91rm9200_udc_init()
1670 struct at91_ep *ep; in at91sam9260_udc_init() local
1674 ep = &udc->ep[i]; in at91sam9260_udc_init()
1678 ep->maxpacket = 64; in at91sam9260_udc_init()
1681 ep->maxpacket = 512; in at91sam9260_udc_init()
1708 struct at91_ep *ep; in at91sam9261_udc_init() local
1712 ep = &udc->ep[i]; in at91sam9261_udc_init()
1716 ep->maxpacket = 8; in at91sam9261_udc_init()
1719 ep->maxpacket = 64; in at91sam9261_udc_init()
1722 ep->maxpacket = 256; in at91sam9261_udc_init()
1753 struct at91_ep *ep; in at91sam9263_udc_init() local
1757 ep = &udc->ep[i]; in at91sam9263_udc_init()
1764 ep->maxpacket = 64; in at91sam9263_udc_init()
1768 ep->maxpacket = 256; in at91sam9263_udc_init()
1832 struct at91_ep *ep; in at91udc_probe() local
1847 udc->gadget.ep0 = &udc->ep[0].ep; in at91udc_probe()
1852 ep = &udc->ep[i]; in at91udc_probe()
1853 ep->ep.name = ep_info[i].name; in at91udc_probe()
1854 ep->ep.caps = ep_info[i].caps; in at91udc_probe()
1855 ep->ep.ops = &at91_ep_ops; in at91udc_probe()
1856 ep->udc = udc; in at91udc_probe()
1857 ep->int_mask = BIT(i); in at91udc_probe()
1859 ep->is_pingpong = 1; in at91udc_probe()