LF-3774-1 ASoC: sof: Make Intel IPC stream ops generic
authorDaniel Baluta <daniel.baluta@nxp.com>
Tue, 11 May 2021 18:18:25 +0000 (21:18 +0300)
committerDaniel Baluta <daniel.baluta@nxp.com>
Thu, 13 May 2021 06:33:52 +0000 (09:33 +0300)
This operations should be generic as there is nothing Intel
specific.
This works well for NXP i.MX8 stream IPC ops.

We start by moving sof/intel/intel-ipc.c into sof/stream.c and
rename
the functions to be generic.

Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
sound/soc/sof/Makefile
sound/soc/sof/intel/Makefile
sound/soc/sof/intel/bdw.c
sound/soc/sof/intel/byt.c
sound/soc/sof/intel/intel-ipc.c [deleted file]
sound/soc/sof/ipc-stream.c [new file with mode: 0644]
sound/soc/sof/sof-priv.h

index ad8cfdc..60fc66f 100644 (file)
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
 
 snd-sof-objs := core.o ops.o loader.o ipc.o pcm.o pm.o debug.o topology.o\
-               control.o trace.o utils.o sof-audio.o
+               control.o trace.o utils.o sof-audio.o ipc-stream.o
 snd-sof-$(CONFIG_SND_SOC_SOF_COMPRESS) += compress.o
 snd-sof-$(CONFIG_SND_SOC_SOF_DEBUG_PROBES) += probe.o probe_compress.o
 
index 72d85b2..9d8a643 100644 (file)
@@ -3,8 +3,6 @@
 snd-sof-intel-byt-objs := byt.o
 snd-sof-intel-bdw-objs := bdw.o
 
-snd-sof-intel-ipc-objs := intel-ipc.o
-
 snd-sof-intel-hda-common-objs := hda.o hda-loader.o hda-stream.o hda-trace.o \
                                 hda-dsp.o hda-ipc.o hda-ctrl.o hda-pcm.o \
                                 hda-dai.o hda-bus.o \
@@ -15,6 +13,5 @@ snd-sof-intel-hda-objs := hda-codec.o
 
 obj-$(CONFIG_SND_SOC_SOF_INTEL_ATOM_HIFI_EP) += snd-sof-intel-byt.o
 obj-$(CONFIG_SND_SOC_SOF_BROADWELL) += snd-sof-intel-bdw.o
-obj-$(CONFIG_SND_SOC_SOF_INTEL_HIFI_EP_IPC) += snd-sof-intel-ipc.o
 obj-$(CONFIG_SND_SOC_SOF_HDA_COMMON) += snd-sof-intel-hda-common.o
 obj-$(CONFIG_SND_SOC_SOF_HDA) += snd-sof-intel-hda.o
index 50a4a73..c0c993c 100644 (file)
@@ -614,8 +614,8 @@ const struct snd_sof_dsp_ops sof_bdw_ops = {
        .get_mailbox_offset = bdw_get_mailbox_offset,
        .get_window_offset = bdw_get_window_offset,
 
-       .ipc_msg_data   = intel_ipc_msg_data,
-       .ipc_pcm_params = intel_ipc_pcm_params,
+       .ipc_msg_data   = sof_ipc_msg_data,
+       .ipc_pcm_params = sof_ipc_pcm_params,
 
        /* machine driver */
        .machine_select = bdw_machine_select,
@@ -629,8 +629,8 @@ const struct snd_sof_dsp_ops sof_bdw_ops = {
        .dbg_dump   = bdw_dump,
 
        /* stream callbacks */
-       .pcm_open       = intel_pcm_open,
-       .pcm_close      = intel_pcm_close,
+       .pcm_open       = sof_stream_pcm_open,
+       .pcm_close      = sof_stream_pcm_close,
 
        /* Module loading */
        .load_module    = snd_sof_parse_module_memcpy,
index 186736e..1164d16 100644 (file)
@@ -851,8 +851,8 @@ const struct snd_sof_dsp_ops sof_byt_ops = {
        .get_mailbox_offset = byt_get_mailbox_offset,
        .get_window_offset = byt_get_window_offset,
 
-       .ipc_msg_data   = intel_ipc_msg_data,
-       .ipc_pcm_params = intel_ipc_pcm_params,
+       .ipc_msg_data   = sof_ipc_msg_data,
+       .ipc_pcm_params = sof_ipc_pcm_params,
 
        /* machine driver */
        .machine_select = byt_machine_select,
@@ -866,8 +866,8 @@ const struct snd_sof_dsp_ops sof_byt_ops = {
        .dbg_dump       = byt_dump,
 
        /* stream callbacks */
-       .pcm_open       = intel_pcm_open,
-       .pcm_close      = intel_pcm_close,
+       .pcm_open       = sof_stream_pcm_open,
+       .pcm_close      = sof_stream_pcm_close,
 
        /* module loading */
        .load_module    = snd_sof_parse_module_memcpy,
@@ -930,8 +930,8 @@ const struct snd_sof_dsp_ops sof_cht_ops = {
        .get_mailbox_offset = byt_get_mailbox_offset,
        .get_window_offset = byt_get_window_offset,
 
-       .ipc_msg_data   = intel_ipc_msg_data,
-       .ipc_pcm_params = intel_ipc_pcm_params,
+       .ipc_msg_data   = sof_ipc_msg_data,
+       .ipc_pcm_params = sof_ipc_pcm_params,
 
        /* machine driver */
        .machine_select = byt_machine_select,
@@ -945,8 +945,8 @@ const struct snd_sof_dsp_ops sof_cht_ops = {
        .dbg_dump       = byt_dump,
 
        /* stream callbacks */
-       .pcm_open       = intel_pcm_open,
-       .pcm_close      = intel_pcm_close,
+       .pcm_open       = sof_stream_pcm_open,
+       .pcm_close      = sof_stream_pcm_close,
 
        /* module loading */
        .load_module    = snd_sof_parse_module_memcpy,
diff --git a/sound/soc/sof/intel/intel-ipc.c b/sound/soc/sof/intel/intel-ipc.c
deleted file mode 100644 (file)
index 4bd940b..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
-//
-// This file is provided under a dual BSD/GPLv2 license.  When using or
-// redistributing this file, you may do so under either license.
-//
-// Copyright(c) 2019 Intel Corporation. All rights reserved.
-//
-// Authors: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
-
-/* Intel-specific SOF IPC code */
-
-#include <linux/device.h>
-#include <linux/export.h>
-#include <linux/module.h>
-#include <linux/types.h>
-
-#include <sound/pcm.h>
-#include <sound/sof/stream.h>
-
-#include "../ops.h"
-#include "../sof-audio.h"
-#include "../sof-priv.h"
-
-struct intel_stream {
-       size_t posn_offset;
-};
-
-/* Mailbox-based Intel IPC implementation */
-void intel_ipc_msg_data(struct snd_sof_dev *sdev,
-                       struct snd_sof_pcm_stream *sps,
-                       void *p, size_t sz)
-{
-       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 intel_stream *stream = substream->runtime->private_data;
-
-               /* The stream might already be closed */
-               if (stream)
-                       sof_mailbox_read(sdev, stream->posn_offset, p, sz);
-       }
-}
-EXPORT_SYMBOL_NS(intel_ipc_msg_data, SND_SOC_SOF_INTEL_HIFI_EP_IPC);
-
-int intel_ipc_pcm_params(struct snd_sof_dev *sdev,
-                        struct snd_pcm_substream *substream,
-                        const struct sof_ipc_pcm_params_reply *reply)
-{
-       struct intel_stream *stream = substream->runtime->private_data;
-       size_t posn_offset = reply->posn_offset;
-
-       /* check if offset is overflow or it is not aligned */
-       if (posn_offset > sdev->stream_box.size ||
-           posn_offset % sizeof(struct sof_ipc_stream_posn) != 0)
-               return -EINVAL;
-
-       stream->posn_offset = sdev->stream_box.offset + posn_offset;
-
-       dev_dbg(sdev->dev, "pcm: stream dir %d, posn mailbox offset is %zu",
-               substream->stream, stream->posn_offset);
-
-       return 0;
-}
-EXPORT_SYMBOL_NS(intel_ipc_pcm_params, SND_SOC_SOF_INTEL_HIFI_EP_IPC);
-
-int intel_pcm_open(struct snd_sof_dev *sdev,
-                  struct snd_pcm_substream *substream)
-{
-       struct intel_stream *stream = kmalloc(sizeof(*stream), GFP_KERNEL);
-
-       if (!stream)
-               return -ENOMEM;
-
-       /* binding pcm substream to hda stream */
-       substream->runtime->private_data = stream;
-
-       return 0;
-}
-EXPORT_SYMBOL_NS(intel_pcm_open, SND_SOC_SOF_INTEL_HIFI_EP_IPC);
-
-int intel_pcm_close(struct snd_sof_dev *sdev,
-                   struct snd_pcm_substream *substream)
-{
-       struct intel_stream *stream = substream->runtime->private_data;
-
-       substream->runtime->private_data = NULL;
-       kfree(stream);
-
-       return 0;
-}
-EXPORT_SYMBOL_NS(intel_pcm_close, SND_SOC_SOF_INTEL_HIFI_EP_IPC);
-
-MODULE_LICENSE("Dual BSD/GPL");
diff --git a/sound/soc/sof/ipc-stream.c b/sound/soc/sof/ipc-stream.c
new file mode 100644 (file)
index 0000000..497c082
--- /dev/null
@@ -0,0 +1,94 @@
+// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
+//
+// This file is provided under a dual BSD/GPLv2 license.  When using or
+// redistributing this file, you may do so under either license.
+//
+// Copyright(c) 2019 Intel Corporation. All rights reserved.
+//
+// Authors: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
+
+/* Intel-specific SOF IPC code */
+
+#include <linux/device.h>
+#include <linux/export.h>
+#include <linux/module.h>
+#include <linux/types.h>
+
+#include <sound/pcm.h>
+#include <sound/sof/stream.h>
+
+#include "ops.h"
+#include "sof-audio.h"
+#include "sof-priv.h"
+
+struct sof_pcm_stream {
+       size_t posn_offset;
+};
+
+/* Mailbox-based Intel IPC implementation */
+void sof_ipc_msg_data(struct snd_sof_dev *sdev,
+                     struct snd_sof_pcm_stream *sps,
+                     void *p, size_t sz)
+{
+       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 sof_pcm_stream *stream = substream->runtime->private_data;
+
+               /* The stream might already be closed */
+               if (stream)
+                       sof_mailbox_read(sdev, stream->posn_offset, p, sz);
+       }
+}
+EXPORT_SYMBOL(sof_ipc_msg_data);
+
+int sof_ipc_pcm_params(struct snd_sof_dev *sdev,
+                      struct snd_pcm_substream *substream,
+                      const struct sof_ipc_pcm_params_reply *reply)
+{
+       struct sof_pcm_stream *stream = substream->runtime->private_data;
+       size_t posn_offset = reply->posn_offset;
+
+       /* check if offset is overflow or it is not aligned */
+       if (posn_offset > sdev->stream_box.size ||
+           posn_offset % sizeof(struct sof_ipc_stream_posn) != 0)
+               return -EINVAL;
+
+       stream->posn_offset = sdev->stream_box.offset + posn_offset;
+
+       dev_dbg(sdev->dev, "pcm: stream dir %d, posn mailbox offset is %zu",
+               substream->stream, stream->posn_offset);
+
+       return 0;
+}
+EXPORT_SYMBOL(sof_ipc_pcm_params);
+
+int sof_stream_pcm_open(struct snd_sof_dev *sdev,
+                       struct snd_pcm_substream *substream)
+{
+       struct sof_pcm_stream *stream = kmalloc(sizeof(*stream), GFP_KERNEL);
+
+       if (!stream)
+               return -ENOMEM;
+
+       /* binding pcm substream to hda stream */
+       substream->runtime->private_data = stream;
+
+       return 0;
+}
+EXPORT_SYMBOL(sof_stream_pcm_open);
+
+int sof_stream_pcm_close(struct snd_sof_dev *sdev,
+                   struct snd_pcm_substream *substream)
+{
+       struct sof_pcm_stream *stream = substream->runtime->private_data;
+
+       substream->runtime->private_data = NULL;
+       kfree(stream);
+
+       return 0;
+}
+EXPORT_SYMBOL(sof_stream_pcm_close);
+
+MODULE_LICENSE("Dual BSD/GPL");
index 2906926..9d2e6f1 100644 (file)
@@ -566,17 +566,17 @@ void sof_block_read(struct snd_sof_dev *sdev, u32 bar, u32 offset, void *dest,
 
 int sof_fw_ready(struct snd_sof_dev *sdev, u32 msg_id);
 
-void intel_ipc_msg_data(struct snd_sof_dev *sdev,
-                       struct snd_sof_pcm_stream *sps,
-                       void *p, size_t sz);
-int intel_ipc_pcm_params(struct snd_sof_dev *sdev,
-                        struct snd_pcm_substream *substream,
-                        const struct sof_ipc_pcm_params_reply *reply);
-
-int intel_pcm_open(struct snd_sof_dev *sdev,
-                  struct snd_pcm_substream *substream);
-int intel_pcm_close(struct snd_sof_dev *sdev,
-                   struct snd_pcm_substream *substream);
+void sof_ipc_msg_data(struct snd_sof_dev *sdev,
+                     struct snd_sof_pcm_stream *sps,
+                     void *p, size_t sz);
+int sof_ipc_pcm_params(struct snd_sof_dev *sdev,
+                      struct snd_pcm_substream *substream,
+                      const struct sof_ipc_pcm_params_reply *reply);
+
+int sof_stream_pcm_open(struct snd_sof_dev *sdev,
+                       struct snd_pcm_substream *substream);
+int sof_stream_pcm_close(struct snd_sof_dev *sdev,
+                        struct snd_pcm_substream *substream);
 
 int sof_machine_check(struct snd_sof_dev *sdev);