Lines Matching refs:mdesc
259 static void mdc_list_desc_free(struct mdc_tx_desc *mdesc)
261 struct mdc_dma *mdma = mdesc->chan->mdma;
265 curr = mdesc->list;
266 curr_phys = mdesc->list_phys;
278 struct mdc_tx_desc *mdesc = to_mdc_desc(&vd->tx);
280 mdc_list_desc_free(mdesc);
281 kfree(mdesc);
290 struct mdc_tx_desc *mdesc;
297 mdesc = kzalloc(sizeof(*mdesc), GFP_NOWAIT);
298 if (!mdesc)
300 mdesc->chan = mchan;
301 mdesc->list_xfer_size = len;
314 mdesc->list_phys = curr_phys;
315 mdesc->list = curr;
325 mdesc->list_len++;
331 return vchan_tx_prep(&mchan->vc, &mdesc->vd, flags);
334 mdc_desc_free(&mdesc->vd);
372 struct mdc_tx_desc *mdesc;
385 mdesc = kzalloc(sizeof(*mdesc), GFP_NOWAIT);
386 if (!mdesc)
388 mdesc->chan = mchan;
389 mdesc->cyclic = true;
390 mdesc->list_xfer_size = buf_len;
391 mdesc->list_period_len = DIV_ROUND_UP(period_len,
406 mdesc->list_phys = curr_phys;
407 mdesc->list = curr;
430 mdesc->list_len++;
436 prev->node_addr = mdesc->list_phys;
438 return vchan_tx_prep(&mchan->vc, &mdesc->vd, flags);
441 mdc_desc_free(&mdesc->vd);
453 struct mdc_tx_desc *mdesc;
468 mdesc = kzalloc(sizeof(*mdesc), GFP_NOWAIT);
469 if (!mdesc)
471 mdesc->chan = mchan;
486 mdesc->list_phys = curr_phys;
487 mdesc->list = curr;
508 mdesc->list_len++;
509 mdesc->list_xfer_size += xfer_size;
515 return vchan_tx_prep(&mchan->vc, &mdesc->vd, flags);
518 mdc_desc_free(&mdesc->vd);
527 struct mdc_tx_desc *mdesc;
536 mdesc = to_mdc_desc(&vd->tx);
537 mchan->desc = mdesc;
553 mdc_chan_writel(mchan, mdesc->list_phys, MDC_LIST_NODE_ADDRESS);
574 struct mdc_tx_desc *mdesc;
590 mdesc = to_mdc_desc(&vd->tx);
591 bytes = mdesc->list_xfer_size;
597 mdesc = mchan->desc;
623 if (!mdesc->cmd_loaded)
626 cmds += mdesc->list_cmds_done;
628 bytes = mdesc->list_xfer_size;
629 ldesc = mdesc->list;
758 struct mdc_tx_desc *mdesc;
770 mdesc = mchan->desc;
771 if (!mdesc) {
784 if (!mdesc->cmd_loaded) {
785 mdesc->cmd_loaded = true;
789 mdesc->list_cmds_done++;
790 if (mdesc->cyclic) {
791 mdesc->list_cmds_done %= mdesc->list_len;
792 if (mdesc->list_cmds_done % mdesc->list_period_len == 0)
793 vchan_cyclic_callback(&mdesc->vd);
794 } else if (mdesc->list_cmds_done == mdesc->list_len) {
796 vchan_cookie_complete(&mdesc->vd);