bdma_chan 914 drivers/rapidio/devices/tsi721.h extern void tsi721_bdma_handler(struct tsi721_bdma_chan *bdma_chan); bdma_chan 63 drivers/rapidio/devices/tsi721_dma.c static int tsi721_bdma_ch_init(struct tsi721_bdma_chan *bdma_chan, int bd_num) bdma_chan 66 drivers/rapidio/devices/tsi721_dma.c struct device *dev = bdma_chan->dchan.device->dev; bdma_chan 72 drivers/rapidio/devices/tsi721_dma.c struct tsi721_device *priv = to_tsi721(bdma_chan->dchan.device); bdma_chan 75 drivers/rapidio/devices/tsi721_dma.c tsi_debug(DMA, &bdma_chan->dchan.dev->device, "DMAC%d", bdma_chan->id); bdma_chan 87 drivers/rapidio/devices/tsi721_dma.c bdma_chan->bd_num = bd_num; bdma_chan 88 drivers/rapidio/devices/tsi721_dma.c bdma_chan->bd_phys = bd_phys; bdma_chan 89 drivers/rapidio/devices/tsi721_dma.c bdma_chan->bd_base = bd_ptr; bdma_chan 91 drivers/rapidio/devices/tsi721_dma.c tsi_debug(DMA, &bdma_chan->dchan.dev->device, bdma_chan 93 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id, bd_ptr, &bd_phys); bdma_chan 107 drivers/rapidio/devices/tsi721_dma.c bdma_chan->bd_base = NULL; bdma_chan 111 drivers/rapidio/devices/tsi721_dma.c bdma_chan->sts_phys = sts_phys; bdma_chan 112 drivers/rapidio/devices/tsi721_dma.c bdma_chan->sts_base = sts_ptr; bdma_chan 113 drivers/rapidio/devices/tsi721_dma.c bdma_chan->sts_size = sts_size; bdma_chan 115 drivers/rapidio/devices/tsi721_dma.c tsi_debug(DMA, &bdma_chan->dchan.dev->device, bdma_chan 117 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id, sts_ptr, &sts_phys, sts_size); bdma_chan 127 drivers/rapidio/devices/tsi721_dma.c bdma_chan->regs + TSI721_DMAC_DPTRH); bdma_chan 129 drivers/rapidio/devices/tsi721_dma.c bdma_chan->regs + TSI721_DMAC_DPTRL); bdma_chan 133 drivers/rapidio/devices/tsi721_dma.c bdma_chan->regs + TSI721_DMAC_DSBH); bdma_chan 135 drivers/rapidio/devices/tsi721_dma.c bdma_chan->regs + TSI721_DMAC_DSBL); bdma_chan 137 drivers/rapidio/devices/tsi721_dma.c bdma_chan->regs + TSI721_DMAC_DSSZ); bdma_chan 141 drivers/rapidio/devices/tsi721_dma.c bdma_chan->regs + TSI721_DMAC_INT); bdma_chan 143 drivers/rapidio/devices/tsi721_dma.c ioread32(bdma_chan->regs + TSI721_DMAC_INT); bdma_chan 150 drivers/rapidio/devices/tsi721_dma.c idx = TSI721_VECT_DMA0_DONE + bdma_chan->id; bdma_chan 153 drivers/rapidio/devices/tsi721_dma.c priv->msix[idx].irq_name, (void *)bdma_chan); bdma_chan 156 drivers/rapidio/devices/tsi721_dma.c tsi_debug(DMA, &bdma_chan->dchan.dev->device, bdma_chan 158 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id); bdma_chan 162 drivers/rapidio/devices/tsi721_dma.c idx = TSI721_VECT_DMA0_INT + bdma_chan->id; bdma_chan 165 drivers/rapidio/devices/tsi721_dma.c priv->msix[idx].irq_name, (void *)bdma_chan); bdma_chan 168 drivers/rapidio/devices/tsi721_dma.c tsi_debug(DMA, &bdma_chan->dchan.dev->device, bdma_chan 170 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id); bdma_chan 173 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id].vector, bdma_chan 174 drivers/rapidio/devices/tsi721_dma.c (void *)bdma_chan); bdma_chan 183 drivers/rapidio/devices/tsi721_dma.c bdma_chan->bd_base = NULL; bdma_chan 189 drivers/rapidio/devices/tsi721_dma.c bdma_chan->sts_base = NULL; bdma_chan 197 drivers/rapidio/devices/tsi721_dma.c iowrite32(TSI721_DMAC_CTL_INIT, bdma_chan->regs + TSI721_DMAC_CTL); bdma_chan 198 drivers/rapidio/devices/tsi721_dma.c ioread32(bdma_chan->regs + TSI721_DMAC_CTL); bdma_chan 199 drivers/rapidio/devices/tsi721_dma.c bdma_chan->wr_count = bdma_chan->wr_count_next = 0; bdma_chan 200 drivers/rapidio/devices/tsi721_dma.c bdma_chan->sts_rdptr = 0; bdma_chan 206 drivers/rapidio/devices/tsi721_dma.c static int tsi721_bdma_ch_free(struct tsi721_bdma_chan *bdma_chan) bdma_chan 210 drivers/rapidio/devices/tsi721_dma.c struct tsi721_device *priv = to_tsi721(bdma_chan->dchan.device); bdma_chan 213 drivers/rapidio/devices/tsi721_dma.c if (!bdma_chan->bd_base) bdma_chan 217 drivers/rapidio/devices/tsi721_dma.c ch_stat = ioread32(bdma_chan->regs + TSI721_DMAC_STS); bdma_chan 222 drivers/rapidio/devices/tsi721_dma.c iowrite32(TSI721_DMAC_CTL_INIT, bdma_chan->regs + TSI721_DMAC_CTL); bdma_chan 227 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id].vector, (void *)bdma_chan); bdma_chan 229 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id].vector, (void *)bdma_chan); bdma_chan 234 drivers/rapidio/devices/tsi721_dma.c dma_free_coherent(bdma_chan->dchan.device->dev, bdma_chan 235 drivers/rapidio/devices/tsi721_dma.c (bdma_chan->bd_num + 1) * sizeof(struct tsi721_dma_desc), bdma_chan 236 drivers/rapidio/devices/tsi721_dma.c bdma_chan->bd_base, bdma_chan->bd_phys); bdma_chan 237 drivers/rapidio/devices/tsi721_dma.c bdma_chan->bd_base = NULL; bdma_chan 240 drivers/rapidio/devices/tsi721_dma.c dma_free_coherent(bdma_chan->dchan.device->dev, bdma_chan 241 drivers/rapidio/devices/tsi721_dma.c bdma_chan->sts_size * sizeof(struct tsi721_dma_sts), bdma_chan 242 drivers/rapidio/devices/tsi721_dma.c bdma_chan->sts_base, bdma_chan->sts_phys); bdma_chan 243 drivers/rapidio/devices/tsi721_dma.c bdma_chan->sts_base = NULL; bdma_chan 248 drivers/rapidio/devices/tsi721_dma.c tsi721_bdma_interrupt_enable(struct tsi721_bdma_chan *bdma_chan, int enable) bdma_chan 253 drivers/rapidio/devices/tsi721_dma.c bdma_chan->regs + TSI721_DMAC_INT); bdma_chan 254 drivers/rapidio/devices/tsi721_dma.c ioread32(bdma_chan->regs + TSI721_DMAC_INT); bdma_chan 257 drivers/rapidio/devices/tsi721_dma.c bdma_chan->regs + TSI721_DMAC_INTE); bdma_chan 260 drivers/rapidio/devices/tsi721_dma.c iowrite32(0, bdma_chan->regs + TSI721_DMAC_INTE); bdma_chan 263 drivers/rapidio/devices/tsi721_dma.c bdma_chan->regs + TSI721_DMAC_INT); bdma_chan 268 drivers/rapidio/devices/tsi721_dma.c static bool tsi721_dma_is_idle(struct tsi721_bdma_chan *bdma_chan) bdma_chan 272 drivers/rapidio/devices/tsi721_dma.c sts = ioread32(bdma_chan->regs + TSI721_DMAC_STS); bdma_chan 276 drivers/rapidio/devices/tsi721_dma.c void tsi721_bdma_handler(struct tsi721_bdma_chan *bdma_chan) bdma_chan 279 drivers/rapidio/devices/tsi721_dma.c iowrite32(0, bdma_chan->regs + TSI721_DMAC_INTE); bdma_chan 280 drivers/rapidio/devices/tsi721_dma.c if (bdma_chan->active) bdma_chan 281 drivers/rapidio/devices/tsi721_dma.c tasklet_hi_schedule(&bdma_chan->tasklet); bdma_chan 294 drivers/rapidio/devices/tsi721_dma.c struct tsi721_bdma_chan *bdma_chan = ptr; bdma_chan 296 drivers/rapidio/devices/tsi721_dma.c if (bdma_chan->active) bdma_chan 297 drivers/rapidio/devices/tsi721_dma.c tasklet_hi_schedule(&bdma_chan->tasklet); bdma_chan 303 drivers/rapidio/devices/tsi721_dma.c static void tsi721_start_dma(struct tsi721_bdma_chan *bdma_chan) bdma_chan 305 drivers/rapidio/devices/tsi721_dma.c if (!tsi721_dma_is_idle(bdma_chan)) { bdma_chan 306 drivers/rapidio/devices/tsi721_dma.c tsi_err(&bdma_chan->dchan.dev->device, bdma_chan 308 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id); bdma_chan 312 drivers/rapidio/devices/tsi721_dma.c if (bdma_chan->wr_count == bdma_chan->wr_count_next) { bdma_chan 313 drivers/rapidio/devices/tsi721_dma.c tsi_err(&bdma_chan->dchan.dev->device, bdma_chan 315 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id, task_pid_nr(current)); bdma_chan 319 drivers/rapidio/devices/tsi721_dma.c tsi_debug(DMA, &bdma_chan->dchan.dev->device, "DMAC%d (wrc=%d) %d", bdma_chan 320 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id, bdma_chan->wr_count_next, bdma_chan 323 drivers/rapidio/devices/tsi721_dma.c iowrite32(bdma_chan->wr_count_next, bdma_chan 324 drivers/rapidio/devices/tsi721_dma.c bdma_chan->regs + TSI721_DMAC_DWRCNT); bdma_chan 325 drivers/rapidio/devices/tsi721_dma.c ioread32(bdma_chan->regs + TSI721_DMAC_DWRCNT); bdma_chan 327 drivers/rapidio/devices/tsi721_dma.c bdma_chan->wr_count = bdma_chan->wr_count_next; bdma_chan 372 drivers/rapidio/devices/tsi721_dma.c static void tsi721_dma_tx_err(struct tsi721_bdma_chan *bdma_chan, bdma_chan 379 drivers/rapidio/devices/tsi721_dma.c list_move(&desc->desc_node, &bdma_chan->free_list); bdma_chan 385 drivers/rapidio/devices/tsi721_dma.c static void tsi721_clr_stat(struct tsi721_bdma_chan *bdma_chan) bdma_chan 392 drivers/rapidio/devices/tsi721_dma.c srd_ptr = bdma_chan->sts_rdptr; bdma_chan 393 drivers/rapidio/devices/tsi721_dma.c sts_ptr = bdma_chan->sts_base; bdma_chan 400 drivers/rapidio/devices/tsi721_dma.c srd_ptr %= bdma_chan->sts_size; bdma_chan 404 drivers/rapidio/devices/tsi721_dma.c iowrite32(srd_ptr, bdma_chan->regs + TSI721_DMAC_DSRP); bdma_chan 405 drivers/rapidio/devices/tsi721_dma.c bdma_chan->sts_rdptr = srd_ptr; bdma_chan 412 drivers/rapidio/devices/tsi721_dma.c struct tsi721_bdma_chan *bdma_chan = to_tsi721_chan(dchan); bdma_chan 425 drivers/rapidio/devices/tsi721_dma.c if (!tsi721_dma_is_idle(bdma_chan)) { bdma_chan 427 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id); bdma_chan 440 drivers/rapidio/devices/tsi721_dma.c rd_idx = ioread32(bdma_chan->regs + TSI721_DMAC_DRDCNT); bdma_chan 441 drivers/rapidio/devices/tsi721_dma.c rd_idx %= (bdma_chan->bd_num + 1); bdma_chan 443 drivers/rapidio/devices/tsi721_dma.c idx = bdma_chan->wr_count_next % (bdma_chan->bd_num + 1); bdma_chan 444 drivers/rapidio/devices/tsi721_dma.c if (idx == bdma_chan->bd_num) { bdma_chan 451 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id, rd_idx, idx); bdma_chan 456 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id, i, desc->sg_len, bdma_chan 461 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id, i); bdma_chan 479 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id, bcount); bdma_chan 487 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id, i); bdma_chan 493 drivers/rapidio/devices/tsi721_dma.c bd_ptr = &((struct tsi721_dma_desc *)bdma_chan->bd_base)[idx]; bdma_chan 501 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id, bd_ptr, desc->destid, desc->rio_addr); bdma_chan 507 drivers/rapidio/devices/tsi721_dma.c if (++idx == bdma_chan->bd_num) { bdma_chan 518 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id, bcount); bdma_chan 527 drivers/rapidio/devices/tsi721_dma.c bdma_chan->wr_count_next += add_count; bdma_chan 532 drivers/rapidio/devices/tsi721_dma.c static void tsi721_advance_work(struct tsi721_bdma_chan *bdma_chan, bdma_chan 537 drivers/rapidio/devices/tsi721_dma.c tsi_debug(DMA, &bdma_chan->dchan.dev->device, "DMAC%d", bdma_chan->id); bdma_chan 539 drivers/rapidio/devices/tsi721_dma.c if (!tsi721_dma_is_idle(bdma_chan)) bdma_chan 546 drivers/rapidio/devices/tsi721_dma.c if (!desc && !bdma_chan->active_tx && !list_empty(&bdma_chan->queue)) { bdma_chan 547 drivers/rapidio/devices/tsi721_dma.c desc = list_first_entry(&bdma_chan->queue, bdma_chan 550 drivers/rapidio/devices/tsi721_dma.c bdma_chan->active_tx = desc; bdma_chan 556 drivers/rapidio/devices/tsi721_dma.c tsi721_start_dma(bdma_chan); bdma_chan 558 drivers/rapidio/devices/tsi721_dma.c tsi721_dma_tx_err(bdma_chan, desc); bdma_chan 559 drivers/rapidio/devices/tsi721_dma.c tsi_debug(DMA, &bdma_chan->dchan.dev->device, bdma_chan 561 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id, err); bdma_chan 565 drivers/rapidio/devices/tsi721_dma.c tsi_debug(DMA, &bdma_chan->dchan.dev->device, "DMAC%d Exit", bdma_chan 566 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id); bdma_chan 571 drivers/rapidio/devices/tsi721_dma.c struct tsi721_bdma_chan *bdma_chan = (struct tsi721_bdma_chan *)data; bdma_chan 574 drivers/rapidio/devices/tsi721_dma.c dmac_int = ioread32(bdma_chan->regs + TSI721_DMAC_INT); bdma_chan 575 drivers/rapidio/devices/tsi721_dma.c tsi_debug(DMA, &bdma_chan->dchan.dev->device, "DMAC%d_INT = 0x%x", bdma_chan 576 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id, dmac_int); bdma_chan 578 drivers/rapidio/devices/tsi721_dma.c iowrite32(dmac_int, bdma_chan->regs + TSI721_DMAC_INT); bdma_chan 584 drivers/rapidio/devices/tsi721_dma.c desc = bdma_chan->active_tx; bdma_chan 585 drivers/rapidio/devices/tsi721_dma.c dmac_sts = ioread32(bdma_chan->regs + TSI721_DMAC_STS); bdma_chan 586 drivers/rapidio/devices/tsi721_dma.c tsi_err(&bdma_chan->dchan.dev->device, bdma_chan 588 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id, dmac_sts, desc->destid, desc->rio_addr); bdma_chan 595 drivers/rapidio/devices/tsi721_dma.c tsi721_clr_stat(bdma_chan); bdma_chan 597 drivers/rapidio/devices/tsi721_dma.c spin_lock(&bdma_chan->lock); bdma_chan 601 drivers/rapidio/devices/tsi721_dma.c bdma_chan->regs + TSI721_DMAC_CTL); bdma_chan 604 drivers/rapidio/devices/tsi721_dma.c dmac_sts = ioread32(bdma_chan->regs + TSI721_DMAC_STS); bdma_chan 609 drivers/rapidio/devices/tsi721_dma.c tsi_err(&bdma_chan->dchan.dev->device, bdma_chan 610 drivers/rapidio/devices/tsi721_dma.c "Failed to re-initiate DMAC%d", bdma_chan->id); bdma_chan 611 drivers/rapidio/devices/tsi721_dma.c spin_unlock(&bdma_chan->lock); bdma_chan 616 drivers/rapidio/devices/tsi721_dma.c iowrite32(((u64)bdma_chan->bd_phys >> 32), bdma_chan 617 drivers/rapidio/devices/tsi721_dma.c bdma_chan->regs + TSI721_DMAC_DPTRH); bdma_chan 618 drivers/rapidio/devices/tsi721_dma.c iowrite32(((u64)bdma_chan->bd_phys & TSI721_DMAC_DPTRL_MASK), bdma_chan 619 drivers/rapidio/devices/tsi721_dma.c bdma_chan->regs + TSI721_DMAC_DPTRL); bdma_chan 622 drivers/rapidio/devices/tsi721_dma.c iowrite32(((u64)bdma_chan->sts_phys >> 32), bdma_chan 623 drivers/rapidio/devices/tsi721_dma.c bdma_chan->regs + TSI721_DMAC_DSBH); bdma_chan 624 drivers/rapidio/devices/tsi721_dma.c iowrite32(((u64)bdma_chan->sts_phys & TSI721_DMAC_DSBL_MASK), bdma_chan 625 drivers/rapidio/devices/tsi721_dma.c bdma_chan->regs + TSI721_DMAC_DSBL); bdma_chan 626 drivers/rapidio/devices/tsi721_dma.c iowrite32(TSI721_DMAC_DSSZ_SIZE(bdma_chan->sts_size), bdma_chan 627 drivers/rapidio/devices/tsi721_dma.c bdma_chan->regs + TSI721_DMAC_DSSZ); bdma_chan 631 drivers/rapidio/devices/tsi721_dma.c bdma_chan->regs + TSI721_DMAC_INT); bdma_chan 633 drivers/rapidio/devices/tsi721_dma.c ioread32(bdma_chan->regs + TSI721_DMAC_INT); bdma_chan 635 drivers/rapidio/devices/tsi721_dma.c bdma_chan->wr_count = bdma_chan->wr_count_next = 0; bdma_chan 636 drivers/rapidio/devices/tsi721_dma.c bdma_chan->sts_rdptr = 0; bdma_chan 639 drivers/rapidio/devices/tsi721_dma.c desc = bdma_chan->active_tx; bdma_chan 642 drivers/rapidio/devices/tsi721_dma.c list_add(&desc->desc_node, &bdma_chan->free_list); bdma_chan 643 drivers/rapidio/devices/tsi721_dma.c bdma_chan->active_tx = NULL; bdma_chan 644 drivers/rapidio/devices/tsi721_dma.c if (bdma_chan->active) bdma_chan 645 drivers/rapidio/devices/tsi721_dma.c tsi721_advance_work(bdma_chan, NULL); bdma_chan 646 drivers/rapidio/devices/tsi721_dma.c spin_unlock(&bdma_chan->lock); bdma_chan 650 drivers/rapidio/devices/tsi721_dma.c tsi_err(&bdma_chan->dchan.dev->device, bdma_chan 652 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id); bdma_chan 658 drivers/rapidio/devices/tsi721_dma.c tsi721_clr_stat(bdma_chan); bdma_chan 659 drivers/rapidio/devices/tsi721_dma.c spin_lock(&bdma_chan->lock); bdma_chan 660 drivers/rapidio/devices/tsi721_dma.c desc = bdma_chan->active_tx; bdma_chan 672 drivers/rapidio/devices/tsi721_dma.c list_add(&desc->desc_node, &bdma_chan->free_list); bdma_chan 673 drivers/rapidio/devices/tsi721_dma.c bdma_chan->active_tx = NULL; bdma_chan 674 drivers/rapidio/devices/tsi721_dma.c if (bdma_chan->active) bdma_chan 675 drivers/rapidio/devices/tsi721_dma.c tsi721_advance_work(bdma_chan, NULL); bdma_chan 676 drivers/rapidio/devices/tsi721_dma.c spin_unlock(&bdma_chan->lock); bdma_chan 680 drivers/rapidio/devices/tsi721_dma.c if (bdma_chan->active) bdma_chan 681 drivers/rapidio/devices/tsi721_dma.c tsi721_advance_work(bdma_chan, bdma_chan 682 drivers/rapidio/devices/tsi721_dma.c bdma_chan->active_tx); bdma_chan 683 drivers/rapidio/devices/tsi721_dma.c spin_unlock(&bdma_chan->lock); bdma_chan 688 drivers/rapidio/devices/tsi721_dma.c iowrite32(TSI721_DMAC_INT_ALL, bdma_chan->regs + TSI721_DMAC_INTE); bdma_chan 694 drivers/rapidio/devices/tsi721_dma.c struct tsi721_bdma_chan *bdma_chan = to_tsi721_chan(txd->chan); bdma_chan 699 drivers/rapidio/devices/tsi721_dma.c tsi_err(&bdma_chan->dchan.dev->device, bdma_chan 701 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id, txd); bdma_chan 705 drivers/rapidio/devices/tsi721_dma.c spin_lock_bh(&bdma_chan->lock); bdma_chan 707 drivers/rapidio/devices/tsi721_dma.c if (!bdma_chan->active) { bdma_chan 708 drivers/rapidio/devices/tsi721_dma.c spin_unlock_bh(&bdma_chan->lock); bdma_chan 714 drivers/rapidio/devices/tsi721_dma.c list_add_tail(&desc->desc_node, &bdma_chan->queue); bdma_chan 715 drivers/rapidio/devices/tsi721_dma.c tsi721_advance_work(bdma_chan, NULL); bdma_chan 717 drivers/rapidio/devices/tsi721_dma.c spin_unlock_bh(&bdma_chan->lock); bdma_chan 723 drivers/rapidio/devices/tsi721_dma.c struct tsi721_bdma_chan *bdma_chan = to_tsi721_chan(dchan); bdma_chan 727 drivers/rapidio/devices/tsi721_dma.c tsi_debug(DMA, &dchan->dev->device, "DMAC%d", bdma_chan->id); bdma_chan 729 drivers/rapidio/devices/tsi721_dma.c if (bdma_chan->bd_base) bdma_chan 733 drivers/rapidio/devices/tsi721_dma.c if (tsi721_bdma_ch_init(bdma_chan, dma_desc_per_channel)) { bdma_chan 735 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id); bdma_chan 743 drivers/rapidio/devices/tsi721_dma.c tsi721_bdma_ch_free(bdma_chan); bdma_chan 747 drivers/rapidio/devices/tsi721_dma.c bdma_chan->tx_desc = desc; bdma_chan 753 drivers/rapidio/devices/tsi721_dma.c list_add(&desc[i].desc_node, &bdma_chan->free_list); bdma_chan 758 drivers/rapidio/devices/tsi721_dma.c bdma_chan->active = true; bdma_chan 759 drivers/rapidio/devices/tsi721_dma.c tsi721_bdma_interrupt_enable(bdma_chan, 1); bdma_chan 764 drivers/rapidio/devices/tsi721_dma.c static void tsi721_sync_dma_irq(struct tsi721_bdma_chan *bdma_chan) bdma_chan 766 drivers/rapidio/devices/tsi721_dma.c struct tsi721_device *priv = to_tsi721(bdma_chan->dchan.device); bdma_chan 771 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id].vector); bdma_chan 773 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id].vector); bdma_chan 781 drivers/rapidio/devices/tsi721_dma.c struct tsi721_bdma_chan *bdma_chan = to_tsi721_chan(dchan); bdma_chan 783 drivers/rapidio/devices/tsi721_dma.c tsi_debug(DMA, &dchan->dev->device, "DMAC%d", bdma_chan->id); bdma_chan 785 drivers/rapidio/devices/tsi721_dma.c if (!bdma_chan->bd_base) bdma_chan 788 drivers/rapidio/devices/tsi721_dma.c tsi721_bdma_interrupt_enable(bdma_chan, 0); bdma_chan 789 drivers/rapidio/devices/tsi721_dma.c bdma_chan->active = false; bdma_chan 790 drivers/rapidio/devices/tsi721_dma.c tsi721_sync_dma_irq(bdma_chan); bdma_chan 791 drivers/rapidio/devices/tsi721_dma.c tasklet_kill(&bdma_chan->tasklet); bdma_chan 792 drivers/rapidio/devices/tsi721_dma.c INIT_LIST_HEAD(&bdma_chan->free_list); bdma_chan 793 drivers/rapidio/devices/tsi721_dma.c kfree(bdma_chan->tx_desc); bdma_chan 794 drivers/rapidio/devices/tsi721_dma.c tsi721_bdma_ch_free(bdma_chan); bdma_chan 801 drivers/rapidio/devices/tsi721_dma.c struct tsi721_bdma_chan *bdma_chan = to_tsi721_chan(dchan); bdma_chan 804 drivers/rapidio/devices/tsi721_dma.c spin_lock_bh(&bdma_chan->lock); bdma_chan 806 drivers/rapidio/devices/tsi721_dma.c spin_unlock_bh(&bdma_chan->lock); bdma_chan 812 drivers/rapidio/devices/tsi721_dma.c struct tsi721_bdma_chan *bdma_chan = to_tsi721_chan(dchan); bdma_chan 814 drivers/rapidio/devices/tsi721_dma.c tsi_debug(DMA, &dchan->dev->device, "DMAC%d", bdma_chan->id); bdma_chan 816 drivers/rapidio/devices/tsi721_dma.c spin_lock_bh(&bdma_chan->lock); bdma_chan 817 drivers/rapidio/devices/tsi721_dma.c if (tsi721_dma_is_idle(bdma_chan) && bdma_chan->active) { bdma_chan 818 drivers/rapidio/devices/tsi721_dma.c tsi721_advance_work(bdma_chan, NULL); bdma_chan 820 drivers/rapidio/devices/tsi721_dma.c spin_unlock_bh(&bdma_chan->lock); bdma_chan 829 drivers/rapidio/devices/tsi721_dma.c struct tsi721_bdma_chan *bdma_chan = to_tsi721_chan(dchan); bdma_chan 837 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id); bdma_chan 841 drivers/rapidio/devices/tsi721_dma.c tsi_debug(DMA, &dchan->dev->device, "DMAC%d %s", bdma_chan->id, bdma_chan 862 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id); bdma_chan 866 drivers/rapidio/devices/tsi721_dma.c spin_lock_bh(&bdma_chan->lock); bdma_chan 868 drivers/rapidio/devices/tsi721_dma.c if (!list_empty(&bdma_chan->free_list)) { bdma_chan 869 drivers/rapidio/devices/tsi721_dma.c desc = list_first_entry(&bdma_chan->free_list, bdma_chan 882 drivers/rapidio/devices/tsi721_dma.c spin_unlock_bh(&bdma_chan->lock); bdma_chan 886 drivers/rapidio/devices/tsi721_dma.c "DMAC%d free TXD is not available", bdma_chan->id); bdma_chan 895 drivers/rapidio/devices/tsi721_dma.c struct tsi721_bdma_chan *bdma_chan = to_tsi721_chan(dchan); bdma_chan 899 drivers/rapidio/devices/tsi721_dma.c tsi_debug(DMA, &dchan->dev->device, "DMAC%d", bdma_chan->id); bdma_chan 901 drivers/rapidio/devices/tsi721_dma.c spin_lock_bh(&bdma_chan->lock); bdma_chan 903 drivers/rapidio/devices/tsi721_dma.c bdma_chan->active = false; bdma_chan 905 drivers/rapidio/devices/tsi721_dma.c while (!tsi721_dma_is_idle(bdma_chan)) { bdma_chan 911 drivers/rapidio/devices/tsi721_dma.c bdma_chan->regs + TSI721_DMAC_CTL); bdma_chan 915 drivers/rapidio/devices/tsi721_dma.c dmac_int = ioread32(bdma_chan->regs + TSI721_DMAC_INT); bdma_chan 920 drivers/rapidio/devices/tsi721_dma.c if (bdma_chan->active_tx) bdma_chan 921 drivers/rapidio/devices/tsi721_dma.c list_add(&bdma_chan->active_tx->desc_node, &list); bdma_chan 922 drivers/rapidio/devices/tsi721_dma.c list_splice_init(&bdma_chan->queue, &list); bdma_chan 925 drivers/rapidio/devices/tsi721_dma.c tsi721_dma_tx_err(bdma_chan, desc); bdma_chan 927 drivers/rapidio/devices/tsi721_dma.c spin_unlock_bh(&bdma_chan->lock); bdma_chan 932 drivers/rapidio/devices/tsi721_dma.c static void tsi721_dma_stop(struct tsi721_bdma_chan *bdma_chan) bdma_chan 934 drivers/rapidio/devices/tsi721_dma.c if (!bdma_chan->active) bdma_chan 936 drivers/rapidio/devices/tsi721_dma.c spin_lock_bh(&bdma_chan->lock); bdma_chan 937 drivers/rapidio/devices/tsi721_dma.c if (!tsi721_dma_is_idle(bdma_chan)) { bdma_chan 942 drivers/rapidio/devices/tsi721_dma.c bdma_chan->regs + TSI721_DMAC_CTL); bdma_chan 945 drivers/rapidio/devices/tsi721_dma.c while (!tsi721_dma_is_idle(bdma_chan) && --timeout) bdma_chan 949 drivers/rapidio/devices/tsi721_dma.c spin_unlock_bh(&bdma_chan->lock); bdma_chan 972 drivers/rapidio/devices/tsi721_dma.c struct tsi721_bdma_chan *bdma_chan = &priv->bdma[i]; bdma_chan 977 drivers/rapidio/devices/tsi721_dma.c bdma_chan->regs = priv->regs + TSI721_DMAC_BASE(i); bdma_chan 979 drivers/rapidio/devices/tsi721_dma.c bdma_chan->dchan.device = &mport->dma; bdma_chan 980 drivers/rapidio/devices/tsi721_dma.c bdma_chan->dchan.cookie = 1; bdma_chan 981 drivers/rapidio/devices/tsi721_dma.c bdma_chan->dchan.chan_id = i; bdma_chan 982 drivers/rapidio/devices/tsi721_dma.c bdma_chan->id = i; bdma_chan 983 drivers/rapidio/devices/tsi721_dma.c bdma_chan->active = false; bdma_chan 985 drivers/rapidio/devices/tsi721_dma.c spin_lock_init(&bdma_chan->lock); bdma_chan 987 drivers/rapidio/devices/tsi721_dma.c bdma_chan->active_tx = NULL; bdma_chan 988 drivers/rapidio/devices/tsi721_dma.c INIT_LIST_HEAD(&bdma_chan->queue); bdma_chan 989 drivers/rapidio/devices/tsi721_dma.c INIT_LIST_HEAD(&bdma_chan->free_list); bdma_chan 991 drivers/rapidio/devices/tsi721_dma.c tasklet_init(&bdma_chan->tasklet, tsi721_dma_tasklet, bdma_chan 992 drivers/rapidio/devices/tsi721_dma.c (unsigned long)bdma_chan); bdma_chan 993 drivers/rapidio/devices/tsi721_dma.c list_add_tail(&bdma_chan->dchan.device_node, bdma_chan 1022 drivers/rapidio/devices/tsi721_dma.c struct tsi721_bdma_chan *bdma_chan; bdma_chan 1029 drivers/rapidio/devices/tsi721_dma.c bdma_chan = to_tsi721_chan(chan); bdma_chan 1030 drivers/rapidio/devices/tsi721_dma.c if (bdma_chan->active) { bdma_chan 1031 drivers/rapidio/devices/tsi721_dma.c tsi721_bdma_interrupt_enable(bdma_chan, 0); bdma_chan 1032 drivers/rapidio/devices/tsi721_dma.c bdma_chan->active = false; bdma_chan 1033 drivers/rapidio/devices/tsi721_dma.c tsi721_sync_dma_irq(bdma_chan); bdma_chan 1034 drivers/rapidio/devices/tsi721_dma.c tasklet_kill(&bdma_chan->tasklet); bdma_chan 1035 drivers/rapidio/devices/tsi721_dma.c INIT_LIST_HEAD(&bdma_chan->free_list); bdma_chan 1036 drivers/rapidio/devices/tsi721_dma.c kfree(bdma_chan->tx_desc); bdma_chan 1037 drivers/rapidio/devices/tsi721_dma.c tsi721_bdma_ch_free(bdma_chan);