Lines Matching refs:ep

72 static struct udc_request *udc_alloc_bna_dummy(struct udc_ep *ep);
75 static int udc_create_dma_chain(struct udc_ep *ep, struct udc_request *req,
271 static int udc_set_txfifo_addr(struct udc_ep *ep) in udc_set_txfifo_addr() argument
277 if (!ep || !(ep->in)) in udc_set_txfifo_addr()
280 dev = ep->dev; in udc_set_txfifo_addr()
281 ep->txfifo = dev->txfifo; in udc_set_txfifo_addr()
284 for (i = 0; i < ep->num; i++) { in udc_set_txfifo_addr()
285 if (dev->ep[i].regs) { in udc_set_txfifo_addr()
287 tmp = readl(&dev->ep[i].regs->bufin_framenum); in udc_set_txfifo_addr()
289 ep->txfifo += tmp; in udc_set_txfifo_addr()
298 static void UDC_QUEUE_CNAK(struct udc_ep *ep, unsigned num) in UDC_QUEUE_CNAK() argument
300 if (readl(&ep->regs->ctl) & AMD_BIT(UDC_EPCTL_NAK)) { in UDC_QUEUE_CNAK()
301 DBG(ep->dev, "NAK could not be cleared for ep%d\n", num); in UDC_QUEUE_CNAK()
303 ep->naking = 1; in UDC_QUEUE_CNAK()
313 struct udc_ep *ep; in udc_ep_enable() local
326 ep = container_of(usbep, struct udc_ep, ep); in udc_ep_enable()
327 dev = ep->dev; in udc_ep_enable()
329 DBG(dev, "udc_ep_enable() ep %d\n", ep->num); in udc_ep_enable()
335 ep->ep.desc = desc; in udc_ep_enable()
337 ep->halted = 0; in udc_ep_enable()
340 tmp = readl(&dev->ep[ep->num].regs->ctl); in udc_ep_enable()
342 writel(tmp, &dev->ep[ep->num].regs->ctl); in udc_ep_enable()
346 tmp = readl(&dev->ep[ep->num].regs->bufout_maxpkt); in udc_ep_enable()
348 ep->ep.maxpacket = maxpacket; in udc_ep_enable()
349 writel(tmp, &dev->ep[ep->num].regs->bufout_maxpkt); in udc_ep_enable()
352 if (ep->in) { in udc_ep_enable()
355 udc_csr_epix = ep->num; in udc_ep_enable()
358 tmp = readl(&dev->ep[ep->num].regs->bufin_framenum); in udc_ep_enable()
365 writel(tmp, &dev->ep[ep->num].regs->bufin_framenum); in udc_ep_enable()
368 udc_set_txfifo_addr(ep); in udc_ep_enable()
371 tmp = readl(&ep->regs->ctl); in udc_ep_enable()
373 writel(tmp, &ep->regs->ctl); in udc_ep_enable()
378 udc_csr_epix = ep->num - UDC_CSR_EP_OUT_IX_OFS; in udc_ep_enable()
381 tmp = readl(&dev->csr->ne[ep->num - UDC_CSR_EP_OUT_IX_OFS]); in udc_ep_enable()
384 writel(tmp, &dev->csr->ne[ep->num - UDC_CSR_EP_OUT_IX_OFS]); in udc_ep_enable()
386 if (use_dma && !ep->in) { in udc_ep_enable()
388 ep->bna_dummy_req = udc_alloc_bna_dummy(ep); in udc_ep_enable()
389 ep->bna_occurred = 0; in udc_ep_enable()
392 if (ep->num != UDC_EP0OUT_IX) in udc_ep_enable()
403 tmp = AMD_ADDBITS(tmp, ep->in, UDC_CSR_NE_DIR); in udc_ep_enable()
407 tmp = AMD_ADDBITS(tmp, ep->dev->cur_config, UDC_CSR_NE_CFG); in udc_ep_enable()
409 tmp = AMD_ADDBITS(tmp, ep->dev->cur_intf, UDC_CSR_NE_INTF); in udc_ep_enable()
411 tmp = AMD_ADDBITS(tmp, ep->dev->cur_alt, UDC_CSR_NE_ALT); in udc_ep_enable()
417 tmp &= AMD_UNMASK_BIT(ep->num); in udc_ep_enable()
424 if (!use_dma || ep->in) { in udc_ep_enable()
425 tmp = readl(&ep->regs->ctl); in udc_ep_enable()
427 writel(tmp, &ep->regs->ctl); in udc_ep_enable()
428 ep->naking = 0; in udc_ep_enable()
429 UDC_QUEUE_CNAK(ep, ep->num); in udc_ep_enable()
439 static void ep_init(struct udc_regs __iomem *regs, struct udc_ep *ep) in ep_init() argument
443 VDBG(ep->dev, "ep-%d reset\n", ep->num); in ep_init()
444 ep->ep.desc = NULL; in ep_init()
445 ep->ep.ops = &udc_ep_ops; in ep_init()
446 INIT_LIST_HEAD(&ep->queue); in ep_init()
448 usb_ep_set_maxpacket_limit(&ep->ep,(u16) ~0); in ep_init()
450 tmp = readl(&ep->regs->ctl); in ep_init()
452 writel(tmp, &ep->regs->ctl); in ep_init()
453 ep->naking = 1; in ep_init()
457 tmp |= AMD_BIT(ep->num); in ep_init()
460 if (ep->in) { in ep_init()
462 tmp = readl(&ep->regs->ctl); in ep_init()
464 writel(tmp, &ep->regs->ctl); in ep_init()
466 tmp = readl(&ep->regs->sts); in ep_init()
468 writel(tmp, &ep->regs->sts); in ep_init()
471 tmp = readl(&ep->regs->ctl); in ep_init()
473 writel(tmp, &ep->regs->ctl); in ep_init()
477 writel(0, &ep->regs->desptr); in ep_init()
483 struct udc_ep *ep = NULL; in udc_ep_disable() local
489 ep = container_of(usbep, struct udc_ep, ep); in udc_ep_disable()
490 if (usbep->name == ep0_string || !ep->ep.desc) in udc_ep_disable()
493 DBG(ep->dev, "Disable ep-%d\n", ep->num); in udc_ep_disable()
495 spin_lock_irqsave(&ep->dev->lock, iflags); in udc_ep_disable()
496 udc_free_request(&ep->ep, &ep->bna_dummy_req->req); in udc_ep_disable()
497 empty_req_queue(ep); in udc_ep_disable()
498 ep_init(ep->dev->regs, ep); in udc_ep_disable()
499 spin_unlock_irqrestore(&ep->dev->lock, iflags); in udc_ep_disable()
510 struct udc_ep *ep; in udc_alloc_request() local
515 ep = container_of(usbep, struct udc_ep, ep); in udc_alloc_request()
517 VDBG(ep->dev, "udc_alloc_req(): ep%d\n", ep->num); in udc_alloc_request()
525 if (ep->dma) { in udc_alloc_request()
527 dma_desc = pci_pool_alloc(ep->dev->data_requests, gfp, in udc_alloc_request()
534 VDBG(ep->dev, "udc_alloc_req: req = %p dma_desc = %p, " in udc_alloc_request()
555 struct udc_ep *ep; in udc_free_request() local
561 ep = container_of(usbep, struct udc_ep, ep); in udc_free_request()
563 VDBG(ep->dev, "free_req req=%p\n", req); in udc_free_request()
566 VDBG(ep->dev, "req->td_data=%p\n", req->td_data); in udc_free_request()
570 udc_free_dma_chain(ep->dev, req); in udc_free_request()
572 pci_pool_free(ep->dev->data_requests, req->td_data, in udc_free_request()
599 static struct udc_request *udc_alloc_bna_dummy(struct udc_ep *ep) in udc_alloc_bna_dummy() argument
605 _req = udc_alloc_request(&ep->ep, GFP_ATOMIC); in udc_alloc_bna_dummy()
608 ep->bna_dummy_req = req; in udc_alloc_bna_dummy()
616 udc_txfifo_write(struct udc_ep *ep, struct usb_request *req) in udc_txfifo_write() argument
624 if (!req || !ep) in udc_txfifo_write()
633 bytes = ep->ep.maxpacket; in udc_txfifo_write()
639 writel(*(buf + i), ep->txfifo); in udc_txfifo_write()
644 ep->txfifo); in udc_txfifo_write()
648 writel(0, &ep->regs->confirm); in udc_txfifo_write()
689 udc_rxfifo_read(struct udc_ep *ep, struct udc_request *req) in udc_rxfifo_read() argument
697 bytes = readl(&ep->regs->sts); in udc_rxfifo_read()
703 if ((buf_space % ep->ep.maxpacket) != 0) { in udc_rxfifo_read()
704 DBG(ep->dev, in udc_rxfifo_read()
706 ep->ep.name, bytes, buf_space); in udc_rxfifo_read()
714 if (((bytes % ep->ep.maxpacket) != 0) || (!bytes) in udc_rxfifo_read()
719 VDBG(ep->dev, "ep %s: rxfifo read %d bytes\n", ep->ep.name, bytes); in udc_rxfifo_read()
720 udc_rxfifo_read_bytes(ep->dev, buf, bytes); in udc_rxfifo_read()
726 static int prep_dma(struct udc_ep *ep, struct udc_request *req, gfp_t gfp) in prep_dma() argument
731 VDBG(ep->dev, "prep_dma\n"); in prep_dma()
732 VDBG(ep->dev, "prep_dma ep%d req->td_data=%p\n", in prep_dma()
733 ep->num, req->td_data); in prep_dma()
744 retval = udc_create_dma_chain(ep, req, ep->ep.maxpacket, gfp); in prep_dma()
747 DBG(ep->dev, "Out of DMA memory\n"); in prep_dma()
750 if (ep->in) { in prep_dma()
751 if (req->req.length == ep->ep.maxpacket) { in prep_dma()
755 ep->ep.maxpacket, in prep_dma()
763 if (ep->in) { in prep_dma()
764 VDBG(ep->dev, "IN: use_dma_ppb=%d req->req.len=%d " in prep_dma()
767 ep->ep.maxpacket, ep->num); in prep_dma()
772 if (!use_dma_ppb || req->req.length < ep->ep.maxpacket in prep_dma()
773 || ep->num == UDC_EP0OUT_IX in prep_dma()
774 || ep->num == UDC_EP0IN_IX) { in prep_dma()
792 VDBG(ep->dev, "OUT set host ready\n"); in prep_dma()
801 if (ep->naking) { in prep_dma()
802 tmp = readl(&ep->regs->ctl); in prep_dma()
804 writel(tmp, &ep->regs->ctl); in prep_dma()
805 ep->naking = 0; in prep_dma()
806 UDC_QUEUE_CNAK(ep, ep->num); in prep_dma()
816 complete_req(struct udc_ep *ep, struct udc_request *req, int sts) in complete_req() argument
817 __releases(ep->dev->lock) in complete_req()
818 __acquires(ep->dev->lock) in complete_req()
823 VDBG(ep->dev, "complete_req(): ep%d\n", ep->num); in complete_req()
825 dev = ep->dev; in complete_req()
827 if (ep->dma) in complete_req()
828 usb_gadget_unmap_request(&dev->gadget, &req->req, ep->in); in complete_req()
830 halted = ep->halted; in complete_req()
831 ep->halted = 1; in complete_req()
840 VDBG(ep->dev, "req %p => complete %d bytes at %s with sts %d\n", in complete_req()
841 &req->req, req->req.length, ep->ep.name, sts); in complete_req()
844 usb_gadget_giveback_request(&ep->ep, &req->req); in complete_req()
846 ep->halted = halted; in complete_req()
913 struct udc_ep *ep, in udc_create_dma_chain() argument
927 VDBG(ep->dev, "udc_create_dma_chain: bytes=%ld buf_len=%ld\n", in udc_create_dma_chain()
932 if (!ep->in) in udc_create_dma_chain()
936 len = req->req.length / ep->ep.maxpacket; in udc_create_dma_chain()
937 if (req->req.length % ep->ep.maxpacket) in udc_create_dma_chain()
943 udc_free_dma_chain(ep->dev, req); in udc_create_dma_chain()
954 td = pci_pool_alloc(ep->dev->data_requests, in udc_create_dma_chain()
993 if (ep->in) { in udc_create_dma_chain()
997 ep->ep.maxpacket, in udc_create_dma_chain()
1011 if (ep->in) { in udc_create_dma_chain()
1054 struct udc_ep *ep; in udc_queue() local
1066 ep = container_of(usbep, struct udc_ep, ep); in udc_queue()
1067 if (!ep->ep.desc && (ep->num != 0 && ep->num != UDC_EP0OUT_IX)) in udc_queue()
1070 VDBG(ep->dev, "udc_queue(): ep%d-in=%d\n", ep->num, ep->in); in udc_queue()
1071 dev = ep->dev; in udc_queue()
1077 if (ep->dma) { in udc_queue()
1079 retval = usb_gadget_map_request(&udc->gadget, usbreq, ep->in); in udc_queue()
1094 if (list_empty(&ep->queue)) { in udc_queue()
1098 complete_req(ep, req, 0); in udc_queue()
1099 VDBG(dev, "%s: zlp\n", ep->ep.name); in udc_queue()
1113 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_queue()
1115 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_queue()
1116 dev->ep[UDC_EP0IN_IX].naking = 0; in udc_queue()
1117 UDC_QUEUE_CNAK(&dev->ep[UDC_EP0IN_IX], in udc_queue()
1123 if (ep->dma) { in udc_queue()
1124 retval = prep_dma(ep, req, GFP_ATOMIC); in udc_queue()
1128 if (ep->in) { in udc_queue()
1137 if (!ep->in) { in udc_queue()
1153 if (ep->bna_occurred) { in udc_queue()
1155 memcpy(ep->bna_dummy_req->td_data, in udc_queue()
1161 writel(req->td_phys, &ep->regs->desptr); in udc_queue()
1164 if (ep->naking) { in udc_queue()
1165 tmp = readl(&ep->regs->ctl); in udc_queue()
1167 writel(tmp, &ep->regs->ctl); in udc_queue()
1168 ep->naking = 0; in udc_queue()
1169 UDC_QUEUE_CNAK(ep, ep->num); in udc_queue()
1172 if (ep->in) { in udc_queue()
1175 tmp &= AMD_UNMASK_BIT(ep->num); in udc_queue()
1178 } else if (ep->in) { in udc_queue()
1181 tmp &= AMD_UNMASK_BIT(ep->num); in udc_queue()
1185 } else if (ep->dma) { in udc_queue()
1191 if (ep->in) { in udc_queue()
1192 retval = prep_dma(ep, req, GFP_ATOMIC); in udc_queue()
1201 list_add_tail(&req->queue, &ep->queue); in udc_queue()
1208 if (ep->num != UDC_EP0OUT_IX) in udc_queue()
1212 if (!ep->in) { in udc_queue()
1220 if (udc_rxfifo_read(ep, req)) { in udc_queue()
1222 complete_req(ep, req, 0); in udc_queue()
1236 static void empty_req_queue(struct udc_ep *ep) in empty_req_queue() argument
1240 ep->halted = 1; in empty_req_queue()
1241 while (!list_empty(&ep->queue)) { in empty_req_queue()
1242 req = list_entry(ep->queue.next, in empty_req_queue()
1245 complete_req(ep, req, -ESHUTDOWN); in empty_req_queue()
1252 struct udc_ep *ep; in udc_dequeue() local
1257 ep = container_of(usbep, struct udc_ep, ep); in udc_dequeue()
1258 if (!usbep || !usbreq || (!ep->ep.desc && (ep->num != 0 in udc_dequeue()
1259 && ep->num != UDC_EP0OUT_IX))) in udc_dequeue()
1264 spin_lock_irqsave(&ep->dev->lock, iflags); in udc_dequeue()
1265 halted = ep->halted; in udc_dequeue()
1266 ep->halted = 1; in udc_dequeue()
1268 if (ep->queue.next == &req->queue) { in udc_dequeue()
1269 if (ep->dma && req->dma_going) { in udc_dequeue()
1270 if (ep->in) in udc_dequeue()
1271 ep->cancel_transfer = 1; in udc_dequeue()
1286 ep->cancel_transfer = 1; in udc_dequeue()
1288 udc_init_bna_dummy(ep->req); in udc_dequeue()
1289 writel(ep->bna_dummy_req->td_phys, in udc_dequeue()
1290 &ep->regs->desptr); in udc_dequeue()
1296 complete_req(ep, req, -ECONNRESET); in udc_dequeue()
1297 ep->halted = halted; in udc_dequeue()
1299 spin_unlock_irqrestore(&ep->dev->lock, iflags); in udc_dequeue()
1307 struct udc_ep *ep; in udc_set_halt() local
1317 ep = container_of(usbep, struct udc_ep, ep); in udc_set_halt()
1318 if (!ep->ep.desc && (ep->num != 0 && ep->num != UDC_EP0OUT_IX)) in udc_set_halt()
1320 if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN) in udc_set_halt()
1326 if (ep->num == 0) in udc_set_halt()
1327 ep->dev->stall_ep0in = 1; in udc_set_halt()
1333 tmp = readl(&ep->regs->ctl); in udc_set_halt()
1335 writel(tmp, &ep->regs->ctl); in udc_set_halt()
1336 ep->halted = 1; in udc_set_halt()
1344 DBG(ep->dev, "start polltimer\n"); in udc_set_halt()
1351 if (ep->halted) { in udc_set_halt()
1352 tmp = readl(&ep->regs->ctl); in udc_set_halt()
1357 writel(tmp, &ep->regs->ctl); in udc_set_halt()
1358 ep->halted = 0; in udc_set_halt()
1359 UDC_QUEUE_CNAK(ep, ep->num); in udc_set_halt()
1418 list_add_tail(&dev->ep[UDC_EPIN_STATUS_IX].ep.ep_list, in make_ep_lists()
1420 list_add_tail(&dev->ep[UDC_EPIN_IX].ep.ep_list, in make_ep_lists()
1422 list_add_tail(&dev->ep[UDC_EPOUT_IX].ep.ep_list, in make_ep_lists()
1426 dev->ep[UDC_EPIN_STATUS_IX].fifo_depth = UDC_EPIN_SMALLINT_BUFF_SIZE; in make_ep_lists()
1428 dev->ep[UDC_EPIN_IX].fifo_depth = UDC_FS_EPIN_BUFF_SIZE; in make_ep_lists()
1430 dev->ep[UDC_EPIN_IX].fifo_depth = hs_tx_buf; in make_ep_lists()
1431 dev->ep[UDC_EPOUT_IX].fifo_depth = UDC_RXFIFO_SIZE; in make_ep_lists()
1502 struct udc_ep *ep; in udc_setup_endpoints() local
1518 ep = &dev->ep[tmp]; in udc_setup_endpoints()
1519 ep->dev = dev; in udc_setup_endpoints()
1520 ep->ep.name = ep_string[tmp]; in udc_setup_endpoints()
1521 ep->num = tmp; in udc_setup_endpoints()
1523 ep->txfifo = dev->txfifo; in udc_setup_endpoints()
1527 ep->fifo_depth = UDC_TXFIFO_SIZE; in udc_setup_endpoints()
1528 ep->in = 1; in udc_setup_endpoints()
1530 ep->fifo_depth = UDC_RXFIFO_SIZE; in udc_setup_endpoints()
1531 ep->in = 0; in udc_setup_endpoints()
1534 ep->regs = &dev->ep_regs[tmp]; in udc_setup_endpoints()
1540 if (!ep->ep.desc) in udc_setup_endpoints()
1541 ep_init(dev->regs, ep); in udc_setup_endpoints()
1549 ep->dma = &dev->regs->ctl; in udc_setup_endpoints()
1555 reg = readl(&dev->ep[tmp].regs->ctl); in udc_setup_endpoints()
1557 writel(reg, &dev->ep[tmp].regs->ctl); in udc_setup_endpoints()
1558 dev->ep[tmp].naking = 1; in udc_setup_endpoints()
1565 usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0IN_IX].ep, in udc_setup_endpoints()
1567 usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0OUT_IX].ep, in udc_setup_endpoints()
1570 usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0IN_IX].ep, in udc_setup_endpoints()
1572 usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0OUT_IX].ep, in udc_setup_endpoints()
1580 dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IX].ep; in udc_setup_endpoints()
1581 dev->ep[UDC_EP0IN_IX].halted = 0; in udc_setup_endpoints()
1643 empty_req_queue(&dev->ep[tmp]); in udc_tasklet_disconnect()
1649 &dev->ep[UDC_EP0IN_IX]); in udc_tasklet_disconnect()
1743 static void udc_handle_halt_state(struct udc_ep *ep) in udc_handle_halt_state() argument
1747 if (ep->halted == 1) { in udc_handle_halt_state()
1748 tmp = readl(&ep->regs->ctl); in udc_handle_halt_state()
1765 writel(tmp, &ep->regs->ctl); in udc_handle_halt_state()
1766 ep->halted = 0; in udc_handle_halt_state()
1767 UDC_QUEUE_CNAK(ep, ep->num); in udc_handle_halt_state()
1775 struct udc_ep *ep; in udc_pollstall_timer_function() local
1783 ep = &udc->ep[UDC_EPIN_IX]; in udc_pollstall_timer_function()
1784 udc_handle_halt_state(ep); in udc_pollstall_timer_function()
1785 if (ep->halted) in udc_pollstall_timer_function()
1788 ep = &udc->ep[UDC_EPOUT_IX]; in udc_pollstall_timer_function()
1789 udc_handle_halt_state(ep); in udc_pollstall_timer_function()
1790 if (ep->halted) in udc_pollstall_timer_function()
1814 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->ctl); in activate_control_endpoints()
1816 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->ctl); in activate_control_endpoints()
1819 dev->ep[UDC_EP0IN_IX].in = 1; in activate_control_endpoints()
1820 dev->ep[UDC_EP0OUT_IX].in = 0; in activate_control_endpoints()
1823 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->bufin_framenum); in activate_control_endpoints()
1830 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->bufin_framenum); in activate_control_endpoints()
1833 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->bufout_maxpkt); in activate_control_endpoints()
1840 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->bufout_maxpkt); in activate_control_endpoints()
1843 tmp = readl(&dev->ep[UDC_EP0OUT_IX].regs->bufout_maxpkt); in activate_control_endpoints()
1850 writel(tmp, &dev->ep[UDC_EP0OUT_IX].regs->bufout_maxpkt); in activate_control_endpoints()
1863 dev->ep[UDC_EP0OUT_IX].td->status |= in activate_control_endpoints()
1866 writel(dev->ep[UDC_EP0OUT_IX].td_stp_dma, in activate_control_endpoints()
1867 &dev->ep[UDC_EP0OUT_IX].regs->subptr); in activate_control_endpoints()
1868 writel(dev->ep[UDC_EP0OUT_IX].td_phys, in activate_control_endpoints()
1869 &dev->ep[UDC_EP0OUT_IX].regs->desptr); in activate_control_endpoints()
1891 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->ctl); in activate_control_endpoints()
1893 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->ctl); in activate_control_endpoints()
1894 dev->ep[UDC_EP0IN_IX].naking = 0; in activate_control_endpoints()
1895 UDC_QUEUE_CNAK(&dev->ep[UDC_EP0IN_IX], UDC_EP0IN_IX); in activate_control_endpoints()
1898 tmp = readl(&dev->ep[UDC_EP0OUT_IX].regs->ctl); in activate_control_endpoints()
1900 writel(tmp, &dev->ep[UDC_EP0OUT_IX].regs->ctl); in activate_control_endpoints()
1901 dev->ep[UDC_EP0OUT_IX].naking = 0; in activate_control_endpoints()
1902 UDC_QUEUE_CNAK(&dev->ep[UDC_EP0OUT_IX], UDC_EP0OUT_IX); in activate_control_endpoints()
1930 dev->ep[UDC_EP0OUT_IX].ep.driver_data = in amd5536_udc_start()
1931 dev->ep[UDC_EP0IN_IX].ep.driver_data; in amd5536_udc_start()
1958 empty_req_queue(&dev->ep[tmp]); in shutdown()
1997 reg = readl(&dev->ep[tmp].regs->ctl); in udc_process_cnak_queue()
1999 writel(reg, &dev->ep[tmp].regs->ctl); in udc_process_cnak_queue()
2000 dev->ep[tmp].naking = 0; in udc_process_cnak_queue()
2001 UDC_QUEUE_CNAK(&dev->ep[tmp], dev->ep[tmp].num); in udc_process_cnak_queue()
2008 reg = readl(&dev->ep[UDC_EP0OUT_IX].regs->ctl); in udc_process_cnak_queue()
2010 writel(reg, &dev->ep[UDC_EP0OUT_IX].regs->ctl); in udc_process_cnak_queue()
2011 dev->ep[UDC_EP0OUT_IX].naking = 0; in udc_process_cnak_queue()
2012 UDC_QUEUE_CNAK(&dev->ep[UDC_EP0OUT_IX], in udc_process_cnak_queue()
2013 dev->ep[UDC_EP0OUT_IX].num); in udc_process_cnak_queue()
2049 struct udc_ep *ep; in udc_data_out_isr() local
2056 ep = &dev->ep[ep_ix]; in udc_data_out_isr()
2058 tmp = readl(&ep->regs->sts); in udc_data_out_isr()
2063 ep->num, readl(&ep->regs->desptr)); in udc_data_out_isr()
2065 writel(tmp | AMD_BIT(UDC_EPSTS_BNA), &ep->regs->sts); in udc_data_out_isr()
2066 if (!ep->cancel_transfer) in udc_data_out_isr()
2067 ep->bna_occurred = 1; in udc_data_out_isr()
2069 ep->cancel_transfer = 0; in udc_data_out_isr()
2076 dev_err(&dev->pdev->dev, "HE ep%dout occurred\n", ep->num); in udc_data_out_isr()
2079 writel(tmp | AMD_BIT(UDC_EPSTS_HE), &ep->regs->sts); in udc_data_out_isr()
2084 if (!list_empty(&ep->queue)) { in udc_data_out_isr()
2087 req = list_entry(ep->queue.next, in udc_data_out_isr()
2098 if (req && udc_rxfifo_read(ep, req)) { in udc_data_out_isr()
2102 complete_req(ep, req, 0); in udc_data_out_isr()
2104 if (!list_empty(&ep->queue) && !ep->halted) { in udc_data_out_isr()
2105 req = list_entry(ep->queue.next, in udc_data_out_isr()
2112 } else if (!ep->cancel_transfer && req != NULL) { in udc_data_out_isr()
2125 if (ep->bna_occurred) { in udc_data_out_isr()
2127 memcpy(req->td_data, ep->bna_dummy_req->td_data, in udc_data_out_isr()
2129 ep->bna_occurred = 0; in udc_data_out_isr()
2130 udc_init_bna_dummy(ep->req); in udc_data_out_isr()
2168 if ((tmp % ep->ep.maxpacket) != 0) { in udc_data_out_isr()
2170 ep->ep.name, count, tmp); in udc_data_out_isr()
2178 complete_req(ep, req, 0); in udc_data_out_isr()
2181 if (!list_empty(&ep->queue) && !ep->halted) { in udc_data_out_isr()
2182 req = list_entry(ep->queue.next, in udc_data_out_isr()
2193 if (prep_dma(ep, req, GFP_ATOMIC) != 0) in udc_data_out_isr()
2197 &ep->regs->desptr); in udc_data_out_isr()
2207 if (ep->bna_dummy_req) { in udc_data_out_isr()
2209 writel(ep->bna_dummy_req->td_phys, in udc_data_out_isr()
2210 &ep->regs->desptr); in udc_data_out_isr()
2211 ep->bna_occurred = 0; in udc_data_out_isr()
2228 if (ep->num != UDC_EP0OUT_IX) in udc_data_out_isr()
2240 } else if (ep->cancel_transfer) { in udc_data_out_isr()
2242 ep->cancel_transfer = 0; in udc_data_out_isr()
2253 writel(UDC_EPSTS_OUT_CLEAR, &ep->regs->sts); in udc_data_out_isr()
2264 struct udc_ep *ep; in udc_data_in_isr() local
2270 ep = &dev->ep[ep_ix]; in udc_data_in_isr()
2272 epsts = readl(&ep->regs->sts); in udc_data_in_isr()
2278 ep->num, in udc_data_in_isr()
2279 (unsigned long) readl(&ep->regs->desptr)); in udc_data_in_isr()
2282 writel(epsts, &ep->regs->sts); in udc_data_in_isr()
2291 ep->num, (unsigned long) readl(&ep->regs->desptr)); in udc_data_in_isr()
2294 writel(epsts | AMD_BIT(UDC_EPSTS_HE), &ep->regs->sts); in udc_data_in_isr()
2303 if (!ep->cancel_transfer && !list_empty(&ep->queue)) { in udc_data_in_isr()
2304 req = list_entry(ep->queue.next, in udc_data_in_isr()
2326 complete_req(ep, req, 0); in udc_data_in_isr()
2329 if (list_empty(&ep->queue)) { in udc_data_in_isr()
2332 tmp |= AMD_BIT(ep->num); in udc_data_in_isr()
2337 ep->cancel_transfer = 0; in udc_data_in_isr()
2347 if (!list_empty(&ep->queue)) { in udc_data_in_isr()
2349 req = list_entry(ep->queue.next, in udc_data_in_isr()
2354 udc_txfifo_write(ep, &req->req); in udc_data_in_isr()
2356 if (len > ep->ep.maxpacket) in udc_data_in_isr()
2357 len = ep->ep.maxpacket; in udc_data_in_isr()
2360 || (len != ep->ep.maxpacket)) { in udc_data_in_isr()
2362 complete_req(ep, req, 0); in udc_data_in_isr()
2377 ep->ep.maxpacket) { in udc_data_in_isr()
2384 writel(req->td_phys, &ep->regs->desptr); in udc_data_in_isr()
2394 tmp = readl(&ep->regs->ctl); in udc_data_in_isr()
2396 writel(tmp, &ep->regs->ctl); in udc_data_in_isr()
2400 } else if (!use_dma && ep->in) { in udc_data_in_isr()
2404 tmp |= AMD_BIT(ep->num); in udc_data_in_isr()
2410 writel(epsts, &ep->regs->sts); in udc_data_in_isr()
2427 struct udc_ep *ep; in udc_control_out_isr() local
2430 ep = &dev->ep[UDC_EP0OUT_IX]; in udc_control_out_isr()
2435 tmp = readl(&dev->ep[UDC_EP0OUT_IX].regs->sts); in udc_control_out_isr()
2440 &dev->ep[UDC_EP0OUT_IX].regs->sts); in udc_control_out_isr()
2441 ep->bna_occurred = 1; in udc_control_out_isr()
2454 ep->dev->stall_ep0in = 0; in udc_control_out_isr()
2458 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_out_isr()
2460 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_out_isr()
2461 dev->ep[UDC_EP0IN_IX].naking = 1; in udc_control_out_isr()
2467 &dev->ep[UDC_EP0OUT_IX].regs->sts); in udc_control_out_isr()
2470 dev->ep[UDC_EP0OUT_IX].td_stp->data12; in udc_control_out_isr()
2472 dev->ep[UDC_EP0OUT_IX].td_stp->data34; in udc_control_out_isr()
2474 dev->ep[UDC_EP0OUT_IX].td_stp->status = in udc_control_out_isr()
2483 dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IX].ep; in udc_control_out_isr()
2488 dev->gadget.ep0 = &dev->ep[UDC_EP0OUT_IX].ep; in udc_control_out_isr()
2493 if (ep->bna_dummy_req) { in udc_control_out_isr()
2495 writel(ep->bna_dummy_req->td_phys, in udc_control_out_isr()
2496 &dev->ep[UDC_EP0OUT_IX].regs->desptr); in udc_control_out_isr()
2497 ep->bna_occurred = 0; in udc_control_out_isr()
2501 dev->ep[UDC_EP0OUT_IX].naking = 1; in udc_control_out_isr()
2528 ep_tmp = &udc->ep[UDC_EPIN_IX]; in udc_control_out_isr()
2529 udc_set_halt(&ep_tmp->ep, 0); in udc_control_out_isr()
2530 ep_tmp = &udc->ep[UDC_EPOUT_IX]; in udc_control_out_isr()
2531 udc_set_halt(&ep_tmp->ep, 0); in udc_control_out_isr()
2540 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_out_isr()
2546 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_out_isr()
2547 dev->ep[UDC_EP0IN_IX].naking = 0; in udc_control_out_isr()
2548 UDC_QUEUE_CNAK(&dev->ep[UDC_EP0IN_IX], UDC_EP0IN_IX); in udc_control_out_isr()
2553 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_out_isr()
2560 tmp = readl(&dev->ep[UDC_EP0OUT_IX].regs->ctl); in udc_control_out_isr()
2562 writel(tmp, &dev->ep[UDC_EP0OUT_IX].regs->ctl); in udc_control_out_isr()
2563 dev->ep[UDC_EP0OUT_IX].naking = 0; in udc_control_out_isr()
2564 UDC_QUEUE_CNAK(&dev->ep[UDC_EP0OUT_IX], UDC_EP0OUT_IX); in udc_control_out_isr()
2570 &dev->ep[UDC_EP0OUT_IX].regs->sts); in udc_control_out_isr()
2576 writel(UDC_EPSTS_OUT_CLEAR, &dev->ep[UDC_EP0OUT_IX].regs->sts); in udc_control_out_isr()
2581 if (list_empty(&dev->ep[UDC_EP0OUT_IX].queue)) { in udc_control_out_isr()
2585 dev->ep[UDC_EP0OUT_IX].td->status = in udc_control_out_isr()
2587 dev->ep[UDC_EP0OUT_IX].td->status, in udc_control_out_isr()
2598 writel(dev->ep[UDC_EP0OUT_IX].td_phys, in udc_control_out_isr()
2599 &dev->ep[UDC_EP0OUT_IX].regs->desptr); in udc_control_out_isr()
2606 count = readl(&dev->ep[UDC_EP0OUT_IX].regs->sts); in udc_control_out_isr()
2616 readl(&dev->ep[UDC_EP0OUT_IX].regs->confirm); in udc_control_out_isr()
2638 struct udc_ep *ep; in udc_control_in_isr() local
2642 ep = &dev->ep[UDC_EP0IN_IX]; in udc_control_in_isr()
2647 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->sts); in udc_control_in_isr()
2655 &dev->ep[UDC_EP0IN_IX].regs->sts); in udc_control_in_isr()
2661 if (ep->dma) { in udc_control_in_isr()
2664 &dev->ep[UDC_EP0IN_IX].regs->sts); in udc_control_in_isr()
2669 tmp = readl(&ep->regs->ctl); in udc_control_in_isr()
2671 writel(tmp, &ep->regs->ctl); in udc_control_in_isr()
2673 if (!list_empty(&ep->queue)) { in udc_control_in_isr()
2675 req = list_entry(ep->queue.next, in udc_control_in_isr()
2678 if (ep->dma) { in udc_control_in_isr()
2680 writel(req->td_phys, &ep->regs->desptr); in udc_control_in_isr()
2690 readl(&dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_in_isr()
2693 &dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_in_isr()
2699 complete_req(ep, req, 0); in udc_control_in_isr()
2703 udc_txfifo_write(ep, &req->req); in udc_control_in_isr()
2707 if (len > ep->ep.maxpacket) in udc_control_in_isr()
2708 len = ep->ep.maxpacket; in udc_control_in_isr()
2712 || (len != ep->ep.maxpacket)) { in udc_control_in_isr()
2714 complete_req(ep, req, 0); in udc_control_in_isr()
2720 ep->halted = 0; in udc_control_in_isr()
2722 if (!ep->dma) { in udc_control_in_isr()
2725 &dev->ep[UDC_EP0IN_IX].regs->sts); in udc_control_in_isr()
2741 struct udc_ep *ep; in udc_dev_isr() local
2763 ep = &dev->ep[i]; in udc_dev_isr()
2764 if (ep->in) { in udc_dev_isr()
2767 udc_csr_epix = ep->num; in udc_dev_isr()
2773 udc_csr_epix = ep->num - UDC_CSR_EP_OUT_IX_OFS; in udc_dev_isr()
2778 tmp = AMD_ADDBITS(tmp, ep->dev->cur_config, in udc_dev_isr()
2784 ep->halted = 0; in udc_dev_isr()
2785 tmp = readl(&ep->regs->ctl); in udc_dev_isr()
2787 writel(tmp, &ep->regs->ctl); in udc_dev_isr()
2816 ep = &dev->ep[i]; in udc_dev_isr()
2817 if (ep->in) { in udc_dev_isr()
2820 udc_csr_epix = ep->num; in udc_dev_isr()
2826 udc_csr_epix = ep->num - UDC_CSR_EP_OUT_IX_OFS; in udc_dev_isr()
2833 tmp = AMD_ADDBITS(tmp, ep->dev->cur_intf, in udc_dev_isr()
2837 tmp = AMD_ADDBITS(tmp, ep->dev->cur_alt, in udc_dev_isr()
2843 ep->halted = 0; in udc_dev_isr()
2844 tmp = readl(&ep->regs->ctl); in udc_dev_isr()
2846 writel(tmp, &ep->regs->ctl); in udc_dev_isr()
2878 empty_req_queue(&dev->ep[UDC_EP0IN_IX]); in udc_dev_isr()
2879 ep_init(dev->regs, &dev->ep[UDC_EP0IN_IX]); in udc_dev_isr()
2927 empty_req_queue(&dev->ep[UDC_EP0IN_IX]); in udc_dev_isr()
2928 ep_init(dev->regs, &dev->ep[UDC_EP0IN_IX]); in udc_dev_isr()
3060 dev->ep[UDC_EP0OUT_IX].td_stp, in udc_pci_remove()
3061 dev->ep[UDC_EP0OUT_IX].td_stp_dma); in udc_pci_remove()
3063 dev->ep[UDC_EP0OUT_IX].td, in udc_pci_remove()
3064 dev->ep[UDC_EP0OUT_IX].td_phys); in udc_pci_remove()
3109 dev->ep[UDC_EP0IN_IX].dma = &dev->regs->ctl; in init_dma_pools()
3121 &dev->ep[UDC_EP0OUT_IX].td_stp_dma); in init_dma_pools()
3126 dev->ep[UDC_EP0OUT_IX].td_stp = td_stp; in init_dma_pools()
3130 &dev->ep[UDC_EP0OUT_IX].td_phys); in init_dma_pools()
3135 dev->ep[UDC_EP0OUT_IX].td = td_data; in init_dma_pools()