Lines Matching refs:ep

90 static void proc_ep_show(struct seq_file *s, struct at91_ep *ep)  in proc_ep_show()  argument
99 struct at91_udc *udc = ep->udc; in proc_ep_show()
103 csr = __raw_readl(ep->creg); in proc_ep_show()
109 ep->ep.name, ep->ep.maxpacket, in proc_ep_show()
110 ep->is_in ? "in" : "out", in proc_ep_show()
111 ep->is_iso ? " iso" : "", in proc_ep_show()
112 ep->is_pingpong in proc_ep_show()
113 ? (ep->fifo_bank ? "pong" : "ping") in proc_ep_show()
115 ep->stopped ? " stopped" : ""); in proc_ep_show()
135 if (list_empty (&ep->queue)) in proc_ep_show()
138 else list_for_each_entry (req, &ep->queue, queue) { in proc_ep_show()
170 struct at91_ep *ep; in proc_udc_show() local
213 proc_ep_show(s, &udc->ep[0]); in proc_udc_show()
214 list_for_each_entry (ep, &udc->gadget.ep_list, ep.ep_list) { in proc_udc_show()
215 if (ep->ep.desc) in proc_udc_show()
216 proc_ep_show(s, ep); in proc_udc_show()
256 static void done(struct at91_ep *ep, struct at91_request *req, int status) in done() argument
258 unsigned stopped = ep->stopped; in done()
259 struct at91_udc *udc = ep->udc; in done()
267 VDBG("%s done %p, status %d\n", ep->ep.name, req, status); in done()
269 ep->stopped = 1; in done()
271 usb_gadget_giveback_request(&ep->ep, &req->req); in done()
273 ep->stopped = stopped; in done()
276 if (list_empty(&ep->queue) && ep->int_mask != (1 << 0)) in done()
277 at91_udp_write(udc, AT91_UDP_IDR, ep->int_mask); in done()
307 static int read_fifo (struct at91_ep *ep, struct at91_request *req) in read_fifo() argument
309 u32 __iomem *creg = ep->creg; in read_fifo()
310 u8 __iomem *dreg = ep->creg + (AT91_UDP_FDR(0) - AT91_UDP_CSR(0)); in read_fifo()
328 if (count > ep->ep.maxpacket) in read_fifo()
329 count = ep->ep.maxpacket; in read_fifo()
331 DBG("%s buffer overflow\n", ep->ep.name); in read_fifo()
339 if (ep->is_pingpong) { in read_fifo()
340 if (ep->fifo_bank == 0) { in read_fifo()
342 ep->fifo_bank = 1; in read_fifo()
345 ep->fifo_bank = 0; in read_fifo()
352 is_done = (count < ep->ep.maxpacket); in read_fifo()
356 PACKET("%s %p out/%d%s\n", ep->ep.name, &req->req, count, in read_fifo()
364 done(ep, req, 0); in read_fifo()
365 else if (ep->is_pingpong) { in read_fifo()
382 static int write_fifo(struct at91_ep *ep, struct at91_request *req) in write_fifo() argument
384 u32 __iomem *creg = ep->creg; in write_fifo()
386 u8 __iomem *dreg = ep->creg + (AT91_UDP_FDR(0) - AT91_UDP_CSR(0)); in write_fifo()
416 if (ep->ep.maxpacket < total) { in write_fifo()
417 count = ep->ep.maxpacket; in write_fifo()
421 is_last = (count < ep->ep.maxpacket) || !req->req.zero; in write_fifo()
443 PACKET("%s %p in/%d%s\n", ep->ep.name, &req->req, count, in write_fifo()
446 done(ep, req, 0); in write_fifo()
450 static void nuke(struct at91_ep *ep, int status) in nuke() argument
455 ep->stopped = 1; in nuke()
456 if (list_empty(&ep->queue)) in nuke()
459 VDBG("%s %s\n", __func__, ep->ep.name); in nuke()
460 while (!list_empty(&ep->queue)) { in nuke()
461 req = list_entry(ep->queue.next, struct at91_request, queue); in nuke()
462 done(ep, req, status); in nuke()
471 struct at91_ep *ep = container_of(_ep, struct at91_ep, ep); in at91_ep_enable() local
477 if (!_ep || !ep in at91_ep_enable()
481 || maxpacket > ep->maxpacket) { in at91_ep_enable()
486 udc = ep->udc; in at91_ep_enable()
513 if (!ep->is_pingpong) { in at91_ep_enable()
524 ep->is_in = usb_endpoint_dir_in(desc); in at91_ep_enable()
525 ep->is_iso = (tmp == USB_ENDPOINT_XFER_ISOC); in at91_ep_enable()
526 ep->stopped = 0; in at91_ep_enable()
527 if (ep->is_in) in at91_ep_enable()
531 __raw_writel(tmp, ep->creg); in at91_ep_enable()
533 ep->ep.maxpacket = maxpacket; in at91_ep_enable()
539 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask); in at91_ep_enable()
548 struct at91_ep *ep = container_of(_ep, struct at91_ep, ep); in at91_ep_disable() local
549 struct at91_udc *udc = ep->udc; in at91_ep_disable()
552 if (ep == &ep->udc->ep[0]) in at91_ep_disable()
557 nuke(ep, -ESHUTDOWN); in at91_ep_disable()
560 ep->ep.desc = NULL; in at91_ep_disable()
561 ep->ep.maxpacket = ep->maxpacket; in at91_ep_disable()
564 if (ep->udc->clocked) { in at91_ep_disable()
565 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask); in at91_ep_disable()
567 __raw_writel(0, ep->creg); in at91_ep_disable()
605 struct at91_ep *ep; in at91_ep_queue() local
611 ep = container_of(_ep, struct at91_ep, ep); in at91_ep_queue()
619 if (!_ep || (!ep->ep.desc && ep->ep.name != ep0name)) { in at91_ep_queue()
624 udc = ep->udc; in at91_ep_queue()
637 if (list_empty(&ep->queue) && !ep->stopped) { in at91_ep_queue()
648 is_ep0 = (ep->ep.name == ep0name); in at91_ep_queue()
671 tmp = __raw_readl(ep->creg); in at91_ep_queue()
674 __raw_writel(tmp, ep->creg); in at91_ep_queue()
680 if (ep->is_in) in at91_ep_queue()
681 status = write_fifo(ep, req); in at91_ep_queue()
683 status = read_fifo(ep, req); in at91_ep_queue()
693 list_add_tail (&req->queue, &ep->queue); in at91_ep_queue()
694 at91_udp_write(udc, AT91_UDP_IER, ep->int_mask); in at91_ep_queue()
703 struct at91_ep *ep; in at91_ep_dequeue() local
708 ep = container_of(_ep, struct at91_ep, ep); in at91_ep_dequeue()
709 if (!_ep || ep->ep.name == ep0name) in at91_ep_dequeue()
712 udc = ep->udc; in at91_ep_dequeue()
717 list_for_each_entry (req, &ep->queue, queue) { in at91_ep_dequeue()
726 done(ep, req, -ECONNRESET); in at91_ep_dequeue()
733 struct at91_ep *ep = container_of(_ep, struct at91_ep, ep); in at91_ep_set_halt() local
734 struct at91_udc *udc = ep->udc; in at91_ep_set_halt()
740 if (!_ep || ep->is_iso || !ep->udc->clocked) in at91_ep_set_halt()
743 creg = ep->creg; in at91_ep_set_halt()
753 if (ep->is_in && (!list_empty(&ep->queue) || (csr >> 16) != 0)) in at91_ep_set_halt()
760 VDBG("halt %s\n", ep->ep.name); in at91_ep_set_halt()
762 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask); in at91_ep_set_halt()
830 struct at91_ep *ep = &udc->ep[i]; in udc_reinit() local
833 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list); in udc_reinit()
834 ep->ep.desc = NULL; in udc_reinit()
835 ep->stopped = 0; in udc_reinit()
836 ep->fifo_bank = 0; in udc_reinit()
837 usb_ep_set_maxpacket_limit(&ep->ep, ep->maxpacket); in udc_reinit()
838 ep->creg = (void __iomem *) udc->udp_baseaddr + AT91_UDP_CSR(i); in udc_reinit()
840 INIT_LIST_HEAD(&ep->queue); in udc_reinit()
855 struct at91_ep *ep = &udc->ep[i]; in reset_gadget() local
857 ep->stopped = 1; in reset_gadget()
858 nuke(ep, -ESHUTDOWN); in reset_gadget()
880 struct at91_ep *ep = &udc->ep[i]; in stop_activity() local
881 ep->stopped = 1; in stop_activity()
882 nuke(ep, -ESHUTDOWN); in stop_activity()
1000 static int handle_ep(struct at91_ep *ep) in handle_ep() argument
1003 u32 __iomem *creg = ep->creg; in handle_ep()
1006 if (!list_empty(&ep->queue)) in handle_ep()
1007 req = list_entry(ep->queue.next, in handle_ep()
1012 if (ep->is_in) { in handle_ep()
1019 return write_fifo(ep, req); in handle_ep()
1024 if (ep->is_iso && req) in handle_ep()
1032 return read_fifo(ep, req); in handle_ep()
1042 static void handle_setup(struct at91_udc *udc, struct at91_ep *ep, u32 csr) in handle_setup() argument
1044 u32 __iomem *creg = ep->creg; in handle_setup()
1045 u8 __iomem *dreg = ep->creg + (AT91_UDP_FDR(0) - AT91_UDP_CSR(0)); in handle_setup()
1058 ep->is_in = 1; in handle_setup()
1061 ep->is_in = 0; in handle_setup()
1073 ep->stopped = 0; in handle_setup()
1171 ep = &udc->ep[tmp]; in handle_setup()
1172 if (tmp >= NUM_ENDPOINTS || (tmp && !ep->ep.desc)) in handle_setup()
1177 if (!ep->is_in) in handle_setup()
1179 } else if (ep->is_in) in handle_setup()
1182 PACKET("get %s status\n", ep->ep.name); in handle_setup()
1183 if (__raw_readl(ep->creg) & AT91_UDP_FORCESTALL) in handle_setup()
1194 ep = &udc->ep[tmp]; in handle_setup()
1197 if (!ep->ep.desc || ep->is_iso) in handle_setup()
1200 if (!ep->is_in) in handle_setup()
1202 } else if (ep->is_in) in handle_setup()
1205 tmp = __raw_readl(ep->creg); in handle_setup()
1208 __raw_writel(tmp, ep->creg); in handle_setup()
1213 ep = &udc->ep[tmp]; in handle_setup()
1218 if (!ep->ep.desc || ep->is_iso) in handle_setup()
1221 if (!ep->is_in) in handle_setup()
1223 } else if (ep->is_in) in handle_setup()
1226 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask); in handle_setup()
1228 tmp = __raw_readl(ep->creg); in handle_setup()
1231 __raw_writel(tmp, ep->creg); in handle_setup()
1232 if (!list_empty(&ep->queue)) in handle_setup()
1233 handle_ep(ep); in handle_setup()
1270 struct at91_ep *ep0 = &udc->ep[0]; in handle_ep0()
1485 struct at91_ep *ep = &udc->ep[1]; in at91_udc_irq() local
1492 handle_ep(ep); in at91_udc_irq()
1493 ep++; in at91_udc_irq()
1594 struct at91_ep *ep; in at91rm9200_udc_init() local
1599 ep = &udc->ep[i]; in at91rm9200_udc_init()
1604 ep->maxpacket = 8; in at91rm9200_udc_init()
1607 ep->maxpacket = 64; in at91rm9200_udc_init()
1610 ep->maxpacket = 256; in at91rm9200_udc_init()
1650 struct at91_ep *ep; in at91sam9260_udc_init() local
1654 ep = &udc->ep[i]; in at91sam9260_udc_init()
1658 ep->maxpacket = 64; in at91sam9260_udc_init()
1661 ep->maxpacket = 512; in at91sam9260_udc_init()
1688 struct at91_ep *ep; in at91sam9261_udc_init() local
1692 ep = &udc->ep[i]; in at91sam9261_udc_init()
1696 ep->maxpacket = 8; in at91sam9261_udc_init()
1699 ep->maxpacket = 64; in at91sam9261_udc_init()
1702 ep->maxpacket = 256; in at91sam9261_udc_init()
1733 struct at91_ep *ep; in at91sam9263_udc_init() local
1737 ep = &udc->ep[i]; in at91sam9263_udc_init()
1744 ep->maxpacket = 64; in at91sam9263_udc_init()
1748 ep->maxpacket = 256; in at91sam9263_udc_init()
1812 struct at91_ep *ep; in at91udc_probe() local
1827 udc->gadget.ep0 = &udc->ep[0].ep; in at91udc_probe()
1832 ep = &udc->ep[i]; in at91udc_probe()
1833 ep->ep.name = ep_names[i]; in at91udc_probe()
1834 ep->ep.ops = &at91_ep_ops; in at91udc_probe()
1835 ep->udc = udc; in at91udc_probe()
1836 ep->int_mask = BIT(i); in at91udc_probe()
1838 ep->is_pingpong = 1; in at91udc_probe()