in qcom-ngd-ctrl.c [675:709]
static int qcom_slim_ngd_init_rx_msgq(struct qcom_slim_ngd_ctrl *ctrl)
{
struct device *dev = ctrl->dev;
int ret, size;
ctrl->dma_rx_channel = dma_request_chan(dev, "rx");
if (IS_ERR(ctrl->dma_rx_channel)) {
dev_err(dev, "Failed to request RX dma channel");
ret = PTR_ERR(ctrl->dma_rx_channel);
ctrl->dma_rx_channel = NULL;
return ret;
}
size = QCOM_SLIM_NGD_DESC_NUM * SLIM_MSGQ_BUF_LEN;
ctrl->rx_base = dma_alloc_coherent(dev, size, &ctrl->rx_phys_base,
GFP_KERNEL);
if (!ctrl->rx_base) {
ret = -ENOMEM;
goto rel_rx;
}
ret = qcom_slim_ngd_post_rx_msgq(ctrl);
if (ret) {
dev_err(dev, "post_rx_msgq() failed 0x%x\n", ret);
goto rx_post_err;
}
return 0;
rx_post_err:
dma_free_coherent(dev, size, ctrl->rx_base, ctrl->rx_phys_base);
rel_rx:
dma_release_channel(ctrl->dma_rx_channel);
return ret;
}