Lines Matching refs:ep
28 static void fotg210_disable_fifo_int(struct fotg210_ep *ep)
30 u32 value = ioread32(ep->fotg210->reg + FOTG210_DMISGR1);
32 if (ep->dir_in)
33 value |= DMISGR1_MF_IN_INT(ep->epnum - 1);
35 value |= DMISGR1_MF_OUTSPK_INT(ep->epnum - 1);
36 iowrite32(value, ep->fotg210->reg + FOTG210_DMISGR1);
39 static void fotg210_enable_fifo_int(struct fotg210_ep *ep)
41 u32 value = ioread32(ep->fotg210->reg + FOTG210_DMISGR1);
43 if (ep->dir_in)
44 value &= ~DMISGR1_MF_IN_INT(ep->epnum - 1);
46 value &= ~DMISGR1_MF_OUTSPK_INT(ep->epnum - 1);
47 iowrite32(value, ep->fotg210->reg + FOTG210_DMISGR1);
58 static void fotg210_done(struct fotg210_ep *ep, struct fotg210_request *req,
64 if (ep->fotg210->gadget.speed == USB_SPEED_UNKNOWN)
69 spin_unlock(&ep->fotg210->lock);
70 usb_gadget_giveback_request(&ep->ep, &req->req);
71 spin_lock(&ep->fotg210->lock);
73 if (ep->epnum) {
74 if (list_empty(&ep->queue))
75 fotg210_disable_fifo_int(ep);
77 fotg210_set_cxdone(ep->fotg210);
81 static void fotg210_fifo_ep_mapping(struct fotg210_ep *ep, u32 epnum,
84 struct fotg210_udc *fotg210 = ep->fotg210;
87 /* Driver should map an ep to a fifo and then map the fifo
88 * to the ep. What a brain-damaged design!
91 /* map a fifo to an ep */
97 /* map the ep to the fifo */
109 static void fotg210_set_fifo_dir(struct fotg210_ep *ep, u32 epnum, u32 dir_in)
111 struct fotg210_udc *fotg210 = ep->fotg210;
119 static void fotg210_set_tfrtype(struct fotg210_ep *ep, u32 epnum, u32 type)
121 struct fotg210_udc *fotg210 = ep->fotg210;
129 static void fotg210_set_mps(struct fotg210_ep *ep, u32 epnum, u32 mps,
132 struct fotg210_udc *fotg210 = ep->fotg210;
142 static int fotg210_config_ep(struct fotg210_ep *ep,
145 struct fotg210_udc *fotg210 = ep->fotg210;
147 fotg210_set_fifo_dir(ep, ep->epnum, ep->dir_in);
148 fotg210_set_tfrtype(ep, ep->epnum, ep->type);
149 fotg210_set_mps(ep, ep->epnum, ep->ep.maxpacket, ep->dir_in);
150 fotg210_fifo_ep_mapping(ep, ep->epnum, ep->dir_in);
152 fotg210->ep[ep->epnum] = ep;
160 struct fotg210_ep *ep;
162 ep = container_of(_ep, struct fotg210_ep, ep);
164 ep->desc = desc;
165 ep->epnum = usb_endpoint_num(desc);
166 ep->type = usb_endpoint_type(desc);
167 ep->dir_in = usb_endpoint_dir_in(desc);
168 ep->ep.maxpacket = usb_endpoint_maxp(desc);
170 return fotg210_config_ep(ep, desc);
175 struct fotg210_ep *ep = fotg210->ep[epnum];
179 reg = (ep->dir_in) ?
196 static int fotg210_ep_release(struct fotg210_ep *ep)
198 if (!ep->epnum)
200 ep->epnum = 0;
201 ep->stall = 0;
202 ep->wedged = 0;
204 fotg210_reset_tseq(ep->fotg210, ep->epnum);
211 struct fotg210_ep *ep;
217 ep = container_of(_ep, struct fotg210_ep, ep);
219 while (!list_empty(&ep->queue)) {
220 req = list_entry(ep->queue.next,
222 spin_lock_irqsave(&ep->fotg210->lock, flags);
223 fotg210_done(ep, req, -ECONNRESET);
224 spin_unlock_irqrestore(&ep->fotg210->lock, flags);
227 return fotg210_ep_release(ep);
253 static void fotg210_enable_dma(struct fotg210_ep *ep,
257 struct fotg210_udc *fotg210 = ep->fotg210;
262 value |= DMACPSR1_DMA_LEN(len) | DMACPSR1_DMA_TYPE(ep->dir_in);
267 if (ep->epnum)
268 value |= DMATFNR_ACC_FN(ep->epnum - 1);
287 static void fotg210_disable_dma(struct fotg210_ep *ep)
289 iowrite32(DMATFNR_DISDMA, ep->fotg210->reg + FOTG210_DMATFNR);
292 static void fotg210_wait_dma_done(struct fotg210_ep *ep)
297 value = ioread32(ep->fotg210->reg + FOTG210_DISGR2);
304 iowrite32(value, ep->fotg210->reg + FOTG210_DISGR2);
308 value = ioread32(ep->fotg210->reg + FOTG210_DMACPSR1);
310 iowrite32(value, ep->fotg210->reg + FOTG210_DMACPSR1);
313 if (ep->epnum) {
314 value = ioread32(ep->fotg210->reg +
315 FOTG210_FIBCR(ep->epnum - 1));
317 iowrite32(value, ep->fotg210->reg +
318 FOTG210_FIBCR(ep->epnum - 1));
320 value = ioread32(ep->fotg210->reg + FOTG210_DCFESR);
322 iowrite32(value, ep->fotg210->reg + FOTG210_DCFESR);
326 static void fotg210_start_dma(struct fotg210_ep *ep,
329 struct device *dev = &ep->fotg210->gadget.dev;
334 if (ep->epnum) {
335 if (ep->dir_in) {
340 length = ioread32(ep->fotg210->reg +
341 FOTG210_FIBCR(ep->epnum - 1)) & FIBCR_BCFX;
347 if (req->req.length - req->req.actual > ep->ep.maxpacket)
348 length = ep->ep.maxpacket;
354 ep->dir_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
361 fotg210_enable_dma(ep, d, length);
364 fotg210_wait_dma_done(ep);
366 fotg210_disable_dma(ep);
374 static void fotg210_ep0_queue(struct fotg210_ep *ep,
378 fotg210_done(ep, req, 0);
381 if (ep->dir_in) { /* if IN */
382 fotg210_start_dma(ep, req);
384 fotg210_done(ep, req, 0);
386 u32 value = ioread32(ep->fotg210->reg + FOTG210_DMISGR0);
389 iowrite32(value, ep->fotg210->reg + FOTG210_DMISGR0);
396 struct fotg210_ep *ep;
401 ep = container_of(_ep, struct fotg210_ep, ep);
404 if (ep->fotg210->gadget.speed == USB_SPEED_UNKNOWN)
407 spin_lock_irqsave(&ep->fotg210->lock, flags);
409 if (list_empty(&ep->queue))
412 list_add_tail(&req->queue, &ep->queue);
417 if (!ep->epnum) /* ep0 */
418 fotg210_ep0_queue(ep, req);
419 else if (request && !ep->stall)
420 fotg210_enable_fifo_int(ep);
422 spin_unlock_irqrestore(&ep->fotg210->lock, flags);
429 struct fotg210_ep *ep;
433 ep = container_of(_ep, struct fotg210_ep, ep);
436 spin_lock_irqsave(&ep->fotg210->lock, flags);
437 if (!list_empty(&ep->queue))
438 fotg210_done(ep, req, -ECONNRESET);
439 spin_unlock_irqrestore(&ep->fotg210->lock, flags);
444 static void fotg210_set_epnstall(struct fotg210_ep *ep)
446 struct fotg210_udc *fotg210 = ep->fotg210;
451 if (ep->dir_in) {
454 } while (!(value & DCFESR_FIFO_EMPTY(ep->epnum - 1)));
457 reg = (ep->dir_in) ?
458 fotg210->reg + FOTG210_INEPMPSR(ep->epnum) :
459 fotg210->reg + FOTG210_OUTEPMPSR(ep->epnum);
465 static void fotg210_clear_epnstall(struct fotg210_ep *ep)
467 struct fotg210_udc *fotg210 = ep->fotg210;
471 reg = (ep->dir_in) ?
472 fotg210->reg + FOTG210_INEPMPSR(ep->epnum) :
473 fotg210->reg + FOTG210_OUTEPMPSR(ep->epnum);
481 struct fotg210_ep *ep;
485 ep = container_of(_ep, struct fotg210_ep, ep);
487 fotg210 = ep->fotg210;
489 spin_lock_irqsave(&ep->fotg210->lock, flags);
492 fotg210_set_epnstall(ep);
493 ep->stall = 1;
495 ep->wedged = 1;
497 fotg210_reset_tseq(fotg210, ep->epnum);
498 fotg210_clear_epnstall(ep);
499 ep->stall = 0;
500 ep->wedged = 0;
501 if (!list_empty(&ep->queue))
502 fotg210_enable_fifo_int(ep);
505 spin_unlock_irqrestore(&ep->fotg210->lock, flags);
654 fotg210_set_epnstall(fotg210->ep[epnum]);
669 struct fotg210_ep *ep =
670 fotg210->ep[ctrl->wIndex & USB_ENDPOINT_NUMBER_MASK];
681 if (ep->wedged) {
685 if (ep->stall)
686 fotg210_set_halt_and_wedge(&ep->ep, 0, 0);
696 static int fotg210_is_epnstall(struct fotg210_ep *ep)
698 struct fotg210_udc *fotg210 = ep->fotg210;
702 reg = (ep->dir_in) ?
703 fotg210->reg + FOTG210_INEPMPSR(ep->epnum) :
704 fotg210->reg + FOTG210_OUTEPMPSR(ep->epnum);
725 cpu_to_le16(fotg210_is_epnstall(fotg210->ep[epnum])
752 fotg210->ep[0]->dir_in = ctrl->bRequestType & USB_DIR_IN;
792 struct fotg210_ep *ep = fotg210->ep[0];
794 if (!list_empty(&ep->queue) && !ep->dir_in) {
797 req = list_first_entry(&ep->queue,
801 fotg210_start_dma(ep, req);
803 if ((req->req.length - req->req.actual) < ep->ep.maxpacket)
804 fotg210_done(ep, req, 0);
812 struct fotg210_ep *ep = fotg210->ep[0];
814 if ((!list_empty(&ep->queue)) && (ep->dir_in)) {
817 req = list_entry(ep->queue.next,
821 fotg210_start_dma(ep, req);
824 fotg210_done(ep, req, 0);
838 static void fotg210_in_fifo_handler(struct fotg210_ep *ep)
840 struct fotg210_request *req = list_entry(ep->queue.next,
844 fotg210_start_dma(ep, req);
845 fotg210_done(ep, req, 0);
848 static void fotg210_out_fifo_handler(struct fotg210_ep *ep)
850 struct fotg210_request *req = list_entry(ep->queue.next,
852 int disgr1 = ioread32(ep->fotg210->reg + FOTG210_DISGR1);
854 fotg210_start_dma(ep, req);
861 (disgr1 & DISGR1_SPK_INT(ep->epnum - 1)))
862 fotg210_done(ep, req, 0);
982 fotg210_in_fifo_handler(fotg210->ep[fifo + 1]);
986 fotg210_out_fifo_handler(fotg210->ep[fifo + 1]);
1078 fotg210_ep_free_request(&fotg210->ep[0]->ep, fotg210->ep0_req);
1080 kfree(fotg210->ep[i]);
1117 fotg210->ep[i] = _ep[i];
1140 struct fotg210_ep *ep = fotg210->ep[i];
1143 INIT_LIST_HEAD(&fotg210->ep[i]->ep.ep_list);
1144 list_add_tail(&fotg210->ep[i]->ep.ep_list,
1147 ep->fotg210 = fotg210;
1148 INIT_LIST_HEAD(&ep->queue);
1149 ep->ep.name = fotg210_ep_name[i];
1150 ep->ep.ops = &fotg210_ep_ops;
1151 usb_ep_set_maxpacket_limit(&ep->ep, (unsigned short) ~0);
1154 ep->ep.caps.type_control = true;
1156 ep->ep.caps.type_iso = true;
1157 ep->ep.caps.type_bulk = true;
1158 ep->ep.caps.type_int = true;
1161 ep->ep.caps.dir_in = true;
1162 ep->ep.caps.dir_out = true;
1164 usb_ep_set_maxpacket_limit(&fotg210->ep[0]->ep, 0x40);
1165 fotg210->gadget.ep0 = &fotg210->ep[0]->ep;
1168 fotg210->ep0_req = fotg210_ep_alloc_request(&fotg210->ep[0]->ep,
1196 fotg210_ep_free_request(&fotg210->ep[0]->ep, fotg210->ep0_req);
1203 kfree(fotg210->ep[i]);