plchan 333 drivers/dma/amba-pl08x.c static int pl08x_request_mux(struct pl08x_dma_chan *plchan) plchan 335 drivers/dma/amba-pl08x.c const struct pl08x_platform_data *pd = plchan->host->pd; plchan 338 drivers/dma/amba-pl08x.c if (plchan->mux_use++ == 0 && pd->get_xfer_signal) { plchan 339 drivers/dma/amba-pl08x.c ret = pd->get_xfer_signal(plchan->cd); plchan 341 drivers/dma/amba-pl08x.c plchan->mux_use = 0; plchan 345 drivers/dma/amba-pl08x.c plchan->signal = ret; plchan 350 drivers/dma/amba-pl08x.c static void pl08x_release_mux(struct pl08x_dma_chan *plchan) plchan 352 drivers/dma/amba-pl08x.c const struct pl08x_platform_data *pd = plchan->host->pd; plchan 354 drivers/dma/amba-pl08x.c if (plchan->signal >= 0) { plchan 355 drivers/dma/amba-pl08x.c WARN_ON(plchan->mux_use == 0); plchan 357 drivers/dma/amba-pl08x.c if (--plchan->mux_use == 0 && pd->put_xfer_signal) { plchan 358 drivers/dma/amba-pl08x.c pd->put_xfer_signal(plchan->cd, plchan->signal); plchan 359 drivers/dma/amba-pl08x.c plchan->signal = -1; plchan 527 drivers/dma/amba-pl08x.c static void pl08x_start_next_txd(struct pl08x_dma_chan *plchan) plchan 529 drivers/dma/amba-pl08x.c struct pl08x_driver_data *pl08x = plchan->host; plchan 530 drivers/dma/amba-pl08x.c struct pl08x_phy_chan *phychan = plchan->phychan; plchan 531 drivers/dma/amba-pl08x.c struct virt_dma_desc *vd = vchan_next_desc(&plchan->vc); plchan 537 drivers/dma/amba-pl08x.c plchan->at = txd; plchan 753 drivers/dma/amba-pl08x.c static u32 pl08x_getbytes_chan(struct pl08x_dma_chan *plchan) plchan 755 drivers/dma/amba-pl08x.c struct pl08x_driver_data *pl08x = plchan->host; plchan 764 drivers/dma/amba-pl08x.c ch = plchan->phychan; plchan 765 drivers/dma/amba-pl08x.c txd = plchan->at; plchan 859 drivers/dma/amba-pl08x.c static void pl08x_phy_alloc_and_start(struct pl08x_dma_chan *plchan) plchan 861 drivers/dma/amba-pl08x.c struct pl08x_driver_data *pl08x = plchan->host; plchan 864 drivers/dma/amba-pl08x.c ch = pl08x_get_phy_channel(pl08x, plchan); plchan 866 drivers/dma/amba-pl08x.c dev_dbg(&pl08x->adev->dev, "no physical channel available for xfer on %s\n", plchan->name); plchan 867 drivers/dma/amba-pl08x.c plchan->state = PL08X_CHAN_WAITING; plchan 868 drivers/dma/amba-pl08x.c plchan->waiting_at = jiffies; plchan 873 drivers/dma/amba-pl08x.c ch->id, plchan->name); plchan 875 drivers/dma/amba-pl08x.c plchan->phychan = ch; plchan 876 drivers/dma/amba-pl08x.c plchan->state = PL08X_CHAN_RUNNING; plchan 877 drivers/dma/amba-pl08x.c pl08x_start_next_txd(plchan); plchan 881 drivers/dma/amba-pl08x.c struct pl08x_dma_chan *plchan) plchan 883 drivers/dma/amba-pl08x.c struct pl08x_driver_data *pl08x = plchan->host; plchan 886 drivers/dma/amba-pl08x.c ch->id, plchan->name); plchan 893 drivers/dma/amba-pl08x.c ch->serving = plchan; plchan 894 drivers/dma/amba-pl08x.c plchan->phychan = ch; plchan 895 drivers/dma/amba-pl08x.c plchan->state = PL08X_CHAN_RUNNING; plchan 896 drivers/dma/amba-pl08x.c pl08x_start_next_txd(plchan); plchan 903 drivers/dma/amba-pl08x.c static void pl08x_phy_free(struct pl08x_dma_chan *plchan) plchan 905 drivers/dma/amba-pl08x.c struct pl08x_driver_data *pl08x = plchan->host; plchan 934 drivers/dma/amba-pl08x.c pl08x_terminate_phy_chan(pl08x, plchan->phychan); plchan 947 drivers/dma/amba-pl08x.c pl08x_phy_reassign_start(plchan->phychan, next); plchan 955 drivers/dma/amba-pl08x.c pl08x_put_phy_channel(pl08x, plchan->phychan); plchan 958 drivers/dma/amba-pl08x.c plchan->phychan = NULL; plchan 959 drivers/dma/amba-pl08x.c plchan->state = PL08X_CHAN_IDLE; plchan 1511 drivers/dma/amba-pl08x.c struct pl08x_dma_chan *plchan = to_pl08x_chan(vd->tx.chan); plchan 1515 drivers/dma/amba-pl08x.c pl08x_release_mux(plchan); plchan 1517 drivers/dma/amba-pl08x.c pl08x_free_txd(plchan->host, txd); plchan 1521 drivers/dma/amba-pl08x.c struct pl08x_dma_chan *plchan) plchan 1525 drivers/dma/amba-pl08x.c vchan_get_all_descriptors(&plchan->vc, &head); plchan 1526 drivers/dma/amba-pl08x.c vchan_dma_desc_free_list(&plchan->vc, &head); plchan 1554 drivers/dma/amba-pl08x.c struct pl08x_dma_chan *plchan = to_pl08x_chan(chan); plchan 1569 drivers/dma/amba-pl08x.c if (plchan->state == PL08X_CHAN_PAUSED) plchan 1574 drivers/dma/amba-pl08x.c spin_lock_irqsave(&plchan->vc.lock, flags); plchan 1577 drivers/dma/amba-pl08x.c vd = vchan_find_desc(&plchan->vc, cookie); plchan 1586 drivers/dma/amba-pl08x.c bytes = pl08x_getbytes_chan(plchan); plchan 1589 drivers/dma/amba-pl08x.c spin_unlock_irqrestore(&plchan->vc.lock, flags); plchan 1597 drivers/dma/amba-pl08x.c if (plchan->state == PL08X_CHAN_PAUSED && ret == DMA_IN_PROGRESS) plchan 1708 drivers/dma/amba-pl08x.c static u32 pl08x_get_cctl(struct pl08x_dma_chan *plchan, plchan 1725 drivers/dma/amba-pl08x.c if (plchan->cd->single) plchan 1741 drivers/dma/amba-pl08x.c struct pl08x_dma_chan *plchan = to_pl08x_chan(chan); plchan 1744 drivers/dma/amba-pl08x.c spin_lock_irqsave(&plchan->vc.lock, flags); plchan 1745 drivers/dma/amba-pl08x.c if (vchan_issue_pending(&plchan->vc)) { plchan 1746 drivers/dma/amba-pl08x.c if (!plchan->phychan && plchan->state != PL08X_CHAN_WAITING) plchan 1747 drivers/dma/amba-pl08x.c pl08x_phy_alloc_and_start(plchan); plchan 1749 drivers/dma/amba-pl08x.c spin_unlock_irqrestore(&plchan->vc.lock, flags); plchan 1752 drivers/dma/amba-pl08x.c static struct pl08x_txd *pl08x_get_txd(struct pl08x_dma_chan *plchan) plchan 1893 drivers/dma/amba-pl08x.c struct pl08x_dma_chan *plchan = to_pl08x_chan(chan); plchan 1894 drivers/dma/amba-pl08x.c struct pl08x_driver_data *pl08x = plchan->host; plchan 1899 drivers/dma/amba-pl08x.c txd = pl08x_get_txd(plchan); plchan 1927 drivers/dma/amba-pl08x.c ret = pl08x_fill_llis_for_desc(plchan->host, txd); plchan 1933 drivers/dma/amba-pl08x.c return vchan_tx_prep(&plchan->vc, &txd->vd, flags); plchan 1941 drivers/dma/amba-pl08x.c struct pl08x_dma_chan *plchan = to_pl08x_chan(chan); plchan 1942 drivers/dma/amba-pl08x.c struct pl08x_driver_data *pl08x = plchan->host; plchan 1949 drivers/dma/amba-pl08x.c txd = pl08x_get_txd(plchan); plchan 1962 drivers/dma/amba-pl08x.c *slave_addr = plchan->cfg.dst_addr; plchan 1963 drivers/dma/amba-pl08x.c addr_width = plchan->cfg.dst_addr_width; plchan 1964 drivers/dma/amba-pl08x.c maxburst = plchan->cfg.dst_maxburst; plchan 1966 drivers/dma/amba-pl08x.c dst_buses = plchan->cd->periph_buses; plchan 1969 drivers/dma/amba-pl08x.c *slave_addr = plchan->cfg.src_addr; plchan 1970 drivers/dma/amba-pl08x.c addr_width = plchan->cfg.src_addr_width; plchan 1971 drivers/dma/amba-pl08x.c maxburst = plchan->cfg.src_maxburst; plchan 1972 drivers/dma/amba-pl08x.c src_buses = plchan->cd->periph_buses; plchan 1981 drivers/dma/amba-pl08x.c cctl |= pl08x_get_cctl(plchan, addr_width, maxburst); plchan 1991 drivers/dma/amba-pl08x.c if (plchan->cfg.device_fc) plchan 2002 drivers/dma/amba-pl08x.c ret = pl08x_request_mux(plchan); plchan 2007 drivers/dma/amba-pl08x.c plchan->name); plchan 2012 drivers/dma/amba-pl08x.c plchan->signal, plchan->name); plchan 2016 drivers/dma/amba-pl08x.c txd->ccfg |= plchan->signal << PL080_CONFIG_DST_SEL_SHIFT; plchan 2018 drivers/dma/amba-pl08x.c txd->ccfg |= plchan->signal << PL080_CONFIG_SRC_SEL_SHIFT; plchan 2054 drivers/dma/amba-pl08x.c struct pl08x_dma_chan *plchan = to_pl08x_chan(chan); plchan 2055 drivers/dma/amba-pl08x.c struct pl08x_driver_data *pl08x = plchan->host; plchan 2062 drivers/dma/amba-pl08x.c __func__, sg_dma_len(sgl), plchan->name); plchan 2073 drivers/dma/amba-pl08x.c pl08x_release_mux(plchan); plchan 2081 drivers/dma/amba-pl08x.c ret = pl08x_fill_llis_for_desc(plchan->host, txd); plchan 2083 drivers/dma/amba-pl08x.c pl08x_release_mux(plchan); plchan 2088 drivers/dma/amba-pl08x.c return vchan_tx_prep(&plchan->vc, &txd->vd, flags); plchan 2096 drivers/dma/amba-pl08x.c struct pl08x_dma_chan *plchan = to_pl08x_chan(chan); plchan 2097 drivers/dma/amba-pl08x.c struct pl08x_driver_data *pl08x = plchan->host; plchan 2106 drivers/dma/amba-pl08x.c plchan->name); plchan 2118 drivers/dma/amba-pl08x.c pl08x_release_mux(plchan); plchan 2124 drivers/dma/amba-pl08x.c ret = pl08x_fill_llis_for_desc(plchan->host, txd); plchan 2126 drivers/dma/amba-pl08x.c pl08x_release_mux(plchan); plchan 2131 drivers/dma/amba-pl08x.c return vchan_tx_prep(&plchan->vc, &txd->vd, flags); plchan 2137 drivers/dma/amba-pl08x.c struct pl08x_dma_chan *plchan = to_pl08x_chan(chan); plchan 2138 drivers/dma/amba-pl08x.c struct pl08x_driver_data *pl08x = plchan->host; plchan 2140 drivers/dma/amba-pl08x.c if (!plchan->slave) plchan 2155 drivers/dma/amba-pl08x.c plchan->cfg = *config; plchan 2162 drivers/dma/amba-pl08x.c struct pl08x_dma_chan *plchan = to_pl08x_chan(chan); plchan 2163 drivers/dma/amba-pl08x.c struct pl08x_driver_data *pl08x = plchan->host; plchan 2166 drivers/dma/amba-pl08x.c spin_lock_irqsave(&plchan->vc.lock, flags); plchan 2167 drivers/dma/amba-pl08x.c if (!plchan->phychan && !plchan->at) { plchan 2168 drivers/dma/amba-pl08x.c spin_unlock_irqrestore(&plchan->vc.lock, flags); plchan 2172 drivers/dma/amba-pl08x.c plchan->state = PL08X_CHAN_IDLE; plchan 2174 drivers/dma/amba-pl08x.c if (plchan->phychan) { plchan 2179 drivers/dma/amba-pl08x.c pl08x_phy_free(plchan); plchan 2182 drivers/dma/amba-pl08x.c if (plchan->at) { plchan 2183 drivers/dma/amba-pl08x.c vchan_terminate_vdesc(&plchan->at->vd); plchan 2184 drivers/dma/amba-pl08x.c plchan->at = NULL; plchan 2187 drivers/dma/amba-pl08x.c pl08x_free_txd_list(pl08x, plchan); plchan 2189 drivers/dma/amba-pl08x.c spin_unlock_irqrestore(&plchan->vc.lock, flags); plchan 2196 drivers/dma/amba-pl08x.c struct pl08x_dma_chan *plchan = to_pl08x_chan(chan); plchan 2198 drivers/dma/amba-pl08x.c vchan_synchronize(&plchan->vc); plchan 2203 drivers/dma/amba-pl08x.c struct pl08x_dma_chan *plchan = to_pl08x_chan(chan); plchan 2210 drivers/dma/amba-pl08x.c spin_lock_irqsave(&plchan->vc.lock, flags); plchan 2211 drivers/dma/amba-pl08x.c if (!plchan->phychan && !plchan->at) { plchan 2212 drivers/dma/amba-pl08x.c spin_unlock_irqrestore(&plchan->vc.lock, flags); plchan 2216 drivers/dma/amba-pl08x.c pl08x_pause_phy_chan(plchan->phychan); plchan 2217 drivers/dma/amba-pl08x.c plchan->state = PL08X_CHAN_PAUSED; plchan 2219 drivers/dma/amba-pl08x.c spin_unlock_irqrestore(&plchan->vc.lock, flags); plchan 2226 drivers/dma/amba-pl08x.c struct pl08x_dma_chan *plchan = to_pl08x_chan(chan); plchan 2233 drivers/dma/amba-pl08x.c spin_lock_irqsave(&plchan->vc.lock, flags); plchan 2234 drivers/dma/amba-pl08x.c if (!plchan->phychan && !plchan->at) { plchan 2235 drivers/dma/amba-pl08x.c spin_unlock_irqrestore(&plchan->vc.lock, flags); plchan 2239 drivers/dma/amba-pl08x.c pl08x_resume_phy_chan(plchan->phychan); plchan 2240 drivers/dma/amba-pl08x.c plchan->state = PL08X_CHAN_RUNNING; plchan 2242 drivers/dma/amba-pl08x.c spin_unlock_irqrestore(&plchan->vc.lock, flags); plchan 2249 drivers/dma/amba-pl08x.c struct pl08x_dma_chan *plchan; plchan 2256 drivers/dma/amba-pl08x.c plchan = to_pl08x_chan(chan); plchan 2259 drivers/dma/amba-pl08x.c if (!strcmp(plchan->name, name)) plchan 2268 drivers/dma/amba-pl08x.c struct pl08x_dma_chan *plchan = to_pl08x_chan(chan); plchan 2270 drivers/dma/amba-pl08x.c return plchan->cd == chan_id; plchan 2315 drivers/dma/amba-pl08x.c struct pl08x_dma_chan *plchan = phychan->serving; plchan 2318 drivers/dma/amba-pl08x.c if (!plchan) { plchan 2325 drivers/dma/amba-pl08x.c spin_lock(&plchan->vc.lock); plchan 2326 drivers/dma/amba-pl08x.c tx = plchan->at; plchan 2330 drivers/dma/amba-pl08x.c plchan->at = NULL; plchan 2335 drivers/dma/amba-pl08x.c pl08x_release_mux(plchan); plchan 2343 drivers/dma/amba-pl08x.c if (vchan_next_desc(&plchan->vc)) plchan 2344 drivers/dma/amba-pl08x.c pl08x_start_next_txd(plchan); plchan 2346 drivers/dma/amba-pl08x.c pl08x_phy_free(plchan); plchan 2348 drivers/dma/amba-pl08x.c spin_unlock(&plchan->vc.lock); plchan 2544 drivers/dma/amba-pl08x.c struct pl08x_dma_chan *plchan; plchan 2562 drivers/dma/amba-pl08x.c plchan = to_pl08x_chan(dma_chan); plchan 2568 drivers/dma/amba-pl08x.c plchan->cd->periph_buses = dma_spec->args[1];