Lines Matching refs:ep
111 #define to_xusb_ep(ep) container_of((ep), struct xusb_ep, ep_usb) argument
123 struct xusb_ep *ep; member
184 struct xusb_ep ep[8]; member
265 struct xusb_ep *ep0 = &udc->ep[XUSB_EP_NUMBER_ZERO]; in xudc_wrstatus()
283 static void xudc_epconfig(struct xusb_ep *ep, struct xusb_udc *udc) in xudc_epconfig() argument
291 epcfgreg = ((ep->is_in << 29) | (ep->is_iso << 28) | in xudc_epconfig()
292 (ep->ep_usb.maxpacket << 15) | (ep->rambase)); in xudc_epconfig()
293 udc->write_fn(udc->addr, ep->offset, epcfgreg); in xudc_epconfig()
296 udc->write_fn(udc->addr, ep->offset + XUSB_EP_BUF0COUNT_OFFSET, in xudc_epconfig()
297 ep->buffer0count); in xudc_epconfig()
298 udc->write_fn(udc->addr, ep->offset + XUSB_EP_BUF1COUNT_OFFSET, in xudc_epconfig()
299 ep->buffer1count); in xudc_epconfig()
300 if (ep->buffer0ready) in xudc_epconfig()
302 1 << ep->epnumber); in xudc_epconfig()
303 if (ep->buffer1ready) in xudc_epconfig()
305 1 << (ep->epnumber + XUSB_STATUS_EP_BUFF2_SHIFT)); in xudc_epconfig()
320 static int xudc_start_dma(struct xusb_ep *ep, dma_addr_t src, in xudc_start_dma() argument
323 struct xusb_udc *udc = ep->udc; in xudc_start_dma()
380 static int xudc_dma_send(struct xusb_ep *ep, struct xusb_req *req, in xudc_dma_send() argument
386 struct xusb_udc *udc = ep->udc; in xudc_dma_send()
392 if (!ep->curbufnum && !ep->buffer0ready) { in xudc_dma_send()
394 eprambase = (u32 __force *)(udc->addr + ep->rambase); in xudc_dma_send()
396 udc->write_fn(udc->addr, ep->offset + in xudc_dma_send()
399 XUSB_DMA_BRR_CTRL | (1 << ep->epnumber)); in xudc_dma_send()
400 ep->buffer0ready = 1; in xudc_dma_send()
401 ep->curbufnum = 1; in xudc_dma_send()
402 } else if (ep->curbufnum && !ep->buffer1ready) { in xudc_dma_send()
404 eprambase = (u32 __force *)(udc->addr + ep->rambase + in xudc_dma_send()
405 ep->ep_usb.maxpacket); in xudc_dma_send()
407 udc->write_fn(udc->addr, ep->offset + in xudc_dma_send()
410 XUSB_DMA_BRR_CTRL | (1 << (ep->epnumber + in xudc_dma_send()
412 ep->buffer1ready = 1; in xudc_dma_send()
413 ep->curbufnum = 0; in xudc_dma_send()
419 return xudc_start_dma(ep, src, dst, length); in xudc_dma_send()
434 static int xudc_dma_receive(struct xusb_ep *ep, struct xusb_req *req, in xudc_dma_receive() argument
440 struct xusb_udc *udc = ep->udc; in xudc_dma_receive()
443 if (!ep->curbufnum && !ep->buffer0ready) { in xudc_dma_receive()
445 eprambase = (u32 __force *)(udc->addr + ep->rambase); in xudc_dma_receive()
449 (1 << ep->epnumber)); in xudc_dma_receive()
450 ep->buffer0ready = 1; in xudc_dma_receive()
451 ep->curbufnum = 1; in xudc_dma_receive()
452 } else if (ep->curbufnum && !ep->buffer1ready) { in xudc_dma_receive()
455 ep->rambase + ep->ep_usb.maxpacket); in xudc_dma_receive()
459 (1 << (ep->epnumber + in xudc_dma_receive()
461 ep->buffer1ready = 1; in xudc_dma_receive()
462 ep->curbufnum = 0; in xudc_dma_receive()
468 return xudc_start_dma(ep, src, dst, length); in xudc_dma_receive()
483 static int xudc_eptxrx(struct xusb_ep *ep, struct xusb_req *req, in xudc_eptxrx() argument
489 struct xusb_udc *udc = ep->udc; in xudc_eptxrx()
493 if (ep->is_in) in xudc_eptxrx()
494 rc = xudc_dma_send(ep, req, bufferptr, bufferlen); in xudc_eptxrx()
496 rc = xudc_dma_receive(ep, req, bufferptr, bufferlen); in xudc_eptxrx()
500 if (!ep->curbufnum && !ep->buffer0ready) { in xudc_eptxrx()
502 eprambase = (u32 __force *)(udc->addr + ep->rambase); in xudc_eptxrx()
503 if (ep->is_in) { in xudc_eptxrx()
505 udc->write_fn(udc->addr, ep->offset + in xudc_eptxrx()
514 1 << ep->epnumber); in xudc_eptxrx()
515 ep->buffer0ready = 1; in xudc_eptxrx()
516 ep->curbufnum = 1; in xudc_eptxrx()
517 } else if (ep->curbufnum && !ep->buffer1ready) { in xudc_eptxrx()
519 eprambase = (u32 __force *)(udc->addr + ep->rambase + in xudc_eptxrx()
520 ep->ep_usb.maxpacket); in xudc_eptxrx()
521 if (ep->is_in) { in xudc_eptxrx()
523 udc->write_fn(udc->addr, ep->offset + in xudc_eptxrx()
532 1 << (ep->epnumber + XUSB_STATUS_EP_BUFF2_SHIFT)); in xudc_eptxrx()
533 ep->buffer1ready = 1; in xudc_eptxrx()
534 ep->curbufnum = 0; in xudc_eptxrx()
551 static void xudc_done(struct xusb_ep *ep, struct xusb_req *req, int status) in xudc_done() argument
553 struct xusb_udc *udc = ep->udc; in xudc_done()
564 ep->ep_usb.name, req, status); in xudc_done()
566 if (udc->dma_enabled && ep->epnumber && req->usb_req.length) in xudc_done()
568 ep->is_in); in xudc_done()
572 req->usb_req.complete(&ep->ep_usb, &req->usb_req); in xudc_done()
586 static int xudc_read_fifo(struct xusb_ep *ep, struct xusb_req *req) in xudc_read_fifo() argument
594 struct xusb_udc *udc = ep->udc; in xudc_read_fifo()
596 if (ep->buffer0ready && ep->buffer1ready) { in xudc_read_fifo()
601 if (ep->curbufnum) in xudc_read_fifo()
606 count = udc->read_fn(udc->addr + ep->offset + bufoffset); in xudc_read_fifo()
608 if (!ep->buffer0ready && !ep->buffer1ready) in xudc_read_fifo()
614 is_short = count < ep->ep_usb.maxpacket; in xudc_read_fifo()
624 ep->ep_usb.name, count); in xudc_read_fifo()
626 xudc_done(ep, req, -EOVERFLOW); in xudc_read_fifo()
630 ret = xudc_eptxrx(ep, req, buf, count); in xudc_read_fifo()
635 ep->ep_usb.name, count, is_short ? "/S" : "", req, in xudc_read_fifo()
645 xudc_done(ep, req, 0); in xudc_read_fifo()
659 xudc_done(ep, req, -ECONNRESET); in xudc_read_fifo()
676 static int xudc_write_fifo(struct xusb_ep *ep, struct xusb_req *req) in xudc_write_fifo() argument
682 struct xusb_udc *udc = ep->udc; in xudc_write_fifo()
686 max = le16_to_cpu(ep->desc->wMaxPacketSize); in xudc_write_fifo()
692 ret = xudc_eptxrx(ep, req, buf, length); in xudc_write_fifo()
706 __func__, ep->ep_usb.name, length, is_last ? "/L" : "", in xudc_write_fifo()
711 xudc_done(ep, req, 0); in xudc_write_fifo()
721 xudc_done(ep, req, -ECONNRESET); in xudc_write_fifo()
734 static void xudc_nuke(struct xusb_ep *ep, int status) in xudc_nuke() argument
738 while (!list_empty(&ep->queue)) { in xudc_nuke()
739 req = list_first_entry(&ep->queue, struct xusb_req, queue); in xudc_nuke()
740 xudc_done(ep, req, status); in xudc_nuke()
753 struct xusb_ep *ep = to_xusb_ep(_ep); in xudc_ep_set_halt() local
758 if (!_ep || (!ep->desc && ep->epnumber)) { in xudc_ep_set_halt()
762 udc = ep->udc; in xudc_ep_set_halt()
764 if (ep->is_in && (!list_empty(&ep->queue)) && value) { in xudc_ep_set_halt()
769 if (ep->buffer0ready || ep->buffer1ready) { in xudc_ep_set_halt()
778 epcfgreg = udc->read_fn(udc->addr + ep->offset); in xudc_ep_set_halt()
780 udc->write_fn(udc->addr, ep->offset, epcfgreg); in xudc_ep_set_halt()
783 epcfgreg = udc->read_fn(udc->addr + ep->offset); in xudc_ep_set_halt()
785 udc->write_fn(udc->addr, ep->offset, epcfgreg); in xudc_ep_set_halt()
786 if (ep->epnumber) { in xudc_ep_set_halt()
788 epcfgreg = udc->read_fn(ep->udc->addr + ep->offset); in xudc_ep_set_halt()
790 udc->write_fn(udc->addr, ep->offset, epcfgreg); in xudc_ep_set_halt()
805 static int __xudc_ep_enable(struct xusb_ep *ep, in __xudc_ep_enable() argument
808 struct xusb_udc *udc = ep->udc; in __xudc_ep_enable()
814 ep->is_in = ((desc->bEndpointAddress & USB_DIR_IN) != 0); in __xudc_ep_enable()
816 ep->epnumber = (desc->bEndpointAddress & 0x0f); in __xudc_ep_enable()
817 ep->desc = desc; in __xudc_ep_enable()
818 ep->ep_usb.desc = desc; in __xudc_ep_enable()
820 ep->ep_usb.maxpacket = maxpacket = le16_to_cpu(desc->wMaxPacketSize); in __xudc_ep_enable()
826 ep->is_iso = 0; in __xudc_ep_enable()
830 ep->is_iso = 0; in __xudc_ep_enable()
838 ep->is_iso = 0; in __xudc_ep_enable()
847 ep->is_iso = 1; in __xudc_ep_enable()
851 ep->buffer0ready = 0; in __xudc_ep_enable()
852 ep->buffer1ready = 0; in __xudc_ep_enable()
853 ep->curbufnum = 0; in __xudc_ep_enable()
854 ep->rambase = rambase[ep->epnumber]; in __xudc_ep_enable()
855 xudc_epconfig(ep, udc); in __xudc_ep_enable()
858 ep->epnumber, maxpacket); in __xudc_ep_enable()
861 epcfg = udc->read_fn(udc->addr + ep->offset); in __xudc_ep_enable()
863 udc->write_fn(udc->addr, ep->offset, epcfg); in __xudc_ep_enable()
864 if (ep->epnumber) in __xudc_ep_enable()
865 ep->rambase <<= 2; in __xudc_ep_enable()
869 ier |= (XUSB_STATUS_INTR_BUFF_COMP_SHIFT_MASK << ep->epnumber); in __xudc_ep_enable()
873 if (ep->epnumber && !ep->is_in) { in __xudc_ep_enable()
875 1 << ep->epnumber); in __xudc_ep_enable()
876 ep->buffer0ready = 1; in __xudc_ep_enable()
878 (1 << (ep->epnumber + in __xudc_ep_enable()
880 ep->buffer1ready = 1; in __xudc_ep_enable()
896 struct xusb_ep *ep; in xudc_ep_enable() local
906 ep = to_xusb_ep(_ep); in xudc_ep_enable()
907 udc = ep->udc; in xudc_ep_enable()
915 ret = __xudc_ep_enable(ep, desc); in xudc_ep_enable()
929 struct xusb_ep *ep; in xudc_ep_disable() local
939 ep = to_xusb_ep(_ep); in xudc_ep_disable()
940 udc = ep->udc; in xudc_ep_disable()
944 xudc_nuke(ep, -ESHUTDOWN); in xudc_ep_disable()
947 ep->desc = NULL; in xudc_ep_disable()
948 ep->ep_usb.desc = NULL; in xudc_ep_disable()
950 dev_dbg(udc->dev, "USB Ep %d disable\n ", ep->epnumber); in xudc_ep_disable()
952 epcfg = udc->read_fn(udc->addr + ep->offset); in xudc_ep_disable()
954 udc->write_fn(udc->addr, ep->offset, epcfg); in xudc_ep_disable()
970 struct xusb_ep *ep = to_xusb_ep(_ep); in xudc_ep_alloc_request() local
974 udc = ep->udc; in xudc_ep_alloc_request()
981 req->ep = ep; in xudc_ep_alloc_request()
1084 struct xusb_ep *ep = to_xusb_ep(_ep); in xudc_ep_queue() local
1085 struct xusb_udc *udc = ep->udc; in xudc_ep_queue()
1089 if (!ep->desc) { in xudc_ep_queue()
1091 __func__, ep->name); in xudc_ep_queue()
1107 ep->is_in); in xudc_ep_queue()
1110 ep->epnumber); in xudc_ep_queue()
1116 if (list_empty(&ep->queue)) { in xudc_ep_queue()
1117 if (ep->is_in) { in xudc_ep_queue()
1119 if (!xudc_write_fifo(ep, req)) in xudc_ep_queue()
1123 if (!xudc_read_fifo(ep, req)) in xudc_ep_queue()
1129 list_add_tail(&req->queue, &ep->queue); in xudc_ep_queue()
1144 struct xusb_ep *ep = to_xusb_ep(_ep); in xudc_ep_dequeue() local
1146 struct xusb_udc *udc = ep->udc; in xudc_ep_dequeue()
1151 list_for_each_entry(req, &ep->queue, queue) { in xudc_ep_dequeue()
1156 spin_unlock_irqrestore(&ep->udc->lock, flags); in xudc_ep_dequeue()
1159 xudc_done(ep, req, -ECONNRESET); in xudc_ep_dequeue()
1174 static int xudc_ep0_enable(struct usb_ep *ep, in xudc_ep0_enable() argument
1188 static int xudc_ep0_disable(struct usb_ep *ep) in xudc_ep0_disable() argument
1310 struct xusb_ep *ep = &udc->ep[ep_number]; in xudc_eps_init() local
1313 list_add_tail(&ep->ep_usb.ep_list, in xudc_eps_init()
1315 usb_ep_set_maxpacket_limit(&ep->ep_usb, in xudc_eps_init()
1317 snprintf(ep->name, EPNAME_SIZE, "ep%d", ep_number); in xudc_eps_init()
1318 ep->ep_usb.name = ep->name; in xudc_eps_init()
1319 ep->ep_usb.ops = &xusb_ep_ops; in xudc_eps_init()
1321 ep->ep_usb.caps.type_iso = true; in xudc_eps_init()
1322 ep->ep_usb.caps.type_bulk = true; in xudc_eps_init()
1323 ep->ep_usb.caps.type_int = true; in xudc_eps_init()
1325 ep->ep_usb.name = ep0name; in xudc_eps_init()
1326 usb_ep_set_maxpacket_limit(&ep->ep_usb, EP0_MAX_PACKET); in xudc_eps_init()
1327 ep->ep_usb.ops = &xusb_ep0_ops; in xudc_eps_init()
1329 ep->ep_usb.caps.type_control = true; in xudc_eps_init()
1332 ep->ep_usb.caps.dir_in = true; in xudc_eps_init()
1333 ep->ep_usb.caps.dir_out = true; in xudc_eps_init()
1335 ep->udc = udc; in xudc_eps_init()
1336 ep->epnumber = ep_number; in xudc_eps_init()
1337 ep->desc = NULL; in xudc_eps_init()
1342 ep->offset = XUSB_EP0_CONFIG_OFFSET + (ep_number * 0x10); in xudc_eps_init()
1343 ep->is_in = 0; in xudc_eps_init()
1344 ep->is_iso = 0; in xudc_eps_init()
1345 ep->maxpacket = 0; in xudc_eps_init()
1346 xudc_epconfig(ep, udc); in xudc_eps_init()
1349 INIT_LIST_HEAD(&ep->queue); in xudc_eps_init()
1360 struct xusb_ep *ep; in xudc_stop_activity() local
1363 ep = &udc->ep[i]; in xudc_stop_activity()
1364 xudc_nuke(ep, -ESHUTDOWN); in xudc_stop_activity()
1379 struct xusb_ep *ep0 = &udc->ep[XUSB_EP_NUMBER_ZERO]; in xudc_start()
1450 struct xusb_ep *ep; in xudc_clear_stall_all_ep() local
1455 ep = &udc->ep[i]; in xudc_clear_stall_all_ep()
1456 epcfgreg = udc->read_fn(udc->addr + ep->offset); in xudc_clear_stall_all_ep()
1458 udc->write_fn(udc->addr, ep->offset, epcfgreg); in xudc_clear_stall_all_ep()
1459 if (ep->epnumber) { in xudc_clear_stall_all_ep()
1461 epcfgreg = udc->read_fn(udc->addr + ep->offset); in xudc_clear_stall_all_ep()
1463 udc->write_fn(udc->addr, ep->offset, epcfgreg); in xudc_clear_stall_all_ep()
1569 struct xusb_ep *ep0 = &udc->ep[XUSB_EP_NUMBER_ZERO]; in xudc_ep0_stall()
1584 struct xusb_ep *ep0 = &udc->ep[0]; in xudc_setaddress()
1605 struct xusb_ep *ep0 = &udc->ep[0]; in xudc_getstatus()
1625 target_ep = &udc->ep[epnum]; in xudc_getstatus()
1660 struct xusb_ep *ep0 = &udc->ep[0]; in xudc_set_clear_feature()
1692 target_ep = &udc->ep[endpoint]; in xudc_set_clear_feature()
1746 struct xusb_ep *ep0 = &udc->ep[0]; in xudc_handle_setup()
1812 struct xusb_ep *ep0 = &udc->ep[0]; in xudc_ep0_out()
1861 struct xusb_ep *ep0 = &udc->ep[0]; in xudc_ep0_in()
1959 struct xusb_ep *ep; in xudc_nonctrl_ep_handler() local
1961 ep = &udc->ep[epnum]; in xudc_nonctrl_ep_handler()
1964 ep->buffer0ready = 0; in xudc_nonctrl_ep_handler()
1966 ep->buffer1ready = 0; in xudc_nonctrl_ep_handler()
1968 if (list_empty(&ep->queue)) in xudc_nonctrl_ep_handler()
1971 req = list_first_entry(&ep->queue, struct xusb_req, queue); in xudc_nonctrl_ep_handler()
1973 if (ep->is_in) in xudc_nonctrl_ep_handler()
1974 xudc_write_fifo(ep, req); in xudc_nonctrl_ep_handler()
1976 xudc_read_fifo(ep, req); in xudc_nonctrl_ep_handler()
2104 udc->gadget.ep0 = &udc->ep[XUSB_EP_NUMBER_ZERO].ep_usb; in xudc_probe()
2122 ep0 = &udc->ep[0]; in xudc_probe()