in qcom-ngd-ctrl.c [647:673]
static int qcom_slim_ngd_post_rx_msgq(struct qcom_slim_ngd_ctrl *ctrl)
{
struct qcom_slim_ngd_dma_desc *desc;
int i;
for (i = 0; i < QCOM_SLIM_NGD_DESC_NUM; i++) {
desc = &ctrl->rx_desc[i];
desc->phys = ctrl->rx_phys_base + i * SLIM_MSGQ_BUF_LEN;
desc->ctrl = ctrl;
desc->base = ctrl->rx_base + i * SLIM_MSGQ_BUF_LEN;
desc->desc = dmaengine_prep_slave_single(ctrl->dma_rx_channel,
desc->phys, SLIM_MSGQ_BUF_LEN,
DMA_DEV_TO_MEM,
DMA_PREP_INTERRUPT);
if (!desc->desc) {
dev_err(ctrl->dev, "Unable to prepare rx channel\n");
return -EINVAL;
}
desc->desc->callback = qcom_slim_ngd_rx_msgq_cb;
desc->desc->callback_param = desc;
desc->desc->cookie = dmaengine_submit(desc->desc);
}
dma_async_issue_pending(ctrl->dma_rx_channel);
return 0;
}