Lines Matching refs:ep

127 static inline void enable_pciirqenb(struct net2280_ep *ep)  in enable_pciirqenb()  argument
129 u32 tmp = readl(&ep->dev->regs->pciirqenb0); in enable_pciirqenb()
131 if (ep->dev->quirks & PLX_LEGACY) in enable_pciirqenb()
132 tmp |= BIT(ep->num); in enable_pciirqenb()
134 tmp |= BIT(ep_bit[ep->num]); in enable_pciirqenb()
135 writel(tmp, &ep->dev->regs->pciirqenb0); in enable_pciirqenb()
144 struct net2280_ep *ep; in net2280_enable() local
150 ep = container_of(_ep, struct net2280_ep, ep); in net2280_enable()
151 if (!_ep || !desc || ep->desc || _ep->name == ep0name || in net2280_enable()
156 dev = ep->dev; in net2280_enable()
173 ep->is_in = !!usb_endpoint_dir_in(desc); in net2280_enable()
174 if (dev->enhanced_mode && ep->is_in && ep_key[ep->num]) { in net2280_enable()
182 if (ep->num > 4 && max > 64 && (dev->quirks & PLX_LEGACY)) { in net2280_enable()
189 ep->desc = desc; in net2280_enable()
192 ep->stopped = 0; in net2280_enable()
193 ep->wedged = 0; in net2280_enable()
194 ep->out_overflow = 0; in net2280_enable()
197 set_max_speed(ep, max); in net2280_enable()
200 writel(BIT(FIFO_FLUSH), &ep->regs->ep_stat); in net2280_enable()
208 &ep->regs->ep_rsp); in net2280_enable()
219 ep->is_iso = (tmp == USB_ENDPOINT_XFER_ISOC); in net2280_enable()
227 ep->is_in = (tmp & USB_DIR_IN) != 0; in net2280_enable()
230 if (dev->enhanced_mode && ep->is_in) { in net2280_enable()
238 tmp |= (ep->is_in << ENDPOINT_DIRECTION); in net2280_enable()
242 tmp |= (ep->ep.maxburst << MAX_BURST_SIZE); in net2280_enable()
249 if (!ep->is_in) in net2280_enable()
250 writel(BIT(SET_NAK_OUT_PACKETS), &ep->regs->ep_rsp); in net2280_enable()
256 BIT(CLEAR_NAK_OUT_PACKETS_MODE), &ep->regs->ep_rsp); in net2280_enable()
259 writel(tmp, &ep->cfg->ep_cfg); in net2280_enable()
262 if (!ep->dma) { /* pio, per-packet */ in net2280_enable()
263 enable_pciirqenb(ep); in net2280_enable()
268 tmp |= readl(&ep->regs->ep_irqenb); in net2280_enable()
269 writel(tmp, &ep->regs->ep_irqenb); in net2280_enable()
271 tmp = BIT((8 + ep->num)); /* completion */ in net2280_enable()
281 writel(tmp, &ep->regs->ep_irqenb); in net2280_enable()
283 enable_pciirqenb(ep); in net2280_enable()
291 ep->dma ? "dma" : "pio", max); in net2280_enable()
298 dev_err(&ep->dev->pdev->dev, "%s: error=%d\n", __func__, ret); in net2280_enable()
322 struct net2280_ep *ep) in ep_reset_228x() argument
326 ep->desc = NULL; in ep_reset_228x()
327 INIT_LIST_HEAD(&ep->queue); in ep_reset_228x()
329 usb_ep_set_maxpacket_limit(&ep->ep, ~0); in ep_reset_228x()
330 ep->ep.ops = &net2280_ep_ops; in ep_reset_228x()
333 if (ep->dma) { in ep_reset_228x()
334 writel(0, &ep->dma->dmactl); in ep_reset_228x()
338 &ep->dma->dmastat); in ep_reset_228x()
341 tmp &= ~BIT(ep->num); in ep_reset_228x()
345 tmp &= ~BIT((8 + ep->num)); /* completion */ in ep_reset_228x()
348 writel(0, &ep->regs->ep_irqenb); in ep_reset_228x()
353 if (!ep->is_in || (ep->dev->quirks & PLX_2280)) { in ep_reset_228x()
366 if (ep->num != 0) { in ep_reset_228x()
370 writel(tmp, &ep->regs->ep_rsp); in ep_reset_228x()
373 if (ep->dev->quirks & PLX_2280) in ep_reset_228x()
392 &ep->regs->ep_stat); in ep_reset_228x()
398 struct net2280_ep *ep) in ep_reset_338x() argument
402 ep->desc = NULL; in ep_reset_338x()
403 INIT_LIST_HEAD(&ep->queue); in ep_reset_338x()
405 usb_ep_set_maxpacket_limit(&ep->ep, ~0); in ep_reset_338x()
406 ep->ep.ops = &net2280_ep_ops; in ep_reset_338x()
409 if (ep->dma) { in ep_reset_338x()
410 writel(0, &ep->dma->dmactl); in ep_reset_338x()
416 &ep->dma->dmastat); in ep_reset_338x()
418 dmastat = readl(&ep->dma->dmastat); in ep_reset_338x()
420 ep_warn(ep->dev, "The dmastat return = %x!!\n", in ep_reset_338x()
422 writel(0x5a, &ep->dma->dmastat); in ep_reset_338x()
426 tmp &= ~BIT(ep_bit[ep->num]); in ep_reset_338x()
429 if (ep->num < 5) { in ep_reset_338x()
431 tmp &= ~BIT((8 + ep->num)); /* completion */ in ep_reset_338x()
435 writel(0, &ep->regs->ep_irqenb); in ep_reset_338x()
443 BIT(DATA_IN_TOKEN_INTERRUPT), &ep->regs->ep_stat); in ep_reset_338x()
450 struct net2280_ep *ep; in net2280_disable() local
453 ep = container_of(_ep, struct net2280_ep, ep); in net2280_disable()
454 if (!_ep || !ep->desc || _ep->name == ep0name) { in net2280_disable()
458 spin_lock_irqsave(&ep->dev->lock, flags); in net2280_disable()
459 nuke(ep); in net2280_disable()
461 if (ep->dev->quirks & PLX_SUPERSPEED) in net2280_disable()
462 ep_reset_338x(ep->dev->regs, ep); in net2280_disable()
464 ep_reset_228x(ep->dev->regs, ep); in net2280_disable()
466 ep_vdbg(ep->dev, "disabled %s %s\n", in net2280_disable()
467 ep->dma ? "dma" : "pio", _ep->name); in net2280_disable()
470 (void)readl(&ep->cfg->ep_cfg); in net2280_disable()
472 if (!ep->dma && ep->num >= 1 && ep->num <= 4) in net2280_disable()
473 ep->dma = &ep->dev->dma[ep->num - 1]; in net2280_disable()
475 spin_unlock_irqrestore(&ep->dev->lock, flags); in net2280_disable()
484 struct net2280_ep *ep; in net2280_alloc_request() local
491 ep = container_of(_ep, struct net2280_ep, ep); in net2280_alloc_request()
500 if (ep->dma) { in net2280_alloc_request()
503 td = pci_pool_alloc(ep->dev->requests, gfp_flags, in net2280_alloc_request()
518 struct net2280_ep *ep; in net2280_free_request() local
521 ep = container_of(_ep, struct net2280_ep, ep); in net2280_free_request()
523 dev_err(&ep->dev->pdev->dev, "%s: Inavlid ep=%p or req=%p\n", in net2280_free_request()
531 pci_pool_free(ep->dev->requests, req->td, req->td_dma); in net2280_free_request()
544 static void write_fifo(struct net2280_ep *ep, struct usb_request *req) in write_fifo() argument
546 struct net2280_ep_regs __iomem *regs = ep->regs; in write_fifo()
563 count = ep->ep.maxpacket; in write_fifo()
567 ep_vdbg(ep->dev, "write %s fifo (IN) %d bytes%s req %p\n", in write_fifo()
568 ep->ep.name, count, in write_fifo()
569 (count != ep->ep.maxpacket) ? " (short)" : "", in write_fifo()
587 if (count || total < ep->ep.maxpacket) { in write_fifo()
590 set_fifo_bytecount(ep, count & 0x03); in write_fifo()
604 static void out_flush(struct net2280_ep *ep) in out_flush() argument
609 statp = &ep->regs->ep_stat; in out_flush()
613 ep_dbg(ep->dev, "%s %s %08x !NAK\n", in out_flush()
614 ep->ep.name, __func__, tmp); in out_flush()
615 writel(BIT(SET_NAK_OUT_PACKETS), &ep->regs->ep_rsp); in out_flush()
627 ep->dev->gadget.speed == USB_SPEED_FULL) { in out_flush()
644 static int read_fifo(struct net2280_ep *ep, struct net2280_request *req) in read_fifo() argument
646 struct net2280_ep_regs __iomem *regs = ep->regs; in read_fifo()
654 if (ep->dev->chiprev == 0x0100 && in read_fifo()
655 ep->dev->gadget.speed == USB_SPEED_FULL) { in read_fifo()
657 tmp = readl(&ep->regs->ep_stat); in read_fifo()
661 start_out_naking(ep); in read_fifo()
674 tmp = readl(&ep->regs->ep_stat); in read_fifo()
684 if ((tmp % ep->ep.maxpacket) != 0) { in read_fifo()
685 ep_err(ep->dev, in read_fifo()
687 ep->ep.name, count, tmp); in read_fifo()
698 is_short = (count == 0) || ((count % ep->ep.maxpacket) != 0); in read_fifo()
700 ep_vdbg(ep->dev, "read %s fifo (OUT) %d bytes%s%s%s req %p %d/%d\n", in read_fifo()
701 ep->ep.name, count, is_short ? " (short)" : "", in read_fifo()
721 out_flush(ep); in read_fifo()
723 writel(BIT(CLEAR_NAK_OUT_PACKETS), &ep->regs->ep_rsp); in read_fifo()
724 (void) readl(&ep->regs->ep_rsp); in read_fifo()
732 static void fill_dma_desc(struct net2280_ep *ep, in fill_dma_desc() argument
743 if (ep->is_in) in fill_dma_desc()
745 if ((!ep->is_in && (dmacount % ep->ep.maxpacket) != 0) || in fill_dma_desc()
746 !(ep->dev->quirks & PLX_2280)) in fill_dma_desc()
784 static void start_queue(struct net2280_ep *ep, u32 dmactl, u32 td_dma) in start_queue() argument
786 struct net2280_dma_regs __iomem *dma = ep->dma; in start_queue()
787 unsigned int tmp = BIT(VALID_BIT) | (ep->is_in << DMA_DIRECTION); in start_queue()
789 if (!(ep->dev->quirks & PLX_2280)) in start_queue()
796 if (ep->dev->quirks & PLX_SUPERSPEED) in start_queue()
801 (void) readl(&ep->dev->pci->pcimstctl); in start_queue()
805 if (!ep->is_in) in start_queue()
806 stop_out_naking(ep); in start_queue()
809 static void start_dma(struct net2280_ep *ep, struct net2280_request *req) in start_dma() argument
812 struct net2280_dma_regs __iomem *dma = ep->dma; in start_dma()
818 writel(0, &ep->dma->dmactl); in start_dma()
821 if (!ep->is_in && (readl(&ep->regs->ep_stat) & in start_dma()
824 &ep->regs->ep_stat); in start_dma()
826 tmp = readl(&ep->regs->ep_avail); in start_dma()
853 if (ep->is_in) { in start_dma()
854 if (likely((req->req.length % ep->ep.maxpacket) || in start_dma()
857 ep->in_fifo_validate = 1; in start_dma()
859 ep->in_fifo_validate = 0; in start_dma()
863 req->td->dmadesc = cpu_to_le32 (ep->td_dma); in start_dma()
864 fill_dma_desc(ep, req, 1); in start_dma()
868 start_queue(ep, tmp, req->td_dma); in start_dma()
872 queue_dma(struct net2280_ep *ep, struct net2280_request *req, int valid) in queue_dma() argument
878 end = ep->dummy; in queue_dma()
879 ep->dummy = req->td; in queue_dma()
882 tmp = ep->td_dma; in queue_dma()
883 ep->td_dma = req->td_dma; in queue_dma()
886 end->dmadesc = cpu_to_le32 (ep->td_dma); in queue_dma()
888 fill_dma_desc(ep, req, valid); in queue_dma()
892 done(struct net2280_ep *ep, struct net2280_request *req, int status) in done() argument
895 unsigned stopped = ep->stopped; in done()
904 dev = ep->dev; in done()
905 if (ep->dma) in done()
906 usb_gadget_unmap_request(&dev->gadget, &req->req, ep->is_in); in done()
910 ep->ep.name, &req->req, status, in done()
914 ep->stopped = 1; in done()
916 usb_gadget_giveback_request(&ep->ep, &req->req); in done()
918 ep->stopped = stopped; in done()
927 struct net2280_ep *ep; in net2280_queue() local
935 ep = container_of(_ep, struct net2280_ep, ep); in net2280_queue()
936 if (!_ep || (!ep->desc && ep->num != 0)) { in net2280_queue()
950 dev = ep->dev; in net2280_queue()
957 if (ep->dma && _req->length == 0) { in net2280_queue()
963 if (ep->dma) { in net2280_queue()
965 ep->is_in); in net2280_queue()
979 if (list_empty(&ep->queue) && !ep->stopped && in net2280_queue()
980 !((dev->quirks & PLX_SUPERSPEED) && ep->dma && in net2280_queue()
981 (readl(&ep->regs->ep_rsp) & BIT(CLEAR_ENDPOINT_HALT)))) { in net2280_queue()
984 if (ep->dma) in net2280_queue()
985 start_dma(ep, req); in net2280_queue()
988 if (ep->num == 0 && _req->length == 0) { in net2280_queue()
989 allow_status(ep); in net2280_queue()
990 done(ep, req, 0); in net2280_queue()
991 ep_vdbg(dev, "%s status ack\n", ep->ep.name); in net2280_queue()
996 if (ep->is_in) in net2280_queue()
997 write_fifo(ep, _req); in net2280_queue()
998 else if (list_empty(&ep->queue)) { in net2280_queue()
1002 s = readl(&ep->regs->ep_stat); in net2280_queue()
1010 if (read_fifo(ep, req) && in net2280_queue()
1011 ep->num == 0) { in net2280_queue()
1012 done(ep, req, 0); in net2280_queue()
1013 allow_status(ep); in net2280_queue()
1016 } else if (read_fifo(ep, req) && in net2280_queue()
1017 ep->num != 0) { in net2280_queue()
1018 done(ep, req, 0); in net2280_queue()
1021 s = readl(&ep->regs->ep_stat); in net2280_queue()
1027 &ep->regs->ep_rsp); in net2280_queue()
1031 } else if (ep->dma) { in net2280_queue()
1034 if (ep->is_in) { in net2280_queue()
1041 (req->req.length % ep->ep.maxpacket)); in net2280_queue()
1042 if (expect != ep->in_fifo_validate) in net2280_queue()
1045 queue_dma(ep, req, valid); in net2280_queue()
1049 ep->responded = 1; in net2280_queue()
1051 list_add_tail(&req->queue, &ep->queue); in net2280_queue()
1059 dev_err(&ep->dev->pdev->dev, "%s: error=%d\n", __func__, ret); in net2280_queue()
1064 dma_done(struct net2280_ep *ep, struct net2280_request *req, u32 dmacount, in dma_done() argument
1068 done(ep, req, status); in dma_done()
1071 static void scan_dma_completions(struct net2280_ep *ep) in scan_dma_completions() argument
1076 while (!list_empty(&ep->queue)) { in scan_dma_completions()
1080 req = list_entry(ep->queue.next, in scan_dma_completions()
1095 tmp = readl(&ep->dma->dmacount); in scan_dma_completions()
1099 dma_done(ep, req, tmp, 0); in scan_dma_completions()
1101 } else if (!ep->is_in && in scan_dma_completions()
1102 (req->req.length % ep->ep.maxpacket) && in scan_dma_completions()
1103 !(ep->dev->quirks & PLX_SUPERSPEED)) { in scan_dma_completions()
1105 tmp = readl(&ep->regs->ep_stat); in scan_dma_completions()
1111 ep_warn(ep->dev, "%s lost packet sync!\n", in scan_dma_completions()
1112 ep->ep.name); in scan_dma_completions()
1115 tmp = readl(&ep->regs->ep_avail); in scan_dma_completions()
1118 ep->out_overflow = 1; in scan_dma_completions()
1119 ep_dbg(ep->dev, in scan_dma_completions()
1121 ep->ep.name, tmp, in scan_dma_completions()
1127 dma_done(ep, req, tmp, 0); in scan_dma_completions()
1131 static void restart_dma(struct net2280_ep *ep) in restart_dma() argument
1135 if (ep->stopped) in restart_dma()
1137 req = list_entry(ep->queue.next, struct net2280_request, queue); in restart_dma()
1139 start_dma(ep, req); in restart_dma()
1142 static void abort_dma(struct net2280_ep *ep) in abort_dma() argument
1145 if (likely(!list_empty(&ep->queue))) { in abort_dma()
1147 writel(BIT(DMA_ABORT), &ep->dma->dmastat); in abort_dma()
1148 spin_stop_dma(ep->dma); in abort_dma()
1150 stop_dma(ep->dma); in abort_dma()
1151 scan_dma_completions(ep); in abort_dma()
1155 static void nuke(struct net2280_ep *ep) in nuke() argument
1160 ep->stopped = 1; in nuke()
1161 if (ep->dma) in nuke()
1162 abort_dma(ep); in nuke()
1163 while (!list_empty(&ep->queue)) { in nuke()
1164 req = list_entry(ep->queue.next, in nuke()
1167 done(ep, req, -ESHUTDOWN); in nuke()
1174 struct net2280_ep *ep; in net2280_dequeue() local
1180 ep = container_of(_ep, struct net2280_ep, ep); in net2280_dequeue()
1181 if (!_ep || (!ep->desc && ep->num != 0) || !_req) { in net2280_dequeue()
1187 spin_lock_irqsave(&ep->dev->lock, flags); in net2280_dequeue()
1188 stopped = ep->stopped; in net2280_dequeue()
1192 ep->stopped = 1; in net2280_dequeue()
1193 if (ep->dma) { in net2280_dequeue()
1194 dmactl = readl(&ep->dma->dmactl); in net2280_dequeue()
1196 stop_dma(ep->dma); in net2280_dequeue()
1197 scan_dma_completions(ep); in net2280_dequeue()
1201 list_for_each_entry(req, &ep->queue, queue) { in net2280_dequeue()
1206 spin_unlock_irqrestore(&ep->dev->lock, flags); in net2280_dequeue()
1207 dev_err(&ep->dev->pdev->dev, "%s: Request mismatch\n", in net2280_dequeue()
1213 if (ep->queue.next == &req->queue) { in net2280_dequeue()
1214 if (ep->dma) { in net2280_dequeue()
1215 ep_dbg(ep->dev, "unlink (%s) dma\n", _ep->name); in net2280_dequeue()
1217 abort_dma(ep); in net2280_dequeue()
1218 if (likely(ep->queue.next == &req->queue)) { in net2280_dequeue()
1221 dma_done(ep, req, in net2280_dequeue()
1222 readl(&ep->dma->dmacount), in net2280_dequeue()
1226 ep_dbg(ep->dev, "unlink (%s) pio\n", _ep->name); in net2280_dequeue()
1227 done(ep, req, -ECONNRESET); in net2280_dequeue()
1233 done(ep, req, -ECONNRESET); in net2280_dequeue()
1234 ep->stopped = stopped; in net2280_dequeue()
1236 if (ep->dma) { in net2280_dequeue()
1238 if (list_empty(&ep->queue)) in net2280_dequeue()
1239 stop_dma(ep->dma); in net2280_dequeue()
1240 else if (!ep->stopped) { in net2280_dequeue()
1243 writel(dmactl, &ep->dma->dmactl); in net2280_dequeue()
1245 start_dma(ep, list_entry(ep->queue.next, in net2280_dequeue()
1250 spin_unlock_irqrestore(&ep->dev->lock, flags); in net2280_dequeue()
1261 struct net2280_ep *ep; in net2280_set_halt_and_wedge() local
1265 ep = container_of(_ep, struct net2280_ep, ep); in net2280_set_halt_and_wedge()
1266 if (!_ep || (!ep->desc && ep->num != 0)) { in net2280_set_halt_and_wedge()
1270 if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN) { in net2280_set_halt_and_wedge()
1274 if (ep->desc /* not ep0 */ && (ep->desc->bmAttributes & 0x03) in net2280_set_halt_and_wedge()
1280 spin_lock_irqsave(&ep->dev->lock, flags); in net2280_set_halt_and_wedge()
1281 if (!list_empty(&ep->queue)) { in net2280_set_halt_and_wedge()
1284 } else if (ep->is_in && value && net2280_fifo_status(_ep) != 0) { in net2280_set_halt_and_wedge()
1288 ep_vdbg(ep->dev, "%s %s %s\n", _ep->name, in net2280_set_halt_and_wedge()
1293 if (ep->num == 0) in net2280_set_halt_and_wedge()
1294 ep->dev->protocol_stall = 1; in net2280_set_halt_and_wedge()
1296 set_halt(ep); in net2280_set_halt_and_wedge()
1298 ep->wedged = 1; in net2280_set_halt_and_wedge()
1300 clear_halt(ep); in net2280_set_halt_and_wedge()
1301 if (ep->dev->quirks & PLX_SUPERSPEED && in net2280_set_halt_and_wedge()
1302 !list_empty(&ep->queue) && ep->td_dma) in net2280_set_halt_and_wedge()
1303 restart_dma(ep); in net2280_set_halt_and_wedge()
1304 ep->wedged = 0; in net2280_set_halt_and_wedge()
1306 (void) readl(&ep->regs->ep_rsp); in net2280_set_halt_and_wedge()
1308 spin_unlock_irqrestore(&ep->dev->lock, flags); in net2280_set_halt_and_wedge()
1313 spin_unlock_irqrestore(&ep->dev->lock, flags); in net2280_set_halt_and_wedge()
1315 dev_err(&ep->dev->pdev->dev, "%s: error=%d\n", __func__, retval); in net2280_set_halt_and_wedge()
1335 struct net2280_ep *ep; in net2280_fifo_status() local
1338 ep = container_of(_ep, struct net2280_ep, ep); in net2280_fifo_status()
1339 if (!_ep || (!ep->desc && ep->num != 0)) { in net2280_fifo_status()
1343 if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN) { in net2280_fifo_status()
1344 dev_err(&ep->dev->pdev->dev, in net2280_fifo_status()
1346 __func__, ep->dev->driver, ep->dev->gadget.speed); in net2280_fifo_status()
1350 avail = readl(&ep->regs->ep_avail) & (BIT(12) - 1); in net2280_fifo_status()
1351 if (avail > ep->fifo_size) { in net2280_fifo_status()
1352 dev_err(&ep->dev->pdev->dev, "%s: Fifo overflow\n", __func__); in net2280_fifo_status()
1355 if (ep->is_in) in net2280_fifo_status()
1356 avail = ep->fifo_size - avail; in net2280_fifo_status()
1362 struct net2280_ep *ep; in net2280_fifo_flush() local
1364 ep = container_of(_ep, struct net2280_ep, ep); in net2280_fifo_flush()
1365 if (!_ep || (!ep->desc && ep->num != 0)) { in net2280_fifo_flush()
1369 if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN) { in net2280_fifo_flush()
1370 dev_err(&ep->dev->pdev->dev, in net2280_fifo_flush()
1372 __func__, ep->dev->driver, ep->dev->gadget.speed); in net2280_fifo_flush()
1376 writel(BIT(FIFO_FLUSH), &ep->regs->ep_stat); in net2280_fifo_flush()
1377 (void) readl(&ep->regs->ep_rsp); in net2280_fifo_flush()
1581 struct net2280_ep *ep; in registers_show() local
1583 ep = &dev->ep[i]; in registers_show()
1584 if (i && !ep->desc) in registers_show()
1587 t1 = readl(&ep->cfg->ep_cfg); in registers_show()
1588 t2 = readl(&ep->regs->ep_rsp) & 0xff; in registers_show()
1592 ep->ep.name, t1, t2, in registers_show()
1609 readl(&ep->regs->ep_irqenb)); in registers_show()
1616 readl(&ep->regs->ep_stat), in registers_show()
1617 readl(&ep->regs->ep_avail), in registers_show()
1620 ep->stopped ? "*" : ""); in registers_show()
1624 if (!ep->dma) in registers_show()
1630 readl(&ep->dma->dmactl), in registers_show()
1631 readl(&ep->dma->dmastat), in registers_show()
1632 readl(&ep->dma->dmacount), in registers_show()
1633 readl(&ep->dma->dmaaddr), in registers_show()
1634 readl(&ep->dma->dmadesc)); in registers_show()
1647 struct net2280_ep *ep; in registers_show() local
1649 ep = &dev->ep[i]; in registers_show()
1650 if (i && !ep->irqs) in registers_show()
1652 t = scnprintf(next, size, " %s/%lu", ep->ep.name, ep->irqs); in registers_show()
1682 struct net2280_ep *ep = &dev->ep[i]; in queues_show() local
1689 d = ep->desc; in queues_show()
1695 ep->ep.name, t & USB_ENDPOINT_NUMBER_MASK, in queues_show()
1699 ep->dma ? "dma" : "pio", ep->fifo_size in queues_show()
1703 ep->is_in ? "in" : "out"); in queues_show()
1709 if (list_empty(&ep->queue)) { in queues_show()
1717 list_for_each_entry(req, &ep->queue, queue) { in queues_show()
1718 if (ep->dma && req->td_dma == readl(&ep->dma->dmadesc)) in queues_show()
1724 readl(&ep->dma->dmacount)); in queues_show()
1735 if (ep->dma) { in queues_show()
1780 list_add_tail(&dev->ep[1].ep.ep_list, &dev->gadget.ep_list); in set_fifo_mode()
1781 list_add_tail(&dev->ep[2].ep.ep_list, &dev->gadget.ep_list); in set_fifo_mode()
1784 list_add_tail(&dev->ep[3].ep.ep_list, &dev->gadget.ep_list); in set_fifo_mode()
1785 list_add_tail(&dev->ep[4].ep.ep_list, &dev->gadget.ep_list); in set_fifo_mode()
1786 dev->ep[1].fifo_size = dev->ep[2].fifo_size = 1024; in set_fifo_mode()
1789 dev->ep[1].fifo_size = dev->ep[2].fifo_size = 2048; in set_fifo_mode()
1792 list_add_tail(&dev->ep[3].ep.ep_list, &dev->gadget.ep_list); in set_fifo_mode()
1793 dev->ep[1].fifo_size = 2048; in set_fifo_mode()
1794 dev->ep[2].fifo_size = 1024; in set_fifo_mode()
1798 list_add_tail(&dev->ep[5].ep.ep_list, &dev->gadget.ep_list); in set_fifo_mode()
1799 list_add_tail(&dev->ep[6].ep.ep_list, &dev->gadget.ep_list); in set_fifo_mode()
1809 struct net2280_ep *ep; in defect7374_disable_data_eps() local
1815 ep = &dev->ep[i]; in defect7374_disable_data_eps()
1816 writel(0, &ep->cfg->ep_cfg); in defect7374_disable_data_eps()
1867 writel(tmp, &dev->ep[i].cfg->ep_cfg); in defect7374_enable_data_eps_zero()
1939 struct net2280_ep *ep = &dev->ep[tmp + 1]; in usb_reset_228x() local
1940 if (ep->dma) in usb_reset_228x()
1941 abort_dma(ep); in usb_reset_228x()
1977 struct net2280_ep *ep = &dev->ep[tmp + 1]; in usb_reset_338x() local
1979 if (ep->dma) in usb_reset_338x()
1980 abort_dma(ep); in usb_reset_338x()
2000 list_add_tail(&dev->ep[tmp].ep.ep_list, &dev->gadget.ep_list); in usb_reset_338x()
2017 struct net2280_ep *ep = &dev->ep[tmp]; in usb_reinit_228x() local
2019 ep->ep.name = ep_name[tmp]; in usb_reinit_228x()
2020 ep->dev = dev; in usb_reinit_228x()
2021 ep->num = tmp; in usb_reinit_228x()
2024 ep->fifo_size = 1024; in usb_reinit_228x()
2025 ep->dma = &dev->dma[tmp - 1]; in usb_reinit_228x()
2027 ep->fifo_size = 64; in usb_reinit_228x()
2028 ep->regs = &dev->epregs[tmp]; in usb_reinit_228x()
2029 ep->cfg = &dev->epregs[tmp]; in usb_reinit_228x()
2030 ep_reset_228x(dev->regs, ep); in usb_reinit_228x()
2032 usb_ep_set_maxpacket_limit(&dev->ep[0].ep, 64); in usb_reinit_228x()
2033 usb_ep_set_maxpacket_limit(&dev->ep[5].ep, 64); in usb_reinit_228x()
2034 usb_ep_set_maxpacket_limit(&dev->ep[6].ep, 64); in usb_reinit_228x()
2036 dev->gadget.ep0 = &dev->ep[0].ep; in usb_reinit_228x()
2037 dev->ep[0].stopped = 0; in usb_reinit_228x()
2057 struct net2280_ep *ep = &dev->ep[i]; in usb_reinit_338x() local
2059 ep->ep.name = dev->enhanced_mode ? ep_name_adv[i] : ep_name[i]; in usb_reinit_338x()
2060 ep->dev = dev; in usb_reinit_338x()
2061 ep->num = i; in usb_reinit_338x()
2064 ep->dma = &dev->dma[i - 1]; in usb_reinit_338x()
2067 ep->cfg = &dev->epregs[ne[i]]; in usb_reinit_338x()
2068 ep->regs = (struct net2280_ep_regs __iomem *) in usb_reinit_338x()
2072 ep->cfg = &dev->epregs[i]; in usb_reinit_338x()
2073 ep->regs = &dev->epregs[i]; in usb_reinit_338x()
2076 ep->fifo_size = (i != 0) ? 2048 : 512; in usb_reinit_338x()
2078 ep_reset_338x(dev->regs, ep); in usb_reinit_338x()
2080 usb_ep_set_maxpacket_limit(&dev->ep[0].ep, 512); in usb_reinit_338x()
2082 dev->gadget.ep0 = &dev->ep[0].ep; in usb_reinit_338x()
2083 dev->ep[0].stopped = 0; in usb_reinit_338x()
2263 dev->ep[i].irqs = 0; in net2280_start()
2309 nuke(&dev->ep[i]); in stop_activity()
2348 static void handle_ep_small(struct net2280_ep *ep) in handle_ep_small() argument
2355 if (!list_empty(&ep->queue)) in handle_ep_small()
2356 req = list_entry(ep->queue.next, in handle_ep_small()
2362 t = readl(&ep->regs->ep_stat); in handle_ep_small()
2363 ep->irqs++; in handle_ep_small()
2365 ep_vdbg(ep->dev, "%s ack ep_stat %08x, req %p\n", in handle_ep_small()
2366 ep->ep.name, t, req ? &req->req : NULL); in handle_ep_small()
2368 if (!ep->is_in || (ep->dev->quirks & PLX_2280)) in handle_ep_small()
2369 writel(t & ~BIT(NAK_OUT_PACKETS), &ep->regs->ep_stat); in handle_ep_small()
2372 writel(t, &ep->regs->ep_stat); in handle_ep_small()
2384 if (unlikely(ep->num == 0)) { in handle_ep_small()
2385 if (ep->is_in) { in handle_ep_small()
2388 if (ep->dev->protocol_stall) { in handle_ep_small()
2389 ep->stopped = 1; in handle_ep_small()
2390 set_halt(ep); in handle_ep_small()
2393 allow_status(ep); in handle_ep_small()
2397 if (ep->dev->protocol_stall) { in handle_ep_small()
2398 ep->stopped = 1; in handle_ep_small()
2399 set_halt(ep); in handle_ep_small()
2401 } else if (ep->responded && in handle_ep_small()
2402 !req && !ep->stopped) in handle_ep_small()
2403 write_fifo(ep, NULL); in handle_ep_small()
2408 if (ep->dev->protocol_stall) { in handle_ep_small()
2409 ep->stopped = 1; in handle_ep_small()
2410 set_halt(ep); in handle_ep_small()
2417 (ep->responded && !req)) { in handle_ep_small()
2418 ep->dev->protocol_stall = 1; in handle_ep_small()
2419 set_halt(ep); in handle_ep_small()
2420 ep->stopped = 1; in handle_ep_small()
2422 done(ep, req, -EOVERFLOW); in handle_ep_small()
2432 if (likely(ep->dma)) { in handle_ep_small()
2435 int stopped = ep->stopped; in handle_ep_small()
2441 ep->stopped = 1; in handle_ep_small()
2442 for (count = 0; ; t = readl(&ep->regs->ep_stat)) { in handle_ep_small()
2447 scan_dma_completions(ep); in handle_ep_small()
2448 if (unlikely(list_empty(&ep->queue) || in handle_ep_small()
2449 ep->out_overflow)) { in handle_ep_small()
2453 req = list_entry(ep->queue.next, in handle_ep_small()
2460 count = readl(&ep->dma->dmacount); in handle_ep_small()
2462 if (readl(&ep->dma->dmadesc) in handle_ep_small()
2471 writel(BIT(DMA_ABORT), &ep->dma->dmastat); in handle_ep_small()
2472 spin_stop_dma(ep->dma); in handle_ep_small()
2476 t = readl(&ep->regs->ep_avail); in handle_ep_small()
2477 dma_done(ep, req, count, in handle_ep_small()
2478 (ep->out_overflow || t) in handle_ep_small()
2483 if (unlikely(ep->out_overflow || in handle_ep_small()
2484 (ep->dev->chiprev == 0x0100 && in handle_ep_small()
2485 ep->dev->gadget.speed in handle_ep_small()
2487 out_flush(ep); in handle_ep_small()
2488 ep->out_overflow = 0; in handle_ep_small()
2492 ep->stopped = stopped; in handle_ep_small()
2493 if (!list_empty(&ep->queue)) in handle_ep_small()
2494 restart_dma(ep); in handle_ep_small()
2496 ep_dbg(ep->dev, "%s dma ep_stat %08x ??\n", in handle_ep_small()
2497 ep->ep.name, t); in handle_ep_small()
2502 if (read_fifo(ep, req) && ep->num != 0) in handle_ep_small()
2510 if (len > ep->ep.maxpacket) in handle_ep_small()
2511 len = ep->ep.maxpacket; in handle_ep_small()
2517 (!req->req.zero || len != ep->ep.maxpacket) && ep->num) in handle_ep_small()
2527 done(ep, req, 0); in handle_ep_small()
2530 if (ep->num == 0) { in handle_ep_small()
2535 if (!ep->stopped) in handle_ep_small()
2536 allow_status(ep); in handle_ep_small()
2539 if (!list_empty(&ep->queue) && !ep->stopped) in handle_ep_small()
2540 req = list_entry(ep->queue.next, in handle_ep_small()
2544 if (req && !ep->is_in) in handle_ep_small()
2545 stop_out_naking(ep); in handle_ep_small()
2552 if (req && !ep->stopped) { in handle_ep_small()
2556 write_fifo(ep, &req->req); in handle_ep_small()
2562 struct net2280_ep *ep; in get_ep_by_addr() local
2565 return &dev->ep[0]; in get_ep_by_addr()
2566 list_for_each_entry(ep, &dev->gadget.ep_list, ep.ep_list) { in get_ep_by_addr()
2569 if (!ep->desc) in get_ep_by_addr()
2571 bEndpointAddress = ep->desc->bEndpointAddress; in get_ep_by_addr()
2575 return ep; in get_ep_by_addr()
2654 static void ep_clear_seqnum(struct net2280_ep *ep) in ep_clear_seqnum() argument
2656 struct net2280 *dev = ep->dev; in ep_clear_seqnum()
2661 val |= ep_pl[ep->num]; in ep_clear_seqnum()
2670 struct net2280_ep *ep, struct usb_ctrlrequest r) in handle_stat0_irqs_superspeed() argument
2695 set_fifo_bytecount(ep, sizeof(status)); in handle_stat0_irqs_superspeed()
2697 allow_status_338x(ep); in handle_stat0_irqs_superspeed()
2707 set_fifo_bytecount(ep, sizeof(status)); in handle_stat0_irqs_superspeed()
2709 allow_status_338x(ep); in handle_stat0_irqs_superspeed()
2727 allow_status_338x(ep); in handle_stat0_irqs_superspeed()
2735 allow_status_338x(ep); in handle_stat0_irqs_superspeed()
2743 allow_status_338x(ep); in handle_stat0_irqs_superspeed()
2755 allow_status_338x(ep); in handle_stat0_irqs_superspeed()
2766 ep_vdbg(dev, "%s clear halt\n", e->ep.name); in handle_stat0_irqs_superspeed()
2775 allow_status(ep); in handle_stat0_irqs_superspeed()
2776 ep->stopped = 1; in handle_stat0_irqs_superspeed()
2793 allow_status_338x(ep); in handle_stat0_irqs_superspeed()
2801 allow_status_338x(ep); in handle_stat0_irqs_superspeed()
2809 allow_status_338x(ep); in handle_stat0_irqs_superspeed()
2821 allow_status_338x(ep); in handle_stat0_irqs_superspeed()
2830 ep->stopped = 1; in handle_stat0_irqs_superspeed()
2831 if (ep->num == 0) in handle_stat0_irqs_superspeed()
2832 ep->dev->protocol_stall = 1; in handle_stat0_irqs_superspeed()
2834 if (ep->dma) in handle_stat0_irqs_superspeed()
2835 abort_dma(ep); in handle_stat0_irqs_superspeed()
2836 set_halt(ep); in handle_stat0_irqs_superspeed()
2838 allow_status_338x(ep); in handle_stat0_irqs_superspeed()
2852 readl(&ep->cfg->ep_cfg)); in handle_stat0_irqs_superspeed()
2854 ep->responded = 0; in handle_stat0_irqs_superspeed()
2865 set_halt(ep); in handle_stat0_irqs_superspeed()
2879 struct net2280_ep *ep; in handle_stat0_irqs() local
2901 usb_ep_set_maxpacket_limit(&dev->ep[0].ep, in handle_stat0_irqs()
2905 usb_ep_set_maxpacket_limit(&dev->ep[0].ep, in handle_stat0_irqs()
2909 usb_ep_set_maxpacket_limit(&dev->ep[0].ep, in handle_stat0_irqs()
2917 ep = &dev->ep[0]; in handle_stat0_irqs()
2918 ep->irqs++; in handle_stat0_irqs()
2922 while (!list_empty(&ep->queue)) { in handle_stat0_irqs()
2923 req = list_entry(ep->queue.next, in handle_stat0_irqs()
2925 done(ep, req, (req->req.actual == req->req.length) in handle_stat0_irqs()
2928 ep->stopped = 0; in handle_stat0_irqs()
2931 if (ep->dev->quirks & PLX_2280) in handle_stat0_irqs()
2949 &ep->regs->ep_stat); in handle_stat0_irqs()
2975 ep->is_in = (u.r.bRequestType & USB_DIR_IN) != 0; in handle_stat0_irqs()
2976 if (ep->is_in) { in handle_stat0_irqs()
2980 stop_out_naking(ep); in handle_stat0_irqs()
2990 ep->responded = 1; in handle_stat0_irqs()
2993 handle_stat0_irqs_superspeed(dev, ep, u.r); in handle_stat0_irqs()
3016 set_fifo_bytecount(ep, w_length); in handle_stat0_irqs()
3018 allow_status(ep); in handle_stat0_irqs()
3019 ep_vdbg(dev, "%s stat %02x\n", ep->ep.name, status); in handle_stat0_irqs()
3036 ep->ep.name); in handle_stat0_irqs()
3038 ep_vdbg(dev, "%s clear halt\n", e->ep.name); in handle_stat0_irqs()
3040 if ((ep->dev->quirks & PLX_SUPERSPEED) && in handle_stat0_irqs()
3044 allow_status(ep); in handle_stat0_irqs()
3059 if (e->ep.name == ep0name) in handle_stat0_irqs()
3064 allow_status(ep); in handle_stat0_irqs()
3065 ep_vdbg(dev, "%s set halt\n", ep->ep.name); in handle_stat0_irqs()
3075 readl(&ep->cfg->ep_cfg)); in handle_stat0_irqs()
3076 ep->responded = 0; in handle_stat0_irqs()
3113 ep = &dev->ep[num]; in handle_stat0_irqs()
3114 handle_ep_small(ep); in handle_stat0_irqs()
3134 struct net2280_ep *ep; in handle_stat1_irqs() local
3244 ep = &dev->ep[num + 1]; in handle_stat1_irqs()
3245 dma = ep->dma; in handle_stat1_irqs()
3257 if (!ep->is_in && (r_dmacount & 0x00FFFFFF) && in handle_stat1_irqs()
3263 ep_dbg(ep->dev, "%s no xact done? %08x\n", in handle_stat1_irqs()
3264 ep->ep.name, tmp); in handle_stat1_irqs()
3267 stop_dma(ep->dma); in handle_stat1_irqs()
3279 scan_dma_completions(ep); in handle_stat1_irqs()
3282 if (!list_empty(&ep->queue)) { in handle_stat1_irqs()
3284 restart_dma(ep); in handle_stat1_irqs()
3286 ep->irqs++; in handle_stat1_irqs()
3360 if (!dev->ep[i].dummy) in net2280_remove()
3362 pci_pool_free(dev->requests, dev->ep[i].dummy, in net2280_remove()
3363 dev->ep[i].td_dma); in net2280_remove()
3520 &dev->ep[i].td_dma); in net2280_probe()
3528 dev->ep[i].dummy = td; in net2280_probe()