xref: /kernel/linux/linux-6.6/sound/soc/sof/ipc3-priv.h (revision 62306a36)
162306a36Sopenharmony_ci/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * This file is provided under a dual BSD/GPLv2 license.  When using or
462306a36Sopenharmony_ci * redistributing this file, you may do so under either license.
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Copyright(c) 2021 Intel Corporation. All rights reserved.
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#ifndef __SOUND_SOC_SOF_IPC3_PRIV_H
1062306a36Sopenharmony_ci#define __SOUND_SOC_SOF_IPC3_PRIV_H
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include "sof-priv.h"
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci/* IPC3 specific ops */
1562306a36Sopenharmony_ciextern const struct sof_ipc_pcm_ops ipc3_pcm_ops;
1662306a36Sopenharmony_ciextern const struct sof_ipc_tplg_ops ipc3_tplg_ops;
1762306a36Sopenharmony_ciextern const struct sof_ipc_tplg_control_ops tplg_ipc3_control_ops;
1862306a36Sopenharmony_ciextern const struct sof_ipc_fw_loader_ops ipc3_loader_ops;
1962306a36Sopenharmony_ciextern const struct sof_ipc_fw_tracing_ops ipc3_dtrace_ops;
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci/* helpers for fw_ready and ext_manifest parsing */
2262306a36Sopenharmony_ciint sof_ipc3_get_ext_windows(struct snd_sof_dev *sdev,
2362306a36Sopenharmony_ci			     const struct sof_ipc_ext_data_hdr *ext_hdr);
2462306a36Sopenharmony_ciint sof_ipc3_get_cc_info(struct snd_sof_dev *sdev,
2562306a36Sopenharmony_ci			 const struct sof_ipc_ext_data_hdr *ext_hdr);
2662306a36Sopenharmony_ciint sof_ipc3_validate_fw_version(struct snd_sof_dev *sdev);
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci/* dtrace position update */
2962306a36Sopenharmony_ciint ipc3_dtrace_posn_update(struct snd_sof_dev *sdev,
3062306a36Sopenharmony_ci			    struct sof_ipc_dma_trace_posn *posn);
3162306a36Sopenharmony_ci/* RX handler backend */
3262306a36Sopenharmony_civoid sof_ipc3_do_rx_work(struct snd_sof_dev *sdev, struct sof_ipc_cmd_hdr *hdr, void *msg_buf);
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci/* dtrace platform callback wrappers */
3562306a36Sopenharmony_cistatic inline int sof_dtrace_host_init(struct snd_sof_dev *sdev,
3662306a36Sopenharmony_ci				       struct snd_dma_buffer *dmatb,
3762306a36Sopenharmony_ci				       struct sof_ipc_dma_trace_params_ext *dtrace_params)
3862306a36Sopenharmony_ci{
3962306a36Sopenharmony_ci	struct snd_sof_dsp_ops *dsp_ops = sdev->pdata->desc->ops;
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci	if (dsp_ops->trace_init)
4262306a36Sopenharmony_ci		return dsp_ops->trace_init(sdev, dmatb, dtrace_params);
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci	return 0;
4562306a36Sopenharmony_ci}
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_cistatic inline int sof_dtrace_host_release(struct snd_sof_dev *sdev)
4862306a36Sopenharmony_ci{
4962306a36Sopenharmony_ci	struct snd_sof_dsp_ops *dsp_ops = sdev->pdata->desc->ops;
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci	if (dsp_ops->trace_release)
5262306a36Sopenharmony_ci		return dsp_ops->trace_release(sdev);
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci	return 0;
5562306a36Sopenharmony_ci}
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_cistatic inline int sof_dtrace_host_trigger(struct snd_sof_dev *sdev, int cmd)
5862306a36Sopenharmony_ci{
5962306a36Sopenharmony_ci	struct snd_sof_dsp_ops *dsp_ops = sdev->pdata->desc->ops;
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci	if (dsp_ops->trace_trigger)
6262306a36Sopenharmony_ci		return dsp_ops->trace_trigger(sdev, cmd);
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci	return 0;
6562306a36Sopenharmony_ci}
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci#endif
68