Lines Matching refs:ep
106 static void assert_out_naking(struct net2272_ep *ep, const char *where) in assert_out_naking() argument
114 tmp = net2272_ep_read(ep, EP_STAT0); in assert_out_naking()
116 dev_dbg(ep->dev->dev, "%s %s %02x !NAK\n", in assert_out_naking()
117 ep->ep.name, where, tmp); in assert_out_naking()
118 net2272_ep_write(ep, EP_RSPSET, 1 << ALT_NAK_OUT_PACKETS); in assert_out_naking()
121 #define ASSERT_OUT_NAKING(ep) assert_out_naking(ep, __func__) argument
123 static void stop_out_naking(struct net2272_ep *ep) in stop_out_naking() argument
125 u8 tmp = net2272_ep_read(ep, EP_STAT0); in stop_out_naking()
128 net2272_ep_write(ep, EP_RSPCLR, 1 << ALT_NAK_OUT_PACKETS); in stop_out_naking()
178 struct net2272_ep *ep; in net2272_enable() local
183 ep = container_of(_ep, struct net2272_ep, ep); in net2272_enable()
184 if (!_ep || !desc || ep->desc || _ep->name == ep0name in net2272_enable()
187 dev = ep->dev; in net2272_enable()
195 ep->desc = desc; in net2272_enable()
198 ep->stopped = 0; in net2272_enable()
199 ep->wedged = 0; in net2272_enable()
202 net2272_ep_write(ep, EP_MAXPKT0, max & 0xff); in net2272_enable()
203 net2272_ep_write(ep, EP_MAXPKT1, (max & 0xff00) >> 8); in net2272_enable()
206 net2272_ep_write(ep, EP_STAT1, 1 << BUFFER_FLUSH); in net2272_enable()
216 ep->is_iso = usb_endpoint_xfer_isoc(desc) ? 1 : 0; in net2272_enable()
223 ep->is_in = usb_endpoint_dir_in(desc); in net2272_enable()
224 if (!ep->is_in) in net2272_enable()
225 net2272_ep_write(ep, EP_RSPSET, 1 << ALT_NAK_OUT_PACKETS); in net2272_enable()
227 net2272_ep_write(ep, EP_CFG, tmp); in net2272_enable()
230 tmp = (1 << ep->num) | net2272_read(dev, IRQENB0); in net2272_enable()
235 | net2272_ep_read(ep, EP_IRQENB); in net2272_enable()
236 net2272_ep_write(ep, EP_IRQENB, tmp); in net2272_enable()
242 net2272_ep_read(ep, EP_CFG)); in net2272_enable()
248 static void net2272_ep_reset(struct net2272_ep *ep) in net2272_ep_reset() argument
252 ep->desc = NULL; in net2272_ep_reset()
253 INIT_LIST_HEAD(&ep->queue); in net2272_ep_reset()
255 usb_ep_set_maxpacket_limit(&ep->ep, ~0); in net2272_ep_reset()
256 ep->ep.ops = &net2272_ep_ops; in net2272_ep_reset()
259 net2272_ep_write(ep, EP_IRQENB, 0); in net2272_ep_reset()
265 net2272_ep_write(ep, EP_RSPSET, tmp); in net2272_ep_reset()
268 if (ep->num != 0) in net2272_ep_reset()
271 net2272_ep_write(ep, EP_RSPCLR, tmp); in net2272_ep_reset()
274 net2272_ep_write(ep, EP_STAT0, in net2272_ep_reset()
281 net2272_ep_write(ep, EP_STAT1, in net2272_ep_reset()
296 struct net2272_ep *ep; in net2272_disable() local
299 ep = container_of(_ep, struct net2272_ep, ep); in net2272_disable()
300 if (!_ep || !ep->desc || _ep->name == ep0name) in net2272_disable()
303 spin_lock_irqsave(&ep->dev->lock, flags); in net2272_disable()
304 net2272_dequeue_all(ep); in net2272_disable()
305 net2272_ep_reset(ep); in net2272_disable()
307 dev_vdbg(ep->dev->dev, "disabled %s\n", _ep->name); in net2272_disable()
309 spin_unlock_irqrestore(&ep->dev->lock, flags); in net2272_disable()
346 net2272_done(struct net2272_ep *ep, struct net2272_request *req, int status) in net2272_done() argument
349 unsigned stopped = ep->stopped; in net2272_done()
351 if (ep->num == 0) { in net2272_done()
352 if (ep->dev->protocol_stall) { in net2272_done()
353 ep->stopped = 1; in net2272_done()
354 set_halt(ep); in net2272_done()
356 allow_status(ep); in net2272_done()
366 dev = ep->dev; in net2272_done()
367 if (use_dma && ep->dma) in net2272_done()
369 ep->is_in); in net2272_done()
373 ep->ep.name, &req->req, status, in net2272_done()
377 ep->stopped = 1; in net2272_done()
379 usb_gadget_giveback_request(&ep->ep, &req->req); in net2272_done()
381 ep->stopped = stopped; in net2272_done()
385 net2272_write_packet(struct net2272_ep *ep, u8 *buf, in net2272_write_packet() argument
388 u16 __iomem *ep_data = net2272_reg_addr(ep->dev, EP_DATA); in net2272_write_packet()
396 dev_vdbg(ep->dev->dev, "write packet %s req %p max %u len %u avail %u\n", in net2272_write_packet()
397 ep->ep.name, req, max, length, in net2272_write_packet()
398 (net2272_ep_read(ep, EP_AVAIL1) << 8) | net2272_ep_read(ep, EP_AVAIL0)); in net2272_write_packet()
412 tmp = net2272_read(ep->dev, LOCCTL); in net2272_write_packet()
413 net2272_write(ep->dev, LOCCTL, tmp & ~(1 << DATA_WIDTH)); in net2272_write_packet()
415 net2272_write(ep->dev, LOCCTL, tmp); in net2272_write_packet()
422 net2272_write_fifo(struct net2272_ep *ep, struct net2272_request *req) in net2272_write_fifo() argument
428 dev_vdbg(ep->dev->dev, "write_fifo %s actual %d len %d\n", in net2272_write_fifo()
429 ep->ep.name, req->req.actual, req->req.length); in net2272_write_fifo()
441 net2272_ep_write(ep, EP_STAT0, (1 << DATA_PACKET_TRANSMITTED_INTERRUPT)); in net2272_write_fifo()
442 while (!(net2272_ep_read(ep, EP_STAT0) & (1 << BUFFER_FULL))) { in net2272_write_fifo()
447 net2272_ep_read(ep, EP_STAT0); in net2272_write_fifo()
449 max = (net2272_ep_read(ep, EP_AVAIL1) << 8) | in net2272_write_fifo()
450 (net2272_ep_read(ep, EP_AVAIL0)); in net2272_write_fifo()
452 if (max < ep->ep.maxpacket) in net2272_write_fifo()
453 max = (net2272_ep_read(ep, EP_AVAIL1) << 8) in net2272_write_fifo()
454 | (net2272_ep_read(ep, EP_AVAIL0)); in net2272_write_fifo()
456 count = net2272_write_packet(ep, buf, req, max); in net2272_write_fifo()
460 if (count < ep->ep.maxpacket) in net2272_write_fifo()
461 set_fifo_bytecount(ep, 0); in net2272_write_fifo()
462 net2272_done(ep, req, 0); in net2272_write_fifo()
464 if (!list_empty(&ep->queue)) { in net2272_write_fifo()
465 req = list_entry(ep->queue.next, in net2272_write_fifo()
468 status = net2272_kick_dma(ep, req); in net2272_write_fifo()
471 if ((net2272_ep_read(ep, EP_STAT0) in net2272_write_fifo()
477 net2272_ep_write(ep, EP_STAT0, (1 << DATA_PACKET_TRANSMITTED_INTERRUPT)); in net2272_write_fifo()
483 net2272_out_flush(struct net2272_ep *ep) in net2272_out_flush() argument
485 ASSERT_OUT_NAKING(ep); in net2272_out_flush()
487 net2272_ep_write(ep, EP_STAT0, (1 << DATA_OUT_TOKEN_INTERRUPT) in net2272_out_flush()
489 net2272_ep_write(ep, EP_STAT1, 1 << BUFFER_FLUSH); in net2272_out_flush()
493 net2272_read_packet(struct net2272_ep *ep, u8 *buf, in net2272_read_packet() argument
496 u16 __iomem *ep_data = net2272_reg_addr(ep->dev, EP_DATA); in net2272_read_packet()
502 dev_vdbg(ep->dev->dev, "read packet %s req %p len %u avail %u\n", in net2272_read_packet()
503 ep->ep.name, req, avail, in net2272_read_packet()
504 (net2272_ep_read(ep, EP_AVAIL1) << 8) | net2272_ep_read(ep, EP_AVAIL0)); in net2272_read_packet()
506 is_short = (avail < ep->ep.maxpacket); in net2272_read_packet()
528 if (net2272_ep_read(ep, EP_STAT0) & (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT)) in net2272_read_packet()
529 net2272_ep_read(ep, EP_STAT0); in net2272_read_packet()
535 net2272_read_fifo(struct net2272_ep *ep, struct net2272_request *req) in net2272_read_fifo() argument
543 dev_vdbg(ep->dev->dev, "read_fifo %s actual %d len %d\n", in net2272_read_fifo()
544 ep->ep.name, req->req.actual, req->req.length); in net2272_read_fifo()
551 count = (net2272_ep_read(ep, EP_AVAIL1) << 8) in net2272_read_fifo()
552 | net2272_ep_read(ep, EP_AVAIL0); in net2272_read_fifo()
554 net2272_ep_write(ep, EP_STAT0, in net2272_read_fifo()
561 if ((tmp % ep->ep.maxpacket) != 0) { in net2272_read_fifo()
562 dev_err(ep->dev->dev, in net2272_read_fifo()
564 ep->ep.name, count, tmp); in net2272_read_fifo()
570 is_short = net2272_read_packet(ep, buf, req, count); in net2272_read_fifo()
577 net2272_out_flush(ep); in net2272_read_fifo()
578 net2272_done(ep, req, -EOVERFLOW); in net2272_read_fifo()
580 net2272_done(ep, req, 0); in net2272_read_fifo()
586 if (unlikely(ep->num == 0)) { in net2272_read_fifo()
587 net2272_ep_write(ep, EP_TRANSFER2, 0); in net2272_read_fifo()
588 net2272_ep_write(ep, EP_TRANSFER1, 0); in net2272_read_fifo()
589 net2272_ep_write(ep, EP_TRANSFER0, 0); in net2272_read_fifo()
592 if (!list_empty(&ep->queue)) { in net2272_read_fifo()
595 req = list_entry(ep->queue.next, in net2272_read_fifo()
597 status = net2272_kick_dma(ep, req); in net2272_read_fifo()
599 !(net2272_ep_read(ep, EP_STAT0) & (1 << BUFFER_EMPTY))) in net2272_read_fifo()
604 } while (!(net2272_ep_read(ep, EP_STAT0) & (1 << BUFFER_EMPTY))); in net2272_read_fifo()
610 net2272_pio_advance(struct net2272_ep *ep) in net2272_pio_advance() argument
614 if (unlikely(list_empty(&ep->queue))) in net2272_pio_advance()
617 req = list_entry(ep->queue.next, struct net2272_request, queue); in net2272_pio_advance()
618 (ep->is_in ? net2272_write_fifo : net2272_read_fifo)(ep, req); in net2272_pio_advance()
623 net2272_request_dma(struct net2272 *dev, unsigned ep, u32 buf, in net2272_request_dma() argument
627 ep, buf, len, dir); in net2272_request_dma()
679 ((ep >> 1) << DMA_ENDPOINT_SELECT)); in net2272_request_dma()
702 net2272_kick_dma(struct net2272_ep *ep, struct net2272_request *req) in net2272_kick_dma() argument
707 if (!use_dma || (ep->num < 1) || (ep->num > 2) || !ep->dma) in net2272_kick_dma()
716 dev_vdbg(ep->dev->dev, "kick_dma %s req %p dma %08llx\n", in net2272_kick_dma()
717 ep->ep.name, req, (unsigned long long) req->req.dma); in net2272_kick_dma()
719 net2272_ep_write(ep, EP_RSPSET, 1 << ALT_NAK_OUT_PACKETS); in net2272_kick_dma()
722 if (ep->dev->dma_busy) in net2272_kick_dma()
732 if (ep->is_in) { in net2272_kick_dma()
734 if (net2272_request_dma(ep->dev, ep->num, req->req.dma, size, 0)) in net2272_kick_dma()
741 tmp = net2272_ep_read(ep, EP_STAT0); in net2272_kick_dma()
744 if (net2272_request_dma(ep->dev, ep->num, req->req.dma, size, 1)) in net2272_kick_dma()
749 ep->not_empty = 1; in net2272_kick_dma()
751 ep->not_empty = 0; in net2272_kick_dma()
755 net2272_ep_write(ep, EP_RSPCLR, 1 << ALT_NAK_OUT_PACKETS); in net2272_kick_dma()
763 net2272_write(ep->dev, DMAREQ, in net2272_kick_dma()
767 (ep->dev->dma_eot_polarity << EOT_POLARITY) | in net2272_kick_dma()
768 (ep->dev->dma_dack_polarity << DACK_POLARITY) | in net2272_kick_dma()
769 (ep->dev->dma_dreq_polarity << DREQ_POLARITY) | in net2272_kick_dma()
770 ((ep->num >> 1) << DMA_ENDPOINT_SELECT)); in net2272_kick_dma()
777 net2272_ep_write(ep, EP_IRQENB, 0); in net2272_kick_dma()
779 net2272_start_dma(ep->dev); in net2272_kick_dma()
811 struct net2272_ep *ep; in net2272_queue() local
821 ep = container_of(_ep, struct net2272_ep, ep); in net2272_queue()
822 if (!_ep || (!ep->desc && ep->num != 0)) in net2272_queue()
824 dev = ep->dev; in net2272_queue()
829 if (use_dma && ep->dma) { in net2272_queue()
831 ep->is_in); in net2272_queue()
846 if (list_empty(&ep->queue) && !ep->stopped) { in net2272_queue()
848 if (ep->num == 0 && _req->length == 0) { in net2272_queue()
849 net2272_done(ep, req, 0); in net2272_queue()
850 dev_vdbg(dev->dev, "%s status ack\n", ep->ep.name); in net2272_queue()
855 s = net2272_ep_read(ep, EP_STAT0); in net2272_queue()
859 net2272_ep_read(ep, EP_STAT1) & (1 << LOCAL_OUT_ZLP)) { in net2272_queue()
865 status = net2272_read_fifo(ep, req); in net2272_queue()
867 net2272_ep_write(ep, EP_STAT0, (1 << NAK_OUT_PACKETS)); in net2272_queue()
873 status = net2272_kick_dma(ep, req); in net2272_queue()
881 if (ep->is_in) in net2272_queue()
882 status = net2272_write_fifo(ep, req); in net2272_queue()
884 s = net2272_ep_read(ep, EP_STAT0); in net2272_queue()
886 status = net2272_read_fifo(ep, req); in net2272_queue()
897 list_add_tail(&req->queue, &ep->queue); in net2272_queue()
899 if (likely(!list_empty(&ep->queue))) in net2272_queue()
900 net2272_ep_write(ep, EP_RSPCLR, 1 << ALT_NAK_OUT_PACKETS); in net2272_queue()
909 net2272_dequeue_all(struct net2272_ep *ep) in net2272_dequeue_all() argument
914 ep->stopped = 1; in net2272_dequeue_all()
916 while (!list_empty(&ep->queue)) { in net2272_dequeue_all()
917 req = list_entry(ep->queue.next, in net2272_dequeue_all()
920 net2272_done(ep, req, -ESHUTDOWN); in net2272_dequeue_all()
928 struct net2272_ep *ep; in net2272_dequeue() local
933 ep = container_of(_ep, struct net2272_ep, ep); in net2272_dequeue()
934 if (!_ep || (!ep->desc && ep->num != 0) || !_req) in net2272_dequeue()
937 spin_lock_irqsave(&ep->dev->lock, flags); in net2272_dequeue()
938 stopped = ep->stopped; in net2272_dequeue()
939 ep->stopped = 1; in net2272_dequeue()
942 list_for_each_entry(req, &ep->queue, queue) { in net2272_dequeue()
947 ep->stopped = stopped; in net2272_dequeue()
948 spin_unlock_irqrestore(&ep->dev->lock, flags); in net2272_dequeue()
953 if (ep->queue.next == &req->queue) { in net2272_dequeue()
954 dev_dbg(ep->dev->dev, "unlink (%s) pio\n", _ep->name); in net2272_dequeue()
955 net2272_done(ep, req, -ECONNRESET); in net2272_dequeue()
958 ep->stopped = stopped; in net2272_dequeue()
960 spin_unlock_irqrestore(&ep->dev->lock, flags); in net2272_dequeue()
969 struct net2272_ep *ep; in net2272_set_halt_and_wedge() local
973 ep = container_of(_ep, struct net2272_ep, ep); in net2272_set_halt_and_wedge()
974 if (!_ep || (!ep->desc && ep->num != 0)) in net2272_set_halt_and_wedge()
976 if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN) in net2272_set_halt_and_wedge()
978 if (ep->desc /* not ep0 */ && usb_endpoint_xfer_isoc(ep->desc)) in net2272_set_halt_and_wedge()
981 spin_lock_irqsave(&ep->dev->lock, flags); in net2272_set_halt_and_wedge()
982 if (!list_empty(&ep->queue)) in net2272_set_halt_and_wedge()
984 else if (ep->is_in && value && net2272_fifo_status(_ep) != 0) in net2272_set_halt_and_wedge()
987 dev_vdbg(ep->dev->dev, "%s %s %s\n", _ep->name, in net2272_set_halt_and_wedge()
992 if (ep->num == 0) in net2272_set_halt_and_wedge()
993 ep->dev->protocol_stall = 1; in net2272_set_halt_and_wedge()
995 set_halt(ep); in net2272_set_halt_and_wedge()
997 ep->wedged = 1; in net2272_set_halt_and_wedge()
999 clear_halt(ep); in net2272_set_halt_and_wedge()
1000 ep->wedged = 0; in net2272_set_halt_and_wedge()
1003 spin_unlock_irqrestore(&ep->dev->lock, flags); in net2272_set_halt_and_wedge()
1025 struct net2272_ep *ep; in net2272_fifo_status() local
1028 ep = container_of(_ep, struct net2272_ep, ep); in net2272_fifo_status()
1029 if (!_ep || (!ep->desc && ep->num != 0)) in net2272_fifo_status()
1031 if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN) in net2272_fifo_status()
1034 avail = net2272_ep_read(ep, EP_AVAIL1) << 8; in net2272_fifo_status()
1035 avail |= net2272_ep_read(ep, EP_AVAIL0); in net2272_fifo_status()
1036 if (avail > ep->fifo_size) in net2272_fifo_status()
1038 if (ep->is_in) in net2272_fifo_status()
1039 avail = ep->fifo_size - avail; in net2272_fifo_status()
1046 struct net2272_ep *ep; in net2272_fifo_flush() local
1048 ep = container_of(_ep, struct net2272_ep, ep); in net2272_fifo_flush()
1049 if (!_ep || (!ep->desc && ep->num != 0)) in net2272_fifo_flush()
1051 if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN) in net2272_fifo_flush()
1054 net2272_ep_write(ep, EP_STAT1, 1 << BUFFER_FLUSH); in net2272_fifo_flush()
1228 struct net2272_ep *ep; in registers_show() local
1230 ep = &dev->ep[i]; in registers_show()
1231 if (i && !ep->desc) in registers_show()
1234 t1 = net2272_ep_read(ep, EP_CFG); in registers_show()
1235 t2 = net2272_ep_read(ep, EP_RSPSET); in registers_show()
1239 ep->ep.name, t1, t2, in registers_show()
1248 net2272_ep_read(ep, EP_IRQENB)); in registers_show()
1255 net2272_ep_read(ep, EP_STAT0), in registers_show()
1256 net2272_ep_read(ep, EP_STAT1), in registers_show()
1257 (net2272_ep_read(ep, EP_AVAIL1) << 8) | net2272_ep_read(ep, EP_AVAIL0), in registers_show()
1259 ep->is_in ? "in" : "out", in registers_show()
1261 ep->stopped ? "*" : ""); in registers_show()
1267 ((net2272_ep_read(ep, EP_TRANSFER2) & 0xff) << 16) | in registers_show()
1268 ((net2272_ep_read(ep, EP_TRANSFER1) & 0xff) << 8) | in registers_show()
1269 ((net2272_ep_read(ep, EP_TRANSFER0) & 0xff))); in registers_show()
1273 t1 = net2272_ep_read(ep, EP_BUFF_STATES) & 0x03; in registers_show()
1274 t2 = (net2272_ep_read(ep, EP_BUFF_STATES) >> 2) & 0x03; in registers_show()
1303 list_add_tail(&dev->ep[1].ep.ep_list, &dev->gadget.ep_list); in net2272_set_fifo_mode()
1307 list_add_tail(&dev->ep[2].ep.ep_list, &dev->gadget.ep_list); in net2272_set_fifo_mode()
1308 dev->ep[1].fifo_size = dev->ep[2].fifo_size = 512; in net2272_set_fifo_mode()
1311 list_add_tail(&dev->ep[2].ep.ep_list, &dev->gadget.ep_list); in net2272_set_fifo_mode()
1312 dev->ep[1].fifo_size = 1024; in net2272_set_fifo_mode()
1313 dev->ep[2].fifo_size = 512; in net2272_set_fifo_mode()
1316 list_add_tail(&dev->ep[2].ep.ep_list, &dev->gadget.ep_list); in net2272_set_fifo_mode()
1317 dev->ep[1].fifo_size = dev->ep[2].fifo_size = 1024; in net2272_set_fifo_mode()
1320 dev->ep[1].fifo_size = 1024; in net2272_set_fifo_mode()
1325 list_add_tail(&dev->ep[3].ep.ep_list, &dev->gadget.ep_list); in net2272_set_fifo_mode()
1326 dev->ep[3].fifo_size = 512; in net2272_set_fifo_mode()
1372 struct net2272_ep *ep = &dev->ep[i]; in net2272_usb_reinit() local
1374 ep->ep.name = ep_name[i]; in net2272_usb_reinit()
1375 ep->dev = dev; in net2272_usb_reinit()
1376 ep->num = i; in net2272_usb_reinit()
1377 ep->not_empty = 0; in net2272_usb_reinit()
1379 if (use_dma && ep->num == dma_ep) in net2272_usb_reinit()
1380 ep->dma = 1; in net2272_usb_reinit()
1383 ep->fifo_size = 512; in net2272_usb_reinit()
1385 ep->fifo_size = 64; in net2272_usb_reinit()
1386 net2272_ep_reset(ep); in net2272_usb_reinit()
1389 ep->ep.caps.type_control = true; in net2272_usb_reinit()
1391 ep->ep.caps.type_iso = true; in net2272_usb_reinit()
1392 ep->ep.caps.type_bulk = true; in net2272_usb_reinit()
1393 ep->ep.caps.type_int = true; in net2272_usb_reinit()
1396 ep->ep.caps.dir_in = true; in net2272_usb_reinit()
1397 ep->ep.caps.dir_out = true; in net2272_usb_reinit()
1399 usb_ep_set_maxpacket_limit(&dev->ep[0].ep, 64); in net2272_usb_reinit()
1401 dev->gadget.ep0 = &dev->ep[0].ep; in net2272_usb_reinit()
1402 dev->ep[0].stopped = 0; in net2272_usb_reinit()
1409 struct net2272_ep *ep0 = &dev->ep[0]; in net2272_ep0_start()
1450 dev->ep[i].irqs = 0; in net2272_start()
1478 net2272_dequeue_all(&dev->ep[i]); in stop_activity()
1518 net2272_handle_dma(struct net2272_ep *ep) in net2272_handle_dma() argument
1524 if (!list_empty(&ep->queue)) in net2272_handle_dma()
1525 req = list_entry(ep->queue.next, in net2272_handle_dma()
1530 dev_vdbg(ep->dev->dev, "handle_dma %s req %p\n", ep->ep.name, req); in net2272_handle_dma()
1533 net2272_write(ep->dev, DMAREQ, in net2272_handle_dma()
1537 | (ep->dev->dma_eot_polarity << EOT_POLARITY) in net2272_handle_dma()
1538 | (ep->dev->dma_dack_polarity << DACK_POLARITY) in net2272_handle_dma()
1539 | (ep->dev->dma_dreq_polarity << DREQ_POLARITY) in net2272_handle_dma()
1540 | (ep->dma << DMA_ENDPOINT_SELECT)); in net2272_handle_dma()
1542 ep->dev->dma_busy = 0; in net2272_handle_dma()
1544 net2272_ep_write(ep, EP_IRQENB, in net2272_handle_dma()
1547 | net2272_ep_read(ep, EP_IRQENB)); in net2272_handle_dma()
1550 if (ep->is_in) { in net2272_handle_dma()
1552 if ((req->req.length % ep->ep.maxpacket != 0) || in net2272_handle_dma()
1554 set_fifo_bytecount(ep, 0); in net2272_handle_dma()
1556 net2272_done(ep, req, 0); in net2272_handle_dma()
1557 if (!list_empty(&ep->queue)) { in net2272_handle_dma()
1558 req = list_entry(ep->queue.next, in net2272_handle_dma()
1560 status = net2272_kick_dma(ep, req); in net2272_handle_dma()
1562 net2272_pio_advance(ep); in net2272_handle_dma()
1568 if (net2272_read(ep->dev, IRQSTAT0) & in net2272_handle_dma()
1571 net2272_cancel_dma(ep->dev); in net2272_handle_dma()
1579 len = (net2272_ep_read(ep, EP_TRANSFER2) << 16) in net2272_handle_dma()
1580 | (net2272_ep_read(ep, EP_TRANSFER1) << 8) in net2272_handle_dma()
1581 | (net2272_ep_read(ep, EP_TRANSFER0)); in net2272_handle_dma()
1583 if (ep->not_empty) in net2272_handle_dma()
1589 net2272_pio_advance(ep); in net2272_handle_dma()
1596 net2272_handle_ep(struct net2272_ep *ep) in net2272_handle_ep() argument
1601 if (!list_empty(&ep->queue)) in net2272_handle_ep()
1602 req = list_entry(ep->queue.next, in net2272_handle_ep()
1608 stat0 = net2272_ep_read(ep, EP_STAT0); in net2272_handle_ep()
1609 stat1 = net2272_ep_read(ep, EP_STAT1); in net2272_handle_ep()
1610 ep->irqs++; in net2272_handle_ep()
1612 dev_vdbg(ep->dev->dev, "%s ack ep_stat0 %02x, ep_stat1 %02x, req %p\n", in net2272_handle_ep()
1613 ep->ep.name, stat0, stat1, req ? &req->req : NULL); in net2272_handle_ep()
1615 net2272_ep_write(ep, EP_STAT0, stat0 & in net2272_handle_ep()
1618 net2272_ep_write(ep, EP_STAT1, stat1); in net2272_handle_ep()
1624 if (!ep->is_in && (stat0 & (1 << DATA_PACKET_RECEIVED_INTERRUPT))) in net2272_handle_ep()
1625 net2272_pio_advance(ep); in net2272_handle_ep()
1628 net2272_pio_advance(ep); in net2272_handle_ep()
1634 struct net2272_ep *ep; in net2272_get_ep_by_addr() local
1637 return &dev->ep[0]; in net2272_get_ep_by_addr()
1639 list_for_each_entry(ep, &dev->gadget.ep_list, ep.ep_list) { in net2272_get_ep_by_addr()
1642 if (!ep->desc) in net2272_get_ep_by_addr()
1644 bEndpointAddress = ep->desc->bEndpointAddress; in net2272_get_ep_by_addr()
1648 return ep; in net2272_get_ep_by_addr()
1718 struct net2272_ep *ep; in net2272_handle_stat0_irqs() local
1739 ep = &dev->ep[0]; in net2272_handle_stat0_irqs()
1740 ep->irqs++; in net2272_handle_stat0_irqs()
1744 while (!list_empty(&ep->queue)) { in net2272_handle_stat0_irqs()
1745 req = list_entry(ep->queue.next, in net2272_handle_stat0_irqs()
1747 net2272_done(ep, req, in net2272_handle_stat0_irqs()
1750 ep->stopped = 0; in net2272_handle_stat0_irqs()
1752 net2272_ep_write(ep, EP_STAT0, in net2272_handle_stat0_irqs()
1758 net2272_ep_write(ep, EP_STAT1, in net2272_handle_stat0_irqs()
1804 ep->is_in = (u.r.bRequestType & USB_DIR_IN) != 0; in net2272_handle_stat0_irqs()
1805 if (ep->is_in) { in net2272_handle_stat0_irqs()
1809 stop_out_naking(ep); in net2272_handle_stat0_irqs()
1814 net2272_ep_write(ep, EP_IRQENB, scratch); in net2272_handle_stat0_irqs()
1834 net2272_ep_write(&dev->ep[0], EP_IRQENB, 0); in net2272_handle_stat0_irqs()
1836 set_fifo_bytecount(&dev->ep[0], 0); in net2272_handle_stat0_irqs()
1837 allow_status(ep); in net2272_handle_stat0_irqs()
1839 ep->ep.name, status); in net2272_handle_stat0_irqs()
1848 net2272_ep_write(&dev->ep[0], EP_IRQENB, 0); in net2272_handle_stat0_irqs()
1850 set_fifo_bytecount(&dev->ep[0], 0); in net2272_handle_stat0_irqs()
1851 allow_status(ep); in net2272_handle_stat0_irqs()
1859 net2272_ep_write(&dev->ep[0], EP_IRQENB, 0); in net2272_handle_stat0_irqs()
1861 set_fifo_bytecount(&dev->ep[0], 0); in net2272_handle_stat0_irqs()
1862 allow_status(ep); in net2272_handle_stat0_irqs()
1882 ep->ep.name); in net2272_handle_stat0_irqs()
1884 dev_vdbg(dev->dev, "%s clear halt\n", ep->ep.name); in net2272_handle_stat0_irqs()
1887 allow_status(ep); in net2272_handle_stat0_irqs()
1896 allow_status(ep); in net2272_handle_stat0_irqs()
1908 allow_status(ep); in net2272_handle_stat0_irqs()
1909 dev_vdbg(dev->dev, "%s set halt\n", ep->ep.name); in net2272_handle_stat0_irqs()
1914 allow_status(ep); in net2272_handle_stat0_irqs()
1923 net2272_ep_read(ep, EP_CFG)); in net2272_handle_stat0_irqs()
1946 ep = &dev->ep[num]; in net2272_handle_stat0_irqs()
1947 net2272_handle_dma(ep); in net2272_handle_stat0_irqs()
1963 ep = &dev->ep[num]; in net2272_handle_stat0_irqs()
1964 net2272_handle_ep(ep); in net2272_handle_stat0_irqs()
2086 net2272_handle_dma(&dev->ep[2]); in net2272_irq()
2088 net2272_handle_dma(&dev->ep[1]); in net2272_irq()