Lines Matching refs:iudma

224 	struct iudma_ch			*iudma;  member
244 struct iudma_ch *iudma; member
294 struct iudma_ch iudma[BCM63XX_NUM_IUDMA]; member
553 udc->iudma[i].max_pkt = max_pkt; in bcm63xx_ep_setup()
583 static void iudma_write(struct bcm63xx_udc *udc, struct iudma_ch *iudma, in iudma_write() argument
588 const int max_bd_bytes = !irq_coalesce && !iudma->is_tx ? in iudma_write()
589 iudma->max_pkt : IUDMA_MAX_FRAGMENT; in iudma_write()
591 iudma->n_bds_used = 0; in iudma_write()
593 breq->iudma = iudma; in iudma_write()
595 if ((bytes_left % iudma->max_pkt == 0) && bytes_left && breq->req.zero) in iudma_write()
599 struct bcm_enet_desc *d = iudma->write_bd; in iudma_write()
603 if (d == iudma->end_bd) { in iudma_write()
605 iudma->write_bd = iudma->bd_ring; in iudma_write()
607 iudma->write_bd++; in iudma_write()
609 iudma->n_bds_used++; in iudma_write()
631 if (!iudma->is_tx || iudma->n_bds_used == iudma->n_bds || in iudma_write()
647 ENETDMAC_CHANCFG_REG, iudma->ch_idx); in iudma_write()
659 static int iudma_read(struct bcm63xx_udc *udc, struct iudma_ch *iudma) in iudma_read() argument
662 struct bcm_enet_desc *d = iudma->read_bd; in iudma_read()
664 if (!iudma->n_bds_used) in iudma_read()
667 for (i = 0; i < iudma->n_bds_used; i++) { in iudma_read()
677 if (d == iudma->end_bd) in iudma_read()
678 d = iudma->bd_ring; in iudma_read()
683 iudma->read_bd = d; in iudma_read()
684 iudma->n_bds_used = 0; in iudma_read()
693 static void iudma_reset_channel(struct bcm63xx_udc *udc, struct iudma_ch *iudma) in iudma_reset_channel() argument
697 int ch_idx = iudma->ch_idx; in iudma_reset_channel()
699 if (!iudma->is_tx) in iudma_reset_channel()
700 bcm63xx_fifo_reset_ep(udc, max(0, iudma->ep_num)); in iudma_reset_channel()
710 if (iudma->is_tx && iudma->ep_num >= 0) in iudma_reset_channel()
711 bcm63xx_fifo_reset_ep(udc, iudma->ep_num); in iudma_reset_channel()
728 for (d = iudma->bd_ring; d <= iudma->end_bd; d++) in iudma_reset_channel()
732 iudma->read_bd = iudma->write_bd = iudma->bd_ring; in iudma_reset_channel()
733 iudma->n_bds_used = 0; in iudma_reset_channel()
740 usb_dmas_writel(udc, iudma->bd_ring_dma, ENETDMAS_RSTART_REG, ch_idx); in iudma_reset_channel()
751 struct iudma_ch *iudma = &udc->iudma[ch_idx]; in iudma_init_channel() local
756 iudma->ep_num = cfg->ep_num; in iudma_init_channel()
757 iudma->ch_idx = ch_idx; in iudma_init_channel()
758 iudma->is_tx = !!(ch_idx & 0x01); in iudma_init_channel()
759 if (iudma->ep_num >= 0) { in iudma_init_channel()
760 bep = &udc->bep[iudma->ep_num]; in iudma_init_channel()
761 bep->iudma = iudma; in iudma_init_channel()
765 iudma->bep = bep; in iudma_init_channel()
766 iudma->udc = udc; in iudma_init_channel()
769 if (iudma->ep_num <= 0) in iudma_init_channel()
770 iudma->enabled = true; in iudma_init_channel()
772 iudma->n_bds = n_bds; in iudma_init_channel()
773 iudma->bd_ring = dmam_alloc_coherent(udc->dev, in iudma_init_channel()
775 &iudma->bd_ring_dma, GFP_KERNEL); in iudma_init_channel()
776 if (!iudma->bd_ring) in iudma_init_channel()
778 iudma->end_bd = &iudma->bd_ring[n_bds - 1]; in iudma_init_channel()
799 iudma_reset_channel(udc, &udc->iudma[i]); in iudma_init()
819 iudma_reset_channel(udc, &udc->iudma[i]); in iudma_uninit()
1025 struct iudma_ch *iudma = bep->iudma; in bcm63xx_ep_enable() local
1035 if (iudma->enabled) { in bcm63xx_ep_enable()
1040 iudma->enabled = true; in bcm63xx_ep_enable()
1043 iudma_reset_channel(udc, iudma); in bcm63xx_ep_enable()
1064 struct iudma_ch *iudma = bep->iudma; in bcm63xx_ep_disable() local
1072 if (!iudma->enabled) { in bcm63xx_ep_disable()
1076 iudma->enabled = false; in bcm63xx_ep_disable()
1078 iudma_reset_channel(udc, iudma); in bcm63xx_ep_disable()
1086 iudma->is_tx); in bcm63xx_ep_disable()
1091 usb_gadget_giveback_request(&iudma->bep->ep, &breq->req); in bcm63xx_ep_disable()
1170 if (!bep->iudma->enabled) { in bcm63xx_udc_queue()
1175 rc = usb_gadget_map_request(&udc->gadget, req, bep->iudma->is_tx); in bcm63xx_udc_queue()
1179 iudma_write(udc, bep->iudma, breq); in bcm63xx_udc_queue()
1211 usb_gadget_unmap_request(&udc->gadget, &breq->req, bep->iudma->is_tx); in bcm63xx_udc_dequeue()
1214 iudma_reset_channel(udc, bep->iudma); in bcm63xx_udc_dequeue()
1222 iudma_write(udc, bep->iudma, next); in bcm63xx_udc_dequeue()
1378 struct iudma_ch *iudma = &udc->iudma[ch_idx]; in bcm63xx_ep0_map_write() local
1385 usb_gadget_map_request(&udc->gadget, req, iudma->is_tx); in bcm63xx_ep0_map_write()
1386 iudma_write(udc, iudma, breq); in bcm63xx_ep0_map_write()
1543 iudma_reset_channel(udc, &udc->iudma[IUDMA_EP0_RXCHAN]); in bcm63xx_ep0_do_idle()
1620 iudma_reset_channel(udc, &udc->iudma[IUDMA_EP0_TXCHAN]); in bcm63xx_ep0_one_round()
1646 iudma_reset_channel(udc, &udc->iudma[IUDMA_EP0_RXCHAN]); in bcm63xx_ep0_one_round()
1665 iudma_reset_channel(udc, &udc->iudma[IUDMA_EP0_TXCHAN]); in bcm63xx_ep0_one_round()
2034 struct iudma_ch *iudma = dev_id; in bcm63xx_udc_data_isr() local
2035 struct bcm63xx_udc *udc = iudma->udc; in bcm63xx_udc_data_isr()
2045 ENETDMAC_IR_REG, iudma->ch_idx); in bcm63xx_udc_data_isr()
2046 bep = iudma->bep; in bcm63xx_udc_data_isr()
2047 rc = iudma_read(udc, iudma); in bcm63xx_udc_data_isr()
2050 if (iudma->ch_idx == IUDMA_EP0_RXCHAN || in bcm63xx_udc_data_isr()
2051 iudma->ch_idx == IUDMA_EP0_TXCHAN) { in bcm63xx_udc_data_isr()
2068 iudma_write(udc, iudma, breq); in bcm63xx_udc_data_isr()
2089 iudma_write(udc, iudma, next); in bcm63xx_udc_data_isr()
2092 iudma_write(udc, iudma, breq); in bcm63xx_udc_data_isr()
2099 usb_gadget_unmap_request(&udc->gadget, req, iudma->is_tx); in bcm63xx_udc_data_isr()
2166 struct iudma_ch *iudma = &udc->iudma[ch_idx]; in bcm63xx_iudma_dbg_show() local
2197 seq_printf(s, " desc: %d/%d used", iudma->n_bds_used, in bcm63xx_iudma_dbg_show()
2198 iudma->n_bds); in bcm63xx_iudma_dbg_show()
2200 if (iudma->bep) { in bcm63xx_iudma_dbg_show()
2202 list_for_each(pos, &iudma->bep->queue) in bcm63xx_iudma_dbg_show()
2209 for (i = 0; i < iudma->n_bds; i++) { in bcm63xx_iudma_dbg_show()
2210 struct bcm_enet_desc *d = &iudma->bd_ring[i]; in bcm63xx_iudma_dbg_show()
2216 if (d == iudma->read_bd) in bcm63xx_iudma_dbg_show()
2218 if (d == iudma->write_bd) in bcm63xx_iudma_dbg_show()
2262 struct dentry *root, *usbd, *iudma; in bcm63xx_udc_init_debugfs() local
2275 iudma = debugfs_create_file("iudma", 0400, root, udc, in bcm63xx_udc_init_debugfs()
2277 if (!iudma) in bcm63xx_udc_init_debugfs()
2282 udc->debugfs_iudma = iudma; in bcm63xx_udc_init_debugfs()
2388 dev_name(dev), &udc->iudma[i]) < 0) { in bcm63xx_udc_probe()