ASoC: SOF: add no_reply IPC calls
Merge series from Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>: Simplify IPC messages to avoid passing a reply structure that is not used later.
This commit is contained in:
commit
efd090c040
@ -135,7 +135,6 @@ static int sof_compr_free(struct snd_soc_component *component,
|
|||||||
struct sof_compr_stream *sstream = cstream->runtime->private_data;
|
struct sof_compr_stream *sstream = cstream->runtime->private_data;
|
||||||
struct snd_soc_pcm_runtime *rtd = cstream->private_data;
|
struct snd_soc_pcm_runtime *rtd = cstream->private_data;
|
||||||
struct sof_ipc_stream stream;
|
struct sof_ipc_stream stream;
|
||||||
struct sof_ipc_reply reply;
|
|
||||||
struct snd_sof_pcm *spcm;
|
struct snd_sof_pcm *spcm;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
@ -148,8 +147,7 @@ static int sof_compr_free(struct snd_soc_component *component,
|
|||||||
stream.comp_id = spcm->stream[cstream->direction].comp_id;
|
stream.comp_id = spcm->stream[cstream->direction].comp_id;
|
||||||
|
|
||||||
if (spcm->prepared[cstream->direction]) {
|
if (spcm->prepared[cstream->direction]) {
|
||||||
ret = sof_ipc_tx_message(sdev->ipc, &stream, sizeof(stream),
|
ret = sof_ipc_tx_message_no_reply(sdev->ipc, &stream, sizeof(stream));
|
||||||
&reply, sizeof(reply));
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
spcm->prepared[cstream->direction] = false;
|
spcm->prepared[cstream->direction] = false;
|
||||||
}
|
}
|
||||||
@ -273,7 +271,6 @@ static int sof_compr_trigger(struct snd_soc_component *component,
|
|||||||
struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(component);
|
struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(component);
|
||||||
struct snd_soc_pcm_runtime *rtd = cstream->private_data;
|
struct snd_soc_pcm_runtime *rtd = cstream->private_data;
|
||||||
struct sof_ipc_stream stream;
|
struct sof_ipc_stream stream;
|
||||||
struct sof_ipc_reply reply;
|
|
||||||
struct snd_sof_pcm *spcm;
|
struct snd_sof_pcm *spcm;
|
||||||
|
|
||||||
spcm = snd_sof_find_spcm_dai(component, rtd);
|
spcm = snd_sof_find_spcm_dai(component, rtd);
|
||||||
@ -302,8 +299,7 @@ static int sof_compr_trigger(struct snd_soc_component *component,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return sof_ipc_tx_message(sdev->ipc, &stream, sizeof(stream),
|
return sof_ipc_tx_message_no_reply(sdev->ipc, &stream, sizeof(stream));
|
||||||
&reply, sizeof(reply));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sof_compr_copy_playback(struct snd_compr_runtime *rtd,
|
static int sof_compr_copy_playback(struct snd_compr_runtime *rtd,
|
||||||
|
@ -557,7 +557,7 @@ int hda_dsp_ipc4_load_library(struct snd_sof_dev *sdev,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = sof_ipc_tx_message(sdev->ipc, &msg, 0, NULL, 0);
|
ret = sof_ipc_tx_message_no_reply(sdev->ipc, &msg, 0);
|
||||||
|
|
||||||
ret1 = cl_trigger(sdev, hext_stream, SNDRV_PCM_TRIGGER_STOP);
|
ret1 = cl_trigger(sdev, hext_stream, SNDRV_PCM_TRIGGER_STOP);
|
||||||
if (ret1 < 0) {
|
if (ret1 < 0) {
|
||||||
|
@ -150,7 +150,6 @@ static int ipc3_trace_update_filter(struct snd_sof_dev *sdev, int num_elems,
|
|||||||
struct sof_ipc_trace_filter_elem *elems)
|
struct sof_ipc_trace_filter_elem *elems)
|
||||||
{
|
{
|
||||||
struct sof_ipc_trace_filter *msg;
|
struct sof_ipc_trace_filter *msg;
|
||||||
struct sof_ipc_reply reply;
|
|
||||||
size_t size;
|
size_t size;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@ -172,13 +171,13 @@ static int ipc3_trace_update_filter(struct snd_sof_dev *sdev, int num_elems,
|
|||||||
dev_err(sdev->dev, "enabling device failed: %d\n", ret);
|
dev_err(sdev->dev, "enabling device failed: %d\n", ret);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
ret = sof_ipc_tx_message(sdev->ipc, msg, msg->hdr.size, &reply, sizeof(reply));
|
ret = sof_ipc_tx_message_no_reply(sdev->ipc, msg, msg->hdr.size);
|
||||||
pm_runtime_mark_last_busy(sdev->dev);
|
pm_runtime_mark_last_busy(sdev->dev);
|
||||||
pm_runtime_put_autosuspend(sdev->dev);
|
pm_runtime_put_autosuspend(sdev->dev);
|
||||||
|
|
||||||
error:
|
error:
|
||||||
kfree(msg);
|
kfree(msg);
|
||||||
return ret ? ret : reply.error;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t dfsentry_trace_filter_write(struct file *file, const char __user *from,
|
static ssize_t dfsentry_trace_filter_write(struct file *file, const char __user *from,
|
||||||
@ -434,7 +433,6 @@ static int ipc3_dtrace_enable(struct snd_sof_dev *sdev)
|
|||||||
struct sof_ipc_fw_ready *ready = &sdev->fw_ready;
|
struct sof_ipc_fw_ready *ready = &sdev->fw_ready;
|
||||||
struct sof_ipc_fw_version *v = &ready->version;
|
struct sof_ipc_fw_version *v = &ready->version;
|
||||||
struct sof_ipc_dma_trace_params_ext params;
|
struct sof_ipc_dma_trace_params_ext params;
|
||||||
struct sof_ipc_reply ipc_reply;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!sdev->fw_trace_is_supported)
|
if (!sdev->fw_trace_is_supported)
|
||||||
@ -474,7 +472,7 @@ static int ipc3_dtrace_enable(struct snd_sof_dev *sdev)
|
|||||||
|
|
||||||
/* send IPC to the DSP */
|
/* send IPC to the DSP */
|
||||||
priv->dtrace_state = SOF_DTRACE_INITIALIZING;
|
priv->dtrace_state = SOF_DTRACE_INITIALIZING;
|
||||||
ret = sof_ipc_tx_message(sdev->ipc, ¶ms, sizeof(params), &ipc_reply, sizeof(ipc_reply));
|
ret = sof_ipc_tx_message_no_reply(sdev->ipc, ¶ms, sizeof(params));
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(sdev->dev, "can't set params for DMA for trace %d\n", ret);
|
dev_err(sdev->dev, "can't set params for DMA for trace %d\n", ret);
|
||||||
goto trace_release;
|
goto trace_release;
|
||||||
@ -604,7 +602,6 @@ static void ipc3_dtrace_release(struct snd_sof_dev *sdev, bool only_stop)
|
|||||||
struct sof_ipc_fw_ready *ready = &sdev->fw_ready;
|
struct sof_ipc_fw_ready *ready = &sdev->fw_ready;
|
||||||
struct sof_ipc_fw_version *v = &ready->version;
|
struct sof_ipc_fw_version *v = &ready->version;
|
||||||
struct sof_ipc_cmd_hdr hdr;
|
struct sof_ipc_cmd_hdr hdr;
|
||||||
struct sof_ipc_reply ipc_reply;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!sdev->fw_trace_is_supported || priv->dtrace_state == SOF_DTRACE_DISABLED)
|
if (!sdev->fw_trace_is_supported || priv->dtrace_state == SOF_DTRACE_DISABLED)
|
||||||
@ -623,8 +620,7 @@ static void ipc3_dtrace_release(struct snd_sof_dev *sdev, bool only_stop)
|
|||||||
hdr.size = sizeof(hdr);
|
hdr.size = sizeof(hdr);
|
||||||
hdr.cmd = SOF_IPC_GLB_TRACE_MSG | SOF_IPC_TRACE_DMA_FREE;
|
hdr.cmd = SOF_IPC_GLB_TRACE_MSG | SOF_IPC_TRACE_DMA_FREE;
|
||||||
|
|
||||||
ret = sof_ipc_tx_message(sdev->ipc, &hdr, hdr.size,
|
ret = sof_ipc_tx_message_no_reply(sdev->ipc, &hdr, hdr.size);
|
||||||
&ipc_reply, sizeof(ipc_reply));
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
dev_err(sdev->dev, "DMA_TRACE_FREE failed with error: %d\n", ret);
|
dev_err(sdev->dev, "DMA_TRACE_FREE failed with error: %d\n", ret);
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,6 @@ static int sof_ipc3_pcm_hw_free(struct snd_soc_component *component,
|
|||||||
struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(component);
|
struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(component);
|
||||||
struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
|
struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
|
||||||
struct sof_ipc_stream stream;
|
struct sof_ipc_stream stream;
|
||||||
struct sof_ipc_reply reply;
|
|
||||||
struct snd_sof_pcm *spcm;
|
struct snd_sof_pcm *spcm;
|
||||||
|
|
||||||
spcm = snd_sof_find_spcm_dai(component, rtd);
|
spcm = snd_sof_find_spcm_dai(component, rtd);
|
||||||
@ -34,7 +33,7 @@ static int sof_ipc3_pcm_hw_free(struct snd_soc_component *component,
|
|||||||
stream.comp_id = spcm->stream[substream->stream].comp_id;
|
stream.comp_id = spcm->stream[substream->stream].comp_id;
|
||||||
|
|
||||||
/* send IPC to the DSP */
|
/* send IPC to the DSP */
|
||||||
return sof_ipc_tx_message(sdev->ipc, &stream, sizeof(stream), &reply, sizeof(reply));
|
return sof_ipc_tx_message_no_reply(sdev->ipc, &stream, sizeof(stream));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sof_ipc3_pcm_hw_params(struct snd_soc_component *component,
|
static int sof_ipc3_pcm_hw_params(struct snd_soc_component *component,
|
||||||
@ -146,7 +145,6 @@ static int sof_ipc3_pcm_trigger(struct snd_soc_component *component,
|
|||||||
struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
|
struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
|
||||||
struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(component);
|
struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(component);
|
||||||
struct sof_ipc_stream stream;
|
struct sof_ipc_stream stream;
|
||||||
struct sof_ipc_reply reply;
|
|
||||||
struct snd_sof_pcm *spcm;
|
struct snd_sof_pcm *spcm;
|
||||||
|
|
||||||
spcm = snd_sof_find_spcm_dai(component, rtd);
|
spcm = snd_sof_find_spcm_dai(component, rtd);
|
||||||
@ -178,7 +176,7 @@ static int sof_ipc3_pcm_trigger(struct snd_soc_component *component,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* send IPC to the DSP */
|
/* send IPC to the DSP */
|
||||||
return sof_ipc_tx_message(sdev->ipc, &stream, sizeof(stream), &reply, sizeof(reply));
|
return sof_ipc_tx_message_no_reply(sdev->ipc, &stream, sizeof(stream));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ssp_dai_config_pcm_params_match(struct snd_sof_dev *sdev, const char *link_name,
|
static void ssp_dai_config_pcm_params_match(struct snd_sof_dev *sdev, const char *link_name,
|
||||||
|
@ -1627,7 +1627,6 @@ static void sof_ipc3_widget_free_comp_dai(struct snd_sof_widget *swidget)
|
|||||||
static int sof_ipc3_route_setup(struct snd_sof_dev *sdev, struct snd_sof_route *sroute)
|
static int sof_ipc3_route_setup(struct snd_sof_dev *sdev, struct snd_sof_route *sroute)
|
||||||
{
|
{
|
||||||
struct sof_ipc_pipe_comp_connect connect;
|
struct sof_ipc_pipe_comp_connect connect;
|
||||||
struct sof_ipc_reply reply;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
connect.hdr.size = sizeof(connect);
|
connect.hdr.size = sizeof(connect);
|
||||||
@ -1640,7 +1639,7 @@ static int sof_ipc3_route_setup(struct snd_sof_dev *sdev, struct snd_sof_route *
|
|||||||
sroute->sink_widget->widget->name);
|
sroute->sink_widget->widget->name);
|
||||||
|
|
||||||
/* send ipc */
|
/* send ipc */
|
||||||
ret = sof_ipc_tx_message(sdev->ipc, &connect, sizeof(connect), &reply, sizeof(reply));
|
ret = sof_ipc_tx_message_no_reply(sdev->ipc, &connect, sizeof(connect));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
dev_err(sdev->dev, "%s: route %s -> %s failed\n", __func__,
|
dev_err(sdev->dev, "%s: route %s -> %s failed\n", __func__,
|
||||||
sroute->src_widget->widget->name, sroute->sink_widget->widget->name);
|
sroute->src_widget->widget->name, sroute->sink_widget->widget->name);
|
||||||
@ -1789,7 +1788,7 @@ static int sof_ipc3_control_free(struct snd_sof_dev *sdev, struct snd_sof_contro
|
|||||||
fcomp.id = scontrol->comp_id;
|
fcomp.id = scontrol->comp_id;
|
||||||
|
|
||||||
/* send IPC to the DSP */
|
/* send IPC to the DSP */
|
||||||
return sof_ipc_tx_message(sdev->ipc, &fcomp, sizeof(fcomp), NULL, 0);
|
return sof_ipc_tx_message_no_reply(sdev->ipc, &fcomp, sizeof(fcomp));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* send pcm params ipc */
|
/* send pcm params ipc */
|
||||||
@ -1797,7 +1796,6 @@ static int sof_ipc3_keyword_detect_pcm_params(struct snd_sof_widget *swidget, in
|
|||||||
{
|
{
|
||||||
struct snd_soc_component *scomp = swidget->scomp;
|
struct snd_soc_component *scomp = swidget->scomp;
|
||||||
struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
|
struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
|
||||||
struct sof_ipc_pcm_params_reply ipc_params_reply;
|
|
||||||
struct snd_pcm_hw_params *params;
|
struct snd_pcm_hw_params *params;
|
||||||
struct sof_ipc_pcm_params pcm;
|
struct sof_ipc_pcm_params pcm;
|
||||||
struct snd_sof_pcm *spcm;
|
struct snd_sof_pcm *spcm;
|
||||||
@ -1841,8 +1839,7 @@ static int sof_ipc3_keyword_detect_pcm_params(struct snd_sof_widget *swidget, in
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* send IPC to the DSP */
|
/* send IPC to the DSP */
|
||||||
ret = sof_ipc_tx_message(sdev->ipc, &pcm, sizeof(pcm),
|
ret = sof_ipc_tx_message_no_reply(sdev->ipc, &pcm, sizeof(pcm));
|
||||||
&ipc_params_reply, sizeof(ipc_params_reply));
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
dev_err(scomp->dev, "%s: PCM params failed for %s\n", __func__,
|
dev_err(scomp->dev, "%s: PCM params failed for %s\n", __func__,
|
||||||
swidget->widget->name);
|
swidget->widget->name);
|
||||||
@ -1856,7 +1853,6 @@ static int sof_ipc3_keyword_detect_trigger(struct snd_sof_widget *swidget, int c
|
|||||||
struct snd_soc_component *scomp = swidget->scomp;
|
struct snd_soc_component *scomp = swidget->scomp;
|
||||||
struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
|
struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
|
||||||
struct sof_ipc_stream stream;
|
struct sof_ipc_stream stream;
|
||||||
struct sof_ipc_reply reply;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* set IPC stream params */
|
/* set IPC stream params */
|
||||||
@ -1865,7 +1861,7 @@ static int sof_ipc3_keyword_detect_trigger(struct snd_sof_widget *swidget, int c
|
|||||||
stream.comp_id = swidget->comp_id;
|
stream.comp_id = swidget->comp_id;
|
||||||
|
|
||||||
/* send IPC to the DSP */
|
/* send IPC to the DSP */
|
||||||
ret = sof_ipc_tx_message(sdev->ipc, &stream, sizeof(stream), &reply, sizeof(reply));
|
ret = sof_ipc_tx_message_no_reply(sdev->ipc, &stream, sizeof(stream));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
dev_err(scomp->dev, "%s: Failed to trigger %s\n", __func__, swidget->widget->name);
|
dev_err(scomp->dev, "%s: Failed to trigger %s\n", __func__, swidget->widget->name);
|
||||||
|
|
||||||
@ -1982,7 +1978,6 @@ static int sof_ipc3_widget_bind_event(struct snd_soc_component *scomp,
|
|||||||
static int sof_ipc3_complete_pipeline(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
|
static int sof_ipc3_complete_pipeline(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
|
||||||
{
|
{
|
||||||
struct sof_ipc_pipe_ready ready;
|
struct sof_ipc_pipe_ready ready;
|
||||||
struct sof_ipc_reply reply;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
dev_dbg(sdev->dev, "tplg: complete pipeline %s id %d\n",
|
dev_dbg(sdev->dev, "tplg: complete pipeline %s id %d\n",
|
||||||
@ -1993,7 +1988,7 @@ static int sof_ipc3_complete_pipeline(struct snd_sof_dev *sdev, struct snd_sof_w
|
|||||||
ready.hdr.cmd = SOF_IPC_GLB_TPLG_MSG | SOF_IPC_TPLG_PIPE_COMPLETE;
|
ready.hdr.cmd = SOF_IPC_GLB_TPLG_MSG | SOF_IPC_TPLG_PIPE_COMPLETE;
|
||||||
ready.comp_id = swidget->comp_id;
|
ready.comp_id = swidget->comp_id;
|
||||||
|
|
||||||
ret = sof_ipc_tx_message(sdev->ipc, &ready, sizeof(ready), &reply, sizeof(reply));
|
ret = sof_ipc_tx_message_no_reply(sdev->ipc, &ready, sizeof(ready));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -2009,7 +2004,6 @@ static int sof_ipc3_widget_free(struct snd_sof_dev *sdev, struct snd_sof_widget
|
|||||||
},
|
},
|
||||||
.id = swidget->comp_id,
|
.id = swidget->comp_id,
|
||||||
};
|
};
|
||||||
struct sof_ipc_reply reply;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!swidget->private)
|
if (!swidget->private)
|
||||||
@ -2029,8 +2023,7 @@ static int sof_ipc3_widget_free(struct snd_sof_dev *sdev, struct snd_sof_widget
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = sof_ipc_tx_message(sdev->ipc, &ipc_free, sizeof(ipc_free),
|
ret = sof_ipc_tx_message_no_reply(sdev->ipc, &ipc_free, sizeof(ipc_free));
|
||||||
&reply, sizeof(reply));
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
dev_err(sdev->dev, "failed to free widget %s\n", swidget->widget->name);
|
dev_err(sdev->dev, "failed to free widget %s\n", swidget->widget->name);
|
||||||
|
|
||||||
@ -2044,7 +2037,6 @@ static int sof_ipc3_dai_config(struct snd_sof_dev *sdev, struct snd_sof_widget *
|
|||||||
struct snd_sof_dai *dai = swidget->private;
|
struct snd_sof_dai *dai = swidget->private;
|
||||||
struct sof_dai_private_data *private;
|
struct sof_dai_private_data *private;
|
||||||
struct sof_ipc_dai_config *config;
|
struct sof_ipc_dai_config *config;
|
||||||
struct sof_ipc_reply reply;
|
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (!dai || !dai->private) {
|
if (!dai || !dai->private) {
|
||||||
@ -2118,8 +2110,7 @@ static int sof_ipc3_dai_config(struct snd_sof_dev *sdev, struct snd_sof_widget *
|
|||||||
|
|
||||||
/* only send the IPC if the widget is set up in the DSP */
|
/* only send the IPC if the widget is set up in the DSP */
|
||||||
if (swidget->use_count > 0) {
|
if (swidget->use_count > 0) {
|
||||||
ret = sof_ipc_tx_message(sdev->ipc, config, config->hdr.size,
|
ret = sof_ipc_tx_message_no_reply(sdev->ipc, config, config->hdr.size);
|
||||||
&reply, sizeof(reply));
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
dev_err(sdev->dev, "Failed to set dai config for %s\n", dai->name);
|
dev_err(sdev->dev, "Failed to set dai config for %s\n", dai->name);
|
||||||
|
|
||||||
@ -2132,7 +2123,6 @@ static int sof_ipc3_dai_config(struct snd_sof_dev *sdev, struct snd_sof_widget *
|
|||||||
|
|
||||||
static int sof_ipc3_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
|
static int sof_ipc3_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
|
||||||
{
|
{
|
||||||
struct sof_ipc_comp_reply reply;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!swidget->private)
|
if (!swidget->private)
|
||||||
@ -2146,8 +2136,7 @@ static int sof_ipc3_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget
|
|||||||
struct sof_dai_private_data *dai_data = dai->private;
|
struct sof_dai_private_data *dai_data = dai->private;
|
||||||
struct sof_ipc_comp *comp = &dai_data->comp_dai->comp;
|
struct sof_ipc_comp *comp = &dai_data->comp_dai->comp;
|
||||||
|
|
||||||
ret = sof_ipc_tx_message(sdev->ipc, dai_data->comp_dai,
|
ret = sof_ipc_tx_message_no_reply(sdev->ipc, dai_data->comp_dai, comp->hdr.size);
|
||||||
comp->hdr.size, &reply, sizeof(reply));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case snd_soc_dapm_scheduler:
|
case snd_soc_dapm_scheduler:
|
||||||
@ -2155,8 +2144,7 @@ static int sof_ipc3_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget
|
|||||||
struct sof_ipc_pipe_new *pipeline;
|
struct sof_ipc_pipe_new *pipeline;
|
||||||
|
|
||||||
pipeline = swidget->private;
|
pipeline = swidget->private;
|
||||||
ret = sof_ipc_tx_message(sdev->ipc, pipeline, sizeof(*pipeline),
|
ret = sof_ipc_tx_message_no_reply(sdev->ipc, pipeline, sizeof(*pipeline));
|
||||||
&reply, sizeof(reply));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@ -2164,8 +2152,7 @@ static int sof_ipc3_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget
|
|||||||
struct sof_ipc_cmd_hdr *hdr;
|
struct sof_ipc_cmd_hdr *hdr;
|
||||||
|
|
||||||
hdr = swidget->private;
|
hdr = swidget->private;
|
||||||
ret = sof_ipc_tx_message(sdev->ipc, swidget->private, hdr->size,
|
ret = sof_ipc_tx_message_no_reply(sdev->ipc, swidget->private, hdr->size);
|
||||||
&reply, sizeof(reply));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1044,15 +1044,13 @@ static int sof_ipc3_set_core_state(struct snd_sof_dev *sdev, int core_idx, bool
|
|||||||
.hdr.size = sizeof(core_cfg),
|
.hdr.size = sizeof(core_cfg),
|
||||||
.hdr.cmd = SOF_IPC_GLB_PM_MSG | SOF_IPC_PM_CORE_ENABLE,
|
.hdr.cmd = SOF_IPC_GLB_PM_MSG | SOF_IPC_PM_CORE_ENABLE,
|
||||||
};
|
};
|
||||||
struct sof_ipc_reply reply;
|
|
||||||
|
|
||||||
if (on)
|
if (on)
|
||||||
core_cfg.enable_mask = sdev->enabled_cores_mask | BIT(core_idx);
|
core_cfg.enable_mask = sdev->enabled_cores_mask | BIT(core_idx);
|
||||||
else
|
else
|
||||||
core_cfg.enable_mask = sdev->enabled_cores_mask & ~BIT(core_idx);
|
core_cfg.enable_mask = sdev->enabled_cores_mask & ~BIT(core_idx);
|
||||||
|
|
||||||
return sof_ipc3_tx_msg(sdev, &core_cfg, sizeof(core_cfg),
|
return sof_ipc3_tx_msg(sdev, &core_cfg, sizeof(core_cfg), NULL, 0, false);
|
||||||
&reply, sizeof(reply), false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sof_ipc3_ctx_ipc(struct snd_sof_dev *sdev, int cmd)
|
static int sof_ipc3_ctx_ipc(struct snd_sof_dev *sdev, int cmd)
|
||||||
@ -1061,11 +1059,9 @@ static int sof_ipc3_ctx_ipc(struct snd_sof_dev *sdev, int cmd)
|
|||||||
.hdr.size = sizeof(pm_ctx),
|
.hdr.size = sizeof(pm_ctx),
|
||||||
.hdr.cmd = SOF_IPC_GLB_PM_MSG | cmd,
|
.hdr.cmd = SOF_IPC_GLB_PM_MSG | cmd,
|
||||||
};
|
};
|
||||||
struct sof_ipc_reply reply;
|
|
||||||
|
|
||||||
/* send ctx save ipc to dsp */
|
/* send ctx save ipc to dsp */
|
||||||
return sof_ipc3_tx_msg(sdev, &pm_ctx, sizeof(pm_ctx),
|
return sof_ipc3_tx_msg(sdev, &pm_ctx, sizeof(pm_ctx), NULL, 0, false);
|
||||||
&reply, sizeof(reply), false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sof_ipc3_ctx_save(struct snd_sof_dev *sdev)
|
static int sof_ipc3_ctx_save(struct snd_sof_dev *sdev)
|
||||||
@ -1081,7 +1077,6 @@ static int sof_ipc3_ctx_restore(struct snd_sof_dev *sdev)
|
|||||||
static int sof_ipc3_set_pm_gate(struct snd_sof_dev *sdev, u32 flags)
|
static int sof_ipc3_set_pm_gate(struct snd_sof_dev *sdev, u32 flags)
|
||||||
{
|
{
|
||||||
struct sof_ipc_pm_gate pm_gate;
|
struct sof_ipc_pm_gate pm_gate;
|
||||||
struct sof_ipc_reply reply;
|
|
||||||
|
|
||||||
memset(&pm_gate, 0, sizeof(pm_gate));
|
memset(&pm_gate, 0, sizeof(pm_gate));
|
||||||
|
|
||||||
@ -1091,8 +1086,7 @@ static int sof_ipc3_set_pm_gate(struct snd_sof_dev *sdev, u32 flags)
|
|||||||
pm_gate.flags = flags;
|
pm_gate.flags = flags;
|
||||||
|
|
||||||
/* send pm_gate ipc to dsp */
|
/* send pm_gate ipc to dsp */
|
||||||
return sof_ipc_tx_message_no_pm(sdev->ipc, &pm_gate, sizeof(pm_gate),
|
return sof_ipc_tx_message_no_pm_no_reply(sdev->ipc, &pm_gate, sizeof(pm_gate));
|
||||||
&reply, sizeof(reply));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct sof_ipc_pm_ops ipc3_pm_ops = {
|
static const struct sof_ipc_pm_ops ipc3_pm_ops = {
|
||||||
|
@ -39,7 +39,7 @@ static int sof_ipc4_set_multi_pipeline_state(struct snd_sof_dev *sdev, u32 state
|
|||||||
msg.data_size = ipc_size;
|
msg.data_size = ipc_size;
|
||||||
msg.data_ptr = trigger_list;
|
msg.data_ptr = trigger_list;
|
||||||
|
|
||||||
return sof_ipc_tx_message(sdev->ipc, &msg, ipc_size, NULL, 0);
|
return sof_ipc_tx_message_no_reply(sdev->ipc, &msg, ipc_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
int sof_ipc4_set_pipeline_state(struct snd_sof_dev *sdev, u32 id, u32 state)
|
int sof_ipc4_set_pipeline_state(struct snd_sof_dev *sdev, u32 id, u32 state)
|
||||||
@ -57,7 +57,7 @@ int sof_ipc4_set_pipeline_state(struct snd_sof_dev *sdev, u32 id, u32 state)
|
|||||||
|
|
||||||
msg.primary = primary;
|
msg.primary = primary;
|
||||||
|
|
||||||
return sof_ipc_tx_message(sdev->ipc, &msg, 0, NULL, 0);
|
return sof_ipc_tx_message_no_reply(sdev->ipc, &msg, 0);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(sof_ipc4_set_pipeline_state);
|
EXPORT_SYMBOL(sof_ipc4_set_pipeline_state);
|
||||||
|
|
||||||
@ -272,7 +272,7 @@ static int sof_ipc4_chain_dma_trigger(struct snd_sof_dev *sdev,
|
|||||||
if (enable)
|
if (enable)
|
||||||
msg.primary |= SOF_IPC4_GLB_CHAIN_DMA_ENABLE_MASK;
|
msg.primary |= SOF_IPC4_GLB_CHAIN_DMA_ENABLE_MASK;
|
||||||
|
|
||||||
return sof_ipc_tx_message(sdev->ipc, &msg, 0, NULL, 0);
|
return sof_ipc_tx_message_no_reply(sdev->ipc, &msg, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sof_ipc4_trigger_pipelines(struct snd_soc_component *component,
|
static int sof_ipc4_trigger_pipelines(struct snd_soc_component *component,
|
||||||
|
@ -2118,7 +2118,7 @@ static int sof_ipc4_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget
|
|||||||
msg->data_size = ipc_size;
|
msg->data_size = ipc_size;
|
||||||
msg->data_ptr = ipc_data;
|
msg->data_ptr = ipc_data;
|
||||||
|
|
||||||
ret = sof_ipc_tx_message(sdev->ipc, msg, ipc_size, NULL, 0);
|
ret = sof_ipc_tx_message_no_reply(sdev->ipc, msg, ipc_size);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(sdev->dev, "failed to create module %s\n", swidget->widget->name);
|
dev_err(sdev->dev, "failed to create module %s\n", swidget->widget->name);
|
||||||
|
|
||||||
@ -2162,7 +2162,7 @@ static int sof_ipc4_widget_free(struct snd_sof_dev *sdev, struct snd_sof_widget
|
|||||||
|
|
||||||
msg.primary = header;
|
msg.primary = header;
|
||||||
|
|
||||||
ret = sof_ipc_tx_message(sdev->ipc, &msg, 0, NULL, 0);
|
ret = sof_ipc_tx_message_no_reply(sdev->ipc, &msg, 0);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
dev_err(sdev->dev, "failed to free pipeline widget %s\n",
|
dev_err(sdev->dev, "failed to free pipeline widget %s\n",
|
||||||
swidget->widget->name);
|
swidget->widget->name);
|
||||||
@ -2320,7 +2320,7 @@ static int sof_ipc4_set_copier_sink_format(struct snd_sof_dev *sdev,
|
|||||||
msg.primary = header;
|
msg.primary = header;
|
||||||
msg.extension = extension;
|
msg.extension = extension;
|
||||||
|
|
||||||
return sof_ipc_tx_message(sdev->ipc, &msg, msg.data_size, NULL, 0);
|
return sof_ipc_tx_message_no_reply(sdev->ipc, &msg, msg.data_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sof_ipc4_route_setup(struct snd_sof_dev *sdev, struct snd_sof_route *sroute)
|
static int sof_ipc4_route_setup(struct snd_sof_dev *sdev, struct snd_sof_route *sroute)
|
||||||
@ -2403,7 +2403,7 @@ static int sof_ipc4_route_setup(struct snd_sof_dev *sdev, struct snd_sof_route *
|
|||||||
msg.primary = header;
|
msg.primary = header;
|
||||||
msg.extension = extension;
|
msg.extension = extension;
|
||||||
|
|
||||||
ret = sof_ipc_tx_message(sdev->ipc, &msg, 0, NULL, 0);
|
ret = sof_ipc_tx_message_no_reply(sdev->ipc, &msg, 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(sdev->dev, "failed to bind modules %s:%d -> %s:%d\n",
|
dev_err(sdev->dev, "failed to bind modules %s:%d -> %s:%d\n",
|
||||||
src_widget->widget->name, sroute->src_queue_id,
|
src_widget->widget->name, sroute->src_queue_id,
|
||||||
@ -2462,7 +2462,7 @@ static int sof_ipc4_route_free(struct snd_sof_dev *sdev, struct snd_sof_route *s
|
|||||||
msg.primary = header;
|
msg.primary = header;
|
||||||
msg.extension = extension;
|
msg.extension = extension;
|
||||||
|
|
||||||
ret = sof_ipc_tx_message(sdev->ipc, &msg, 0, NULL, 0);
|
ret = sof_ipc_tx_message_no_reply(sdev->ipc, &msg, 0);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
dev_err(sdev->dev, "failed to unbind modules %s:%d -> %s:%d\n",
|
dev_err(sdev->dev, "failed to unbind modules %s:%d -> %s:%d\n",
|
||||||
src_widget->widget->name, sroute->src_queue_id,
|
src_widget->widget->name, sroute->src_queue_id,
|
||||||
|
@ -64,7 +64,6 @@ static int sof_debug_ipc_flood_test(struct sof_client_dev *cdev,
|
|||||||
struct sof_ipc_flood_priv *priv = cdev->data;
|
struct sof_ipc_flood_priv *priv = cdev->data;
|
||||||
struct device *dev = &cdev->auxdev.dev;
|
struct device *dev = &cdev->auxdev.dev;
|
||||||
struct sof_ipc_cmd_hdr hdr;
|
struct sof_ipc_cmd_hdr hdr;
|
||||||
struct sof_ipc_reply reply;
|
|
||||||
u64 min_response_time = U64_MAX;
|
u64 min_response_time = U64_MAX;
|
||||||
ktime_t start, end, test_end;
|
ktime_t start, end, test_end;
|
||||||
u64 avg_response_time = 0;
|
u64 avg_response_time = 0;
|
||||||
@ -84,7 +83,7 @@ static int sof_debug_ipc_flood_test(struct sof_client_dev *cdev,
|
|||||||
/* send test IPC's */
|
/* send test IPC's */
|
||||||
while (1) {
|
while (1) {
|
||||||
start = ktime_get();
|
start = ktime_get();
|
||||||
ret = sof_client_ipc_tx_message(cdev, &hdr, &reply, sizeof(reply));
|
ret = sof_client_ipc_tx_message_no_reply(cdev, &hdr);
|
||||||
end = ktime_get();
|
end = ktime_get();
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
@ -65,7 +65,6 @@ static int ipc3_probes_init(struct sof_client_dev *cdev, u32 stream_tag,
|
|||||||
{
|
{
|
||||||
struct sof_ipc_probe_dma_add_params *msg;
|
struct sof_ipc_probe_dma_add_params *msg;
|
||||||
size_t size = struct_size(msg, dma, 1);
|
size_t size = struct_size(msg, dma, 1);
|
||||||
struct sof_ipc_reply reply;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
msg = kmalloc(size, GFP_KERNEL);
|
msg = kmalloc(size, GFP_KERNEL);
|
||||||
@ -77,7 +76,7 @@ static int ipc3_probes_init(struct sof_client_dev *cdev, u32 stream_tag,
|
|||||||
msg->dma[0].stream_tag = stream_tag;
|
msg->dma[0].stream_tag = stream_tag;
|
||||||
msg->dma[0].dma_buffer_size = buffer_size;
|
msg->dma[0].dma_buffer_size = buffer_size;
|
||||||
|
|
||||||
ret = sof_client_ipc_tx_message(cdev, msg, &reply, sizeof(reply));
|
ret = sof_client_ipc_tx_message_no_reply(cdev, msg);
|
||||||
kfree(msg);
|
kfree(msg);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -93,12 +92,11 @@ static int ipc3_probes_init(struct sof_client_dev *cdev, u32 stream_tag,
|
|||||||
static int ipc3_probes_deinit(struct sof_client_dev *cdev)
|
static int ipc3_probes_deinit(struct sof_client_dev *cdev)
|
||||||
{
|
{
|
||||||
struct sof_ipc_cmd_hdr msg;
|
struct sof_ipc_cmd_hdr msg;
|
||||||
struct sof_ipc_reply reply;
|
|
||||||
|
|
||||||
msg.size = sizeof(msg);
|
msg.size = sizeof(msg);
|
||||||
msg.cmd = SOF_IPC_GLB_PROBE | SOF_IPC_PROBE_DEINIT;
|
msg.cmd = SOF_IPC_GLB_PROBE | SOF_IPC_PROBE_DEINIT;
|
||||||
|
|
||||||
return sof_client_ipc_tx_message(cdev, &msg, &reply, sizeof(reply));
|
return sof_client_ipc_tx_message_no_reply(cdev, &msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ipc3_probes_info(struct sof_client_dev *cdev, unsigned int cmd,
|
static int ipc3_probes_info(struct sof_client_dev *cdev, unsigned int cmd,
|
||||||
@ -180,7 +178,6 @@ static int ipc3_probes_points_add(struct sof_client_dev *cdev,
|
|||||||
{
|
{
|
||||||
struct sof_ipc_probe_point_add_params *msg;
|
struct sof_ipc_probe_point_add_params *msg;
|
||||||
size_t size = struct_size(msg, desc, num_desc);
|
size_t size = struct_size(msg, desc, num_desc);
|
||||||
struct sof_ipc_reply reply;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
msg = kmalloc(size, GFP_KERNEL);
|
msg = kmalloc(size, GFP_KERNEL);
|
||||||
@ -191,7 +188,7 @@ static int ipc3_probes_points_add(struct sof_client_dev *cdev,
|
|||||||
msg->hdr.cmd = SOF_IPC_GLB_PROBE | SOF_IPC_PROBE_POINT_ADD;
|
msg->hdr.cmd = SOF_IPC_GLB_PROBE | SOF_IPC_PROBE_POINT_ADD;
|
||||||
memcpy(&msg->desc[0], desc, size - sizeof(*msg));
|
memcpy(&msg->desc[0], desc, size - sizeof(*msg));
|
||||||
|
|
||||||
ret = sof_client_ipc_tx_message(cdev, msg, &reply, sizeof(reply));
|
ret = sof_client_ipc_tx_message_no_reply(cdev, msg);
|
||||||
kfree(msg);
|
kfree(msg);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -211,7 +208,6 @@ static int ipc3_probes_points_remove(struct sof_client_dev *cdev,
|
|||||||
{
|
{
|
||||||
struct sof_ipc_probe_point_remove_params *msg;
|
struct sof_ipc_probe_point_remove_params *msg;
|
||||||
size_t size = struct_size(msg, buffer_id, num_buffer_id);
|
size_t size = struct_size(msg, buffer_id, num_buffer_id);
|
||||||
struct sof_ipc_reply reply;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
msg = kmalloc(size, GFP_KERNEL);
|
msg = kmalloc(size, GFP_KERNEL);
|
||||||
@ -222,7 +218,7 @@ static int ipc3_probes_points_remove(struct sof_client_dev *cdev,
|
|||||||
msg->hdr.cmd = SOF_IPC_GLB_PROBE | SOF_IPC_PROBE_POINT_REMOVE;
|
msg->hdr.cmd = SOF_IPC_GLB_PROBE | SOF_IPC_PROBE_POINT_REMOVE;
|
||||||
memcpy(&msg->buffer_id[0], buffer_id, size - sizeof(*msg));
|
memcpy(&msg->buffer_id[0], buffer_id, size - sizeof(*msg));
|
||||||
|
|
||||||
ret = sof_client_ipc_tx_message(cdev, msg, &reply, sizeof(reply));
|
ret = sof_client_ipc_tx_message_no_reply(cdev, msg);
|
||||||
kfree(msg);
|
kfree(msg);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -129,7 +129,7 @@ static int ipc4_probes_init(struct sof_client_dev *cdev, u32 stream_tag,
|
|||||||
msg.data_size = sizeof(cfg);
|
msg.data_size = sizeof(cfg);
|
||||||
msg.data_ptr = &cfg;
|
msg.data_ptr = &cfg;
|
||||||
|
|
||||||
return sof_client_ipc_tx_message(cdev, &msg, NULL, 0);
|
return sof_client_ipc_tx_message_no_reply(cdev, &msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -156,7 +156,7 @@ static int ipc4_probes_deinit(struct sof_client_dev *cdev)
|
|||||||
msg.data_size = 0;
|
msg.data_size = 0;
|
||||||
msg.data_ptr = NULL;
|
msg.data_ptr = NULL;
|
||||||
|
|
||||||
return sof_client_ipc_tx_message(cdev, &msg, NULL, 0);
|
return sof_client_ipc_tx_message_no_reply(cdev, &msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -39,6 +39,10 @@ struct sof_client_dev {
|
|||||||
|
|
||||||
int sof_client_ipc_tx_message(struct sof_client_dev *cdev, void *ipc_msg,
|
int sof_client_ipc_tx_message(struct sof_client_dev *cdev, void *ipc_msg,
|
||||||
void *reply_data, size_t reply_bytes);
|
void *reply_data, size_t reply_bytes);
|
||||||
|
static inline int sof_client_ipc_tx_message_no_reply(struct sof_client_dev *cdev, void *ipc_msg)
|
||||||
|
{
|
||||||
|
return sof_client_ipc_tx_message(cdev, ipc_msg, NULL, 0);
|
||||||
|
}
|
||||||
int sof_client_ipc_set_get_data(struct sof_client_dev *cdev, void *ipc_msg,
|
int sof_client_ipc_set_get_data(struct sof_client_dev *cdev, void *ipc_msg,
|
||||||
bool set);
|
bool set);
|
||||||
|
|
||||||
|
@ -711,10 +711,20 @@ static inline void snd_sof_ipc_msgs_rx(struct snd_sof_dev *sdev)
|
|||||||
}
|
}
|
||||||
int sof_ipc_tx_message(struct snd_sof_ipc *ipc, void *msg_data, size_t msg_bytes,
|
int sof_ipc_tx_message(struct snd_sof_ipc *ipc, void *msg_data, size_t msg_bytes,
|
||||||
void *reply_data, size_t reply_bytes);
|
void *reply_data, size_t reply_bytes);
|
||||||
|
static inline int sof_ipc_tx_message_no_reply(struct snd_sof_ipc *ipc, void *msg_data,
|
||||||
|
size_t msg_bytes)
|
||||||
|
{
|
||||||
|
return sof_ipc_tx_message(ipc, msg_data, msg_bytes, NULL, 0);
|
||||||
|
}
|
||||||
int sof_ipc_set_get_data(struct snd_sof_ipc *ipc, void *msg_data,
|
int sof_ipc_set_get_data(struct snd_sof_ipc *ipc, void *msg_data,
|
||||||
size_t msg_bytes, bool set);
|
size_t msg_bytes, bool set);
|
||||||
int sof_ipc_tx_message_no_pm(struct snd_sof_ipc *ipc, void *msg_data, size_t msg_bytes,
|
int sof_ipc_tx_message_no_pm(struct snd_sof_ipc *ipc, void *msg_data, size_t msg_bytes,
|
||||||
void *reply_data, size_t reply_bytes);
|
void *reply_data, size_t reply_bytes);
|
||||||
|
static inline int sof_ipc_tx_message_no_pm_no_reply(struct snd_sof_ipc *ipc, void *msg_data,
|
||||||
|
size_t msg_bytes)
|
||||||
|
{
|
||||||
|
return sof_ipc_tx_message_no_pm(ipc, msg_data, msg_bytes, NULL, 0);
|
||||||
|
}
|
||||||
int sof_ipc_send_msg(struct snd_sof_dev *sdev, void *msg_data, size_t msg_bytes,
|
int sof_ipc_send_msg(struct snd_sof_dev *sdev, void *msg_data, size_t msg_bytes,
|
||||||
size_t reply_bytes);
|
size_t reply_bytes);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user