mirror of
https://github.com/torvalds/linux.git
synced 2026-05-22 06:01:53 +02:00
ASoC: SOF: Prepare ipc_msg_data to be used with compress API
Make second parameter of ipc_msg_data generic in order to be able to support compressed streams. This patch doesn't hold any functional change. With this case we can use ipc_msg_data, to retrieve information from DSP for both PCM/Compress API. Reviewed-by: Paul Olaru <paul.olaru@nxp.com> Reviewed-by: Iuliana Prodan <iuliana.prodan@nxp.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Reviewed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com> Link: https://lore.kernel.org/r/20230117122533.201708-2-daniel.baluta@oss.nxp.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
738455858a
commit
1b905942d6
|
|
@ -200,14 +200,15 @@ irqreturn_t acp_sof_ipc_irq_thread(int irq, void *context)
|
|||
}
|
||||
EXPORT_SYMBOL_NS(acp_sof_ipc_irq_thread, SND_SOC_SOF_AMD_COMMON);
|
||||
|
||||
int acp_sof_ipc_msg_data(struct snd_sof_dev *sdev, struct snd_pcm_substream *substream,
|
||||
int acp_sof_ipc_msg_data(struct snd_sof_dev *sdev, struct snd_sof_pcm_stream *sps,
|
||||
void *p, size_t sz)
|
||||
{
|
||||
unsigned int offset = sdev->dsp_box.offset;
|
||||
|
||||
if (!substream || !sdev->stream_box.size) {
|
||||
if (!sps || !sdev->stream_box.size) {
|
||||
acp_mailbox_read(sdev, offset, p, sz);
|
||||
} else {
|
||||
struct snd_pcm_substream *substream = sps->substream;
|
||||
struct acp_dsp_stream *stream = substream->runtime->private_data;
|
||||
|
||||
if (!stream)
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
#define __SOF_AMD_ACP_H
|
||||
|
||||
#include "../sof-priv.h"
|
||||
#include "../sof-audio.h"
|
||||
|
||||
#define ACP_MAX_STREAM 8
|
||||
|
||||
|
|
@ -211,7 +212,7 @@ int acp_dsp_block_read(struct snd_sof_dev *sdev, enum snd_sof_fw_blk_type blk_ty
|
|||
|
||||
/* IPC callbacks */
|
||||
irqreturn_t acp_sof_ipc_irq_thread(int irq, void *context);
|
||||
int acp_sof_ipc_msg_data(struct snd_sof_dev *sdev, struct snd_pcm_substream *substream,
|
||||
int acp_sof_ipc_msg_data(struct snd_sof_dev *sdev, struct snd_sof_pcm_stream *sps,
|
||||
void *p, size_t sz);
|
||||
int acp_set_stream_data_offset(struct snd_sof_dev *sdev,
|
||||
struct snd_pcm_substream *substream,
|
||||
|
|
|
|||
|
|
@ -361,12 +361,13 @@ int hda_dsp_ipc_get_window_offset(struct snd_sof_dev *sdev, u32 id)
|
|||
}
|
||||
|
||||
int hda_ipc_msg_data(struct snd_sof_dev *sdev,
|
||||
struct snd_pcm_substream *substream,
|
||||
struct snd_sof_pcm_stream *sps,
|
||||
void *p, size_t sz)
|
||||
{
|
||||
if (!substream || !sdev->stream_box.size) {
|
||||
if (!sps || !sdev->stream_box.size) {
|
||||
sof_mailbox_read(sdev, sdev->dsp_box.offset, p, sz);
|
||||
} else {
|
||||
struct snd_pcm_substream *substream = sps->substream;
|
||||
struct hdac_stream *hstream = substream->runtime->private_data;
|
||||
struct sof_intel_hda_stream *hda_stream;
|
||||
|
||||
|
|
|
|||
|
|
@ -656,7 +656,7 @@ int hda_dsp_stream_spib_config(struct snd_sof_dev *sdev,
|
|||
int enable, u32 size);
|
||||
|
||||
int hda_ipc_msg_data(struct snd_sof_dev *sdev,
|
||||
struct snd_pcm_substream *substream,
|
||||
struct snd_sof_pcm_stream *sps,
|
||||
void *p, size_t sz);
|
||||
int hda_set_stream_data_offset(struct snd_sof_dev *sdev,
|
||||
struct snd_pcm_substream *substream,
|
||||
|
|
|
|||
|
|
@ -847,7 +847,7 @@ static void ipc3_period_elapsed(struct snd_sof_dev *sdev, u32 msg_id)
|
|||
}
|
||||
|
||||
stream = &spcm->stream[direction];
|
||||
ret = snd_sof_ipc_msg_data(sdev, stream->substream, &posn, sizeof(posn));
|
||||
ret = snd_sof_ipc_msg_data(sdev, stream, &posn, sizeof(posn));
|
||||
if (ret < 0) {
|
||||
dev_warn(sdev->dev, "failed to read stream position: %d\n", ret);
|
||||
return;
|
||||
|
|
@ -882,7 +882,7 @@ static void ipc3_xrun(struct snd_sof_dev *sdev, u32 msg_id)
|
|||
}
|
||||
|
||||
stream = &spcm->stream[direction];
|
||||
ret = snd_sof_ipc_msg_data(sdev, stream->substream, &posn, sizeof(posn));
|
||||
ret = snd_sof_ipc_msg_data(sdev, stream, &posn, sizeof(posn));
|
||||
if (ret < 0) {
|
||||
dev_warn(sdev->dev, "failed to read overrun position: %d\n", ret);
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -494,7 +494,7 @@ static snd_pcm_uframes_t mt8186_pcm_pointer(struct snd_sof_dev *sdev,
|
|||
}
|
||||
|
||||
stream = &spcm->stream[substream->stream];
|
||||
ret = snd_sof_ipc_msg_data(sdev, stream->substream, &posn, sizeof(posn));
|
||||
ret = snd_sof_ipc_msg_data(sdev, stream, &posn, sizeof(posn));
|
||||
if (ret < 0) {
|
||||
dev_warn(sdev->dev, "failed to read stream position: %d\n", ret);
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -520,7 +520,7 @@ static snd_pcm_uframes_t mt8195_pcm_pointer(struct snd_sof_dev *sdev,
|
|||
}
|
||||
|
||||
stream = &spcm->stream[substream->stream];
|
||||
ret = snd_sof_ipc_msg_data(sdev, stream->substream, &posn, sizeof(posn));
|
||||
ret = snd_sof_ipc_msg_data(sdev, stream, &posn, sizeof(posn));
|
||||
if (ret < 0) {
|
||||
dev_warn(sdev->dev, "failed to read stream position: %d\n", ret);
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -472,10 +472,10 @@ static inline int snd_sof_load_firmware(struct snd_sof_dev *sdev)
|
|||
|
||||
/* host DSP message data */
|
||||
static inline int snd_sof_ipc_msg_data(struct snd_sof_dev *sdev,
|
||||
struct snd_pcm_substream *substream,
|
||||
struct snd_sof_pcm_stream *sps,
|
||||
void *p, size_t sz)
|
||||
{
|
||||
return sof_ops(sdev)->ipc_msg_data(sdev, substream, p, sz);
|
||||
return sof_ops(sdev)->ipc_msg_data(sdev, sps, p, sz);
|
||||
}
|
||||
/* host side configuration of the stream's data offset in stream mailbox area */
|
||||
static inline int
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@
|
|||
#include <uapi/sound/sof/fw.h>
|
||||
#include <sound/sof/ext_manifest.h>
|
||||
|
||||
struct snd_sof_pcm_stream;
|
||||
|
||||
/* Flag definitions used in sof_core_debug (sof_debug module parameter) */
|
||||
#define SOF_DBG_ENABLE_TRACE BIT(0)
|
||||
#define SOF_DBG_RETAIN_CTX BIT(1) /* prevent DSP D3 on FW exception */
|
||||
|
|
@ -247,7 +249,7 @@ struct snd_sof_dsp_ops {
|
|||
|
||||
/* host read DSP stream data */
|
||||
int (*ipc_msg_data)(struct snd_sof_dev *sdev,
|
||||
struct snd_pcm_substream *substream,
|
||||
struct snd_sof_pcm_stream *sps,
|
||||
void *p, size_t sz); /* mandatory */
|
||||
|
||||
/* host side configuration of the stream's data offset in stream mailbox area */
|
||||
|
|
@ -761,7 +763,7 @@ int sof_block_read(struct snd_sof_dev *sdev, enum snd_sof_fw_blk_type blk_type,
|
|||
u32 offset, void *dest, size_t size);
|
||||
|
||||
int sof_ipc_msg_data(struct snd_sof_dev *sdev,
|
||||
struct snd_pcm_substream *substream,
|
||||
struct snd_sof_pcm_stream *sps,
|
||||
void *p, size_t sz);
|
||||
int sof_set_stream_data_offset(struct snd_sof_dev *sdev,
|
||||
struct snd_pcm_substream *substream,
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
#include "ops.h"
|
||||
#include "sof-priv.h"
|
||||
#include "sof-audio.h"
|
||||
|
||||
struct sof_stream {
|
||||
size_t posn_offset;
|
||||
|
|
@ -26,12 +27,13 @@ struct sof_stream {
|
|||
|
||||
/* Mailbox-based Generic IPC implementation */
|
||||
int sof_ipc_msg_data(struct snd_sof_dev *sdev,
|
||||
struct snd_pcm_substream *substream,
|
||||
struct snd_sof_pcm_stream *sps,
|
||||
void *p, size_t sz)
|
||||
{
|
||||
if (!substream || !sdev->stream_box.size) {
|
||||
if (!sps || !sdev->stream_box.size) {
|
||||
snd_sof_dsp_mailbox_read(sdev, sdev->dsp_box.offset, p, sz);
|
||||
} else {
|
||||
struct snd_pcm_substream *substream = sps->substream;
|
||||
struct sof_stream *stream = substream->runtime->private_data;
|
||||
|
||||
/* The stream might already be closed */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user