Lines Matching refs:ep

33 static void done(struct fusb300_ep *ep, struct fusb300_request *req,
55 static void fusb300_ep_setting(struct fusb300_ep *ep,
58 ep->epnum = info.epnum;
59 ep->type = info.type;
62 static int fusb300_ep_release(struct fusb300_ep *ep)
64 if (!ep->epnum)
66 ep->epnum = 0;
67 ep->stall = 0;
68 ep->wedged = 0;
73 u32 ep)
75 u32 val = ioread32(fusb300->reg + FUSB300_OFFSET_EPSET1(ep));
79 iowrite32(val, fusb300->reg + FUSB300_OFFSET_EPSET1(ep));
83 u8 ep)
85 u32 reg = ioread32(fusb300->reg + FUSB300_OFFSET_EPSET1(ep));
90 iowrite32(reg, fusb300->reg + FUSB300_OFFSET_EPSET1(ep));
143 u8 ep)
145 u32 reg = ioread32(fusb300->reg + FUSB300_OFFSET_EPSET1(ep));
148 iowrite32(reg, fusb300->reg + FUSB300_OFFSET_EPSET1(ep));
197 static int config_ep(struct fusb300_ep *ep,
200 struct fusb300 *fusb300 = ep->fusb300;
203 ep->ep.desc = desc;
225 fusb300_ep_setting(ep, info);
227 fusb300->ep[info.epnum] = ep;
235 struct fusb300_ep *ep;
237 ep = container_of(_ep, struct fusb300_ep, ep);
239 if (ep->fusb300->reenum) {
240 ep->fusb300->fifo_entry_num = 0;
241 ep->fusb300->addrofs = 0;
242 ep->fusb300->reenum = 0;
245 return config_ep(ep, desc);
250 struct fusb300_ep *ep;
254 ep = container_of(_ep, struct fusb300_ep, ep);
256 BUG_ON(!ep);
258 while (!list_empty(&ep->queue)) {
259 req = list_entry(ep->queue.next, struct fusb300_request, queue);
260 spin_lock_irqsave(&ep->fusb300->lock, flags);
261 done(ep, req, -ECONNRESET);
262 spin_unlock_irqrestore(&ep->fusb300->lock, flags);
265 return fusb300_ep_release(ep);
289 static int enable_fifo_int(struct fusb300_ep *ep)
291 struct fusb300 *fusb300 = ep->fusb300;
293 if (ep->epnum) {
295 FUSB300_IGER0_EEPn_FIFO_INT(ep->epnum));
304 static int disable_fifo_int(struct fusb300_ep *ep)
306 struct fusb300 *fusb300 = ep->fusb300;
308 if (ep->epnum) {
310 FUSB300_IGER0_EEPn_FIFO_INT(ep->epnum));
330 static void fusb300_wrcxf(struct fusb300_ep *ep,
336 struct fusb300 *fusb300 = ep->fusb300;
382 static void fusb300_set_epnstall(struct fusb300 *fusb300, u8 ep)
384 fusb300_enable_bit(fusb300, FUSB300_OFFSET_EPSET0(ep),
388 static void fusb300_clear_epnstall(struct fusb300 *fusb300, u8 ep)
390 u32 reg = ioread32(fusb300->reg + FUSB300_OFFSET_EPSET0(ep));
393 printk(KERN_DEBUG "EP%d stall... Clear!!\n", ep);
395 iowrite32(reg, fusb300->reg + FUSB300_OFFSET_EPSET0(ep));
399 static void ep0_queue(struct fusb300_ep *ep, struct fusb300_request *req)
401 if (ep->fusb300->ep0_dir) { /* if IN */
403 fusb300_wrcxf(ep, req);
408 (req->req.actual < ep->ep.maxpacket))
409 done(ep, req, 0);
412 done(ep, req, 0);
414 fusb300_enable_bit(ep->fusb300, FUSB300_OFFSET_IGER1,
422 struct fusb300_ep *ep;
427 ep = container_of(_ep, struct fusb300_ep, ep);
430 if (ep->fusb300->gadget.speed == USB_SPEED_UNKNOWN)
433 spin_lock_irqsave(&ep->fusb300->lock, flags);
435 if (list_empty(&ep->queue))
438 list_add_tail(&req->queue, &ep->queue);
443 if (ep->ep.desc == NULL) /* ep0 */
444 ep0_queue(ep, req);
445 else if (request && !ep->stall)
446 enable_fifo_int(ep);
448 spin_unlock_irqrestore(&ep->fusb300->lock, flags);
455 struct fusb300_ep *ep;
459 ep = container_of(_ep, struct fusb300_ep, ep);
462 spin_lock_irqsave(&ep->fusb300->lock, flags);
463 if (!list_empty(&ep->queue))
464 done(ep, req, -ECONNRESET);
465 spin_unlock_irqrestore(&ep->fusb300->lock, flags);
472 struct fusb300_ep *ep;
477 ep = container_of(_ep, struct fusb300_ep, ep);
479 fusb300 = ep->fusb300;
481 spin_lock_irqsave(&ep->fusb300->lock, flags);
483 if (!list_empty(&ep->queue)) {
489 fusb300_set_epnstall(fusb300, ep->epnum);
490 ep->stall = 1;
492 ep->wedged = 1;
494 fusb300_clear_epnstall(fusb300, ep->epnum);
495 ep->stall = 0;
496 ep->wedged = 0;
500 spin_unlock_irqrestore(&ep->fusb300->lock, flags);
600 static void fusb300_rdfifo(struct fusb300_ep *ep,
607 struct fusb300 *fusb300 = ep->fusb300;
617 FUSB300_OFFSET_EPPORT(ep->epnum));
628 FUSB300_OFFSET_EPPORT(ep->epnum));
633 FUSB300_OFFSET_EPPORT(ep->epnum));
639 FUSB300_OFFSET_EPPORT(ep->epnum));
657 static u8 fusb300_get_epnstall(struct fusb300 *fusb300, u8 ep)
660 u32 reg = ioread32(fusb300->reg + FUSB300_OFFSET_EPSET0(ep));
687 u8 ep;
699 ep = w_index & USB_ENDPOINT_NUMBER_MASK;
700 if (ep) {
701 if (fusb300_get_epnstall(fusb300, ep))
725 u8 ep;
737 ep = w_index & USB_ENDPOINT_NUMBER_MASK;
738 if (ep)
739 fusb300_set_epnstall(fusb300, ep);
751 static void fusb300_clear_seqnum(struct fusb300 *fusb300, u8 ep)
753 fusb300_enable_bit(fusb300, FUSB300_OFFSET_EPSET0(ep),
759 struct fusb300_ep *ep =
760 fusb300->ep[ctrl->wIndex & USB_ENDPOINT_NUMBER_MASK];
771 if (ep->wedged) {
775 if (ep->stall) {
776 ep->stall = 0;
777 fusb300_clear_seqnum(fusb300, ep->epnum);
778 fusb300_clear_epnstall(fusb300, ep->epnum);
779 if (!list_empty(&ep->queue))
780 enable_fifo_int(ep);
864 static void done(struct fusb300_ep *ep, struct fusb300_request *req,
870 if (ep->fusb300->gadget.speed == USB_SPEED_UNKNOWN)
875 spin_unlock(&ep->fusb300->lock);
876 usb_gadget_giveback_request(&ep->ep, &req->req);
877 spin_lock(&ep->fusb300->lock);
879 if (ep->epnum) {
880 disable_fifo_int(ep);
881 if (!list_empty(&ep->queue))
882 enable_fifo_int(ep);
884 fusb300_set_cxdone(ep->fusb300);
887 static void fusb300_fill_idma_prdtbl(struct fusb300_ep *ep, dma_addr_t d,
895 reg = ioread32(ep->fusb300->reg +
896 FUSB300_OFFSET_EPPRD_W0(ep->epnum));
900 iowrite32(d, ep->fusb300->reg + FUSB300_OFFSET_EPPRD_W1(ep->epnum));
904 iowrite32(value, ep->fusb300->reg + FUSB300_OFFSET_EPPRD_W0(ep->epnum));
906 iowrite32(0x0, ep->fusb300->reg + FUSB300_OFFSET_EPPRD_W2(ep->epnum));
908 fusb300_enable_bit(ep->fusb300, FUSB300_OFFSET_EPPRDRDY,
909 FUSB300_EPPRDR_EP_PRD_RDY(ep->epnum));
912 static void fusb300_wait_idma_finished(struct fusb300_ep *ep)
917 reg = ioread32(ep->fusb300->reg + FUSB300_OFFSET_IGR1);
924 reg = ioread32(ep->fusb300->reg + FUSB300_OFFSET_IGR0);
925 reg &= FUSB300_IGR0_EPn_PRD_INT(ep->epnum);
928 fusb300_clear_int(ep->fusb300, FUSB300_OFFSET_IGR0,
929 FUSB300_IGR0_EPn_PRD_INT(ep->epnum));
933 reg = ioread32(ep->fusb300->reg + FUSB300_OFFSET_IGER0);
934 reg &= ~FUSB300_IGER0_EEPn_PRD_INT(ep->epnum);
935 iowrite32(reg, ep->fusb300->reg + FUSB300_OFFSET_IGER0);
938 static void fusb300_set_idma(struct fusb300_ep *ep,
943 ret = usb_gadget_map_request(&ep->fusb300->gadget,
948 fusb300_enable_bit(ep->fusb300, FUSB300_OFFSET_IGER0,
949 FUSB300_IGER0_EEPn_PRD_INT(ep->epnum));
951 fusb300_fill_idma_prdtbl(ep, req->req.dma, req->req.length);
953 fusb300_wait_idma_finished(ep);
955 usb_gadget_unmap_request(&ep->fusb300->gadget,
959 static void in_ep_fifo_handler(struct fusb300_ep *ep)
961 struct fusb300_request *req = list_entry(ep->queue.next,
965 fusb300_set_idma(ep, req);
966 done(ep, req, 0);
969 static void out_ep_fifo_handler(struct fusb300_ep *ep)
971 struct fusb300 *fusb300 = ep->fusb300;
972 struct fusb300_request *req = list_entry(ep->queue.next,
974 u32 reg = ioread32(fusb300->reg + FUSB300_OFFSET_EPFFR(ep->epnum));
977 fusb300_rdfifo(ep, req, length);
980 if ((req->req.length == req->req.actual) || (length < ep->ep.maxpacket))
981 done(ep, req, 0);
1008 struct fusb300_ep *ep = fusb300->ep[0];
1011 if (!list_empty(&ep->queue)) {
1014 req = list_first_entry(&ep->queue,
1017 fusb300_rdcxf(ep->fusb300, req->req.buf,
1019 done(ep, req, 0);
1030 struct fusb300_ep *ep = fusb300->ep[0];
1032 if ((!list_empty(&ep->queue)) && (fusb300->ep0_dir)) {
1033 req = list_entry(ep->queue.next,
1036 fusb300_wrcxf(ep, req);
1037 if ((req->req.length - req->req.actual) < ep->ep.maxpacket)
1038 done(ep, req, 0);
1244 in_ep_fifo_handler(fusb300->ep[i]);
1246 out_ep_fifo_handler(fusb300->ep[i]);
1351 fusb300_free_request(&fusb300->ep[0]->ep, fusb300->ep0_req);
1353 kfree(fusb300->ep[i]);
1409 fusb300->ep[i] = _ep[i];
1439 struct fusb300_ep *ep = fusb300->ep[i];
1442 INIT_LIST_HEAD(&fusb300->ep[i]->ep.ep_list);
1443 list_add_tail(&fusb300->ep[i]->ep.ep_list,
1446 ep->fusb300 = fusb300;
1447 INIT_LIST_HEAD(&ep->queue);
1448 ep->ep.name = fusb300_ep_name[i];
1449 ep->ep.ops = &fusb300_ep_ops;
1450 usb_ep_set_maxpacket_limit(&ep->ep, HS_BULK_MAX_PACKET_SIZE);
1453 ep->ep.caps.type_control = true;
1455 ep->ep.caps.type_iso = true;
1456 ep->ep.caps.type_bulk = true;
1457 ep->ep.caps.type_int = true;
1460 ep->ep.caps.dir_in = true;
1461 ep->ep.caps.dir_out = true;
1463 usb_ep_set_maxpacket_limit(&fusb300->ep[0]->ep, HS_CTL_MAX_PACKET_SIZE);
1464 fusb300->ep[0]->epnum = 0;
1465 fusb300->gadget.ep0 = &fusb300->ep[0]->ep;
1468 fusb300->ep0_req = fusb300_alloc_request(&fusb300->ep[0]->ep,
1485 fusb300_free_request(&fusb300->ep[0]->ep, fusb300->ep0_req);
1496 fusb300_free_request(&fusb300->ep[0]->ep,
1499 kfree(fusb300->ep[i]);