in qcom-ngd-ctrl.c [625:645]
static void qcom_slim_ngd_rx_msgq_cb(void *args)
{
struct qcom_slim_ngd_dma_desc *desc = args;
struct qcom_slim_ngd_ctrl *ctrl = desc->ctrl;
qcom_slim_ngd_rx(ctrl, (u8 *)desc->base);
/* Add descriptor back to the queue */
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;
}
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);
}