Lines Matching defs:ep

36 static void mv_u3d_nuke(struct mv_u3d_ep *ep, int status);
51 struct mv_u3d_ep *ep;
56 ep = &u3d->eps[i];
57 ep->u3d = u3d;
59 /* ep0 ep context, ep0 in and out share the same ep context */
60 ep->ep_context = &u3d->ep_context[1];
63 /* reset ep state machine */
153 "complete_tr error: ep=%d %s: error = 0x%x\n",
174 void mv_u3d_done(struct mv_u3d_ep *ep, struct mv_u3d_req *req, int status)
175 __releases(&ep->udc->lock)
176 __acquires(&ep->udc->lock)
178 struct mv_u3d *u3d = (struct mv_u3d *)ep->u3d;
181 /* Removed the req from ep queue */
195 dma_unmap_single(ep->u3d->gadget.dev.parent,
203 usb_gadget_unmap_request(&u3d->gadget, &req->req, mv_u3d_ep_dir(ep));
207 ep->ep.name, &req->req, status,
211 spin_unlock(&ep->u3d->lock);
213 usb_gadget_giveback_request(&ep->ep, &req->req);
215 spin_lock(&ep->u3d->lock);
218 static int mv_u3d_queue_trb(struct mv_u3d_ep *ep, struct mv_u3d_req *req)
225 u3d = ep->u3d;
226 direction = mv_u3d_ep_dir(ep);
228 /* ep0 in and out share the same ep context slot 1*/
229 if (ep->ep_num == 0)
232 ep_context = &(u3d->ep_context[ep->ep_num * 2 + direction]);
235 if (!list_empty(&ep->queue)) {
255 /* ring bell the ep */
256 if (ep->ep_num == 0)
259 tmp = ep->ep_num * 2
280 u3d = req->ep->u3d;
309 if (req->ep->ep_num == 0)
316 direction = mv_u3d_ep_dir(req->ep);
343 u3d = req->ep->u3d;
355 if (req->ep->ep_num == 0)
362 direction = mv_u3d_ep_dir(req->ep);
370 if (*length == 0 || (*length % req->ep->ep.maxpacket) != 0)
410 u3d = req->ep->u3d;
475 mv_u3d_start_queue(struct mv_u3d_ep *ep)
477 struct mv_u3d *u3d = ep->u3d;
481 if (!list_empty(&ep->req_list) && !ep->processing)
482 req = list_entry(ep->req_list.next, struct mv_u3d_req, list);
486 ep->processing = 1;
490 mv_u3d_ep_dir(ep));
506 ret = mv_u3d_queue_trb(ep, req);
511 list_add_tail(&req->queue, &ep->queue);
516 ep->processing = 0;
524 struct mv_u3d_ep *ep;
532 ep = container_of(_ep, struct mv_u3d_ep, ep);
533 u3d = ep->u3d;
538 direction = mv_u3d_ep_dir(ep);
551 "than 16 on bulk ep\n");
556 "maxburst: %d on bulk %s\n", maxburst, ep->name);
566 "max burst should be 1 on int ep "
575 "max burst should be 1 on isoc ep "
585 ep->ep.maxpacket = max;
586 ep->ep.desc = desc;
587 ep->enabled = 1;
591 epxcr = ioread32(&u3d->vuc_regs->epcr[ep->ep_num].epxoutcr0);
593 iowrite32(epxcr, &u3d->vuc_regs->epcr[ep->ep_num].epxoutcr0);
596 iowrite32(epxcr, &u3d->vuc_regs->epcr[ep->ep_num].epxoutcr0);
602 iowrite32(epxcr, &u3d->vuc_regs->epcr[ep->ep_num].epxoutcr1);
604 epxcr = ioread32(&u3d->vuc_regs->epcr[ep->ep_num].epxincr0);
606 iowrite32(epxcr, &u3d->vuc_regs->epcr[ep->ep_num].epxincr0);
609 iowrite32(epxcr, &u3d->vuc_regs->epcr[ep->ep_num].epxincr0);
615 iowrite32(epxcr, &u3d->vuc_regs->epcr[ep->ep_num].epxincr1);
626 struct mv_u3d_ep *ep;
633 ep = container_of(_ep, struct mv_u3d_ep, ep);
634 if (!ep->ep.desc)
637 u3d = ep->u3d;
639 direction = mv_u3d_ep_dir(ep);
643 mv_u3d_nuke(ep, -ESHUTDOWN);
648 epxcr = ioread32(&u3d->vuc_regs->epcr[ep->ep_num].epxoutcr1);
651 iowrite32(epxcr, &u3d->vuc_regs->epcr[ep->ep_num].epxoutcr1);
653 epxcr = ioread32(&u3d->vuc_regs->epcr[ep->ep_num].epxincr1);
656 iowrite32(epxcr, &u3d->vuc_regs->epcr[ep->ep_num].epxincr1);
659 ep->enabled = 0;
661 ep->ep.desc = NULL;
690 struct mv_u3d_ep *ep = container_of(_ep, struct mv_u3d_ep, ep);
695 if (!ep->enabled)
698 u3d = ep->u3d;
699 direction = mv_u3d_ep_dir(ep);
702 if (!ep->ep_num) {
722 tmp = ioread32(&u3d->vuc_regs->epcr[ep->ep_num].epxoutcr0);
724 iowrite32(tmp, &u3d->vuc_regs->epcr[ep->ep_num].epxoutcr0);
728 while (ioread32(&u3d->vuc_regs->epcr[ep->ep_num].epxoutcr0) &
736 "EP FLUSH TIMEOUT for ep%d%s\n", ep->ep_num,
744 tmp = ioread32(&u3d->vuc_regs->epcr[ep->ep_num].epxincr0);
746 iowrite32(tmp, &u3d->vuc_regs->epcr[ep->ep_num].epxincr0);
750 while (ioread32(&u3d->vuc_regs->epcr[ep->ep_num].epxincr0) &
758 "EP FLUSH TIMEOUT for ep%d%s\n", ep->ep_num,
772 struct mv_u3d_ep *ep;
781 ep = container_of(_ep, struct mv_u3d_ep, ep);
782 u3d = ep->u3d;
786 if (!ep->ep_num
809 if (unlikely(!ep->ep.desc)) {
810 dev_err(u3d->dev, "%s, bad ep\n", __func__);
813 if (ep->ep.desc->bmAttributes == USB_ENDPOINT_XFER_ISOC) {
814 if (req->req.length > ep->ep.maxpacket)
824 req->ep = ep;
827 spin_lock_irqsave(&ep->req_lock, flags);
828 is_first_req = list_empty(&ep->req_list);
829 list_add_tail(&req->list, &ep->req_list);
830 spin_unlock_irqrestore(&ep->req_lock, flags);
838 mv_u3d_start_queue(ep);
846 struct mv_u3d_ep *ep;
858 ep = container_of(_ep, struct mv_u3d_ep, ep);
859 u3d = ep->u3d;
861 spin_lock_irqsave(&ep->u3d->lock, flags);
864 list_for_each_entry(iter, &ep->queue, queue) {
876 if (ep->queue.next == &req->queue) {
880 /* The request isn't the last request in this ep queue */
881 if (req->queue.next != &ep->queue) {
883 "it is the last request in this ep queue\n");
884 ep_context = ep->ep_context;
893 ep_context = ep->ep_context;
901 mv_u3d_done(ep, req, -ECONNRESET);
903 /* remove the req from the ep req list */
904 if (!list_empty(&ep->req_list)) {
906 curr_req = list_entry(ep->req_list.next,
910 ep->processing = 0;
915 spin_unlock_irqrestore(&ep->u3d->lock, flags);
923 struct mv_u3d_ep *ep = u3d->eps;
927 tmp = ioread32(&u3d->vuc_regs->epcr[ep->ep_num].epxoutcr0);
932 iowrite32(tmp, &u3d->vuc_regs->epcr[ep->ep_num].epxoutcr0);
934 tmp = ioread32(&u3d->vuc_regs->epcr[ep->ep_num].epxincr0);
939 iowrite32(tmp, &u3d->vuc_regs->epcr[ep->ep_num].epxincr0);
945 struct mv_u3d_ep *ep;
950 ep = container_of(_ep, struct mv_u3d_ep, ep);
951 u3d = ep->u3d;
952 if (!ep->ep.desc) {
957 if (ep->ep.desc->bmAttributes == USB_ENDPOINT_XFER_ISOC) {
963 * Attempt to halt IN ep will fail if any transfer requests
966 if (halt && (mv_u3d_ep_dir(ep) == MV_U3D_EP_DIR_IN)
967 && !list_empty(&ep->queue)) {
972 spin_lock_irqsave(&ep->u3d->lock, flags);
973 mv_u3d_ep_set_stall(u3d, ep->ep_num, mv_u3d_ep_dir(ep), halt);
975 ep->wedge = 1;
977 ep->wedge = 0;
978 spin_unlock_irqrestore(&ep->u3d->lock, flags);
980 if (ep->ep_num == 0)
1051 /* Enable ctrl ep */
1303 struct mv_u3d_ep *ep;
1308 ep = &u3d->eps[1];
1309 ep->u3d = u3d;
1310 strscpy(ep->name, "ep0");
1311 ep->ep.name = ep->name;
1312 ep->ep.ops = &mv_u3d_ep_ops;
1313 ep->wedge = 0;
1314 usb_ep_set_maxpacket_limit(&ep->ep, MV_U3D_EP0_MAX_PKT_SIZE);
1315 ep->ep.caps.type_control = true;
1316 ep->ep.caps.dir_in = true;
1317 ep->ep.caps.dir_out = true;
1318 ep->ep_num = 0;
1319 ep->ep.desc = &mv_u3d_ep0_desc;
1320 INIT_LIST_HEAD(&ep->queue);
1321 INIT_LIST_HEAD(&ep->req_list);
1322 ep->ep_type = USB_ENDPOINT_XFER_CONTROL;
1325 ep->ep_context = &u3d->ep_context[1];
1329 ep = &u3d->eps[i];
1331 snprintf(name, sizeof(name), "ep%din", i >> 1);
1332 ep->direction = MV_U3D_EP_DIR_IN;
1333 ep->ep.caps.dir_in = true;
1335 snprintf(name, sizeof(name), "ep%dout", i >> 1);
1336 ep->direction = MV_U3D_EP_DIR_OUT;
1337 ep->ep.caps.dir_out = true;
1339 ep->u3d = u3d;
1340 strscpy(ep->name, name);
1341 ep->ep.name = ep->name;
1343 ep->ep.caps.type_iso = true;
1344 ep->ep.caps.type_bulk = true;
1345 ep->ep.caps.type_int = true;
1347 ep->ep.ops = &mv_u3d_ep_ops;
1348 usb_ep_set_maxpacket_limit(&ep->ep, (unsigned short) ~0);
1349 ep->ep_num = i / 2;
1351 INIT_LIST_HEAD(&ep->queue);
1352 list_add_tail(&ep->ep.ep_list, &u3d->gadget.ep_list);
1354 INIT_LIST_HEAD(&ep->req_list);
1355 spin_lock_init(&ep->req_lock);
1356 ep->ep_context = &u3d->ep_context[i];
1363 static void mv_u3d_nuke(struct mv_u3d_ep *ep, int status)
1366 mv_u3d_ep_fifo_flush(&ep->ep);
1368 while (!list_empty(&ep->queue)) {
1370 req = list_entry(ep->queue.next, struct mv_u3d_req, queue);
1371 mv_u3d_done(ep, req, status);
1379 struct mv_u3d_ep *ep;
1383 list_for_each_entry(ep, &u3d->gadget.ep_list, ep.ep_list) {
1384 mv_u3d_nuke(ep, -ESHUTDOWN);
1621 dev_dbg(u3d->dev, "tr_complete: ep: 0x%x\n", tmp);
1640 /* remove req out of ep request list after completion */
1670 dev_dbg(u3d->dev, "call mv_u3d_start_queue from ep complete\n");
1719 dev_err(u3d->dev, "under run, ep%d\n", trbunderrun);
1873 dev_err(&dev->dev, "allocate ep context memory failed\n");
1926 u3d->gadget.ep0 = &u3d->eps[1].ep; /* gadget ep0 */