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