162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci#ifndef __SOF_CLIENT_PROBES_H 462306a36Sopenharmony_ci#define __SOF_CLIENT_PROBES_H 562306a36Sopenharmony_ci 662306a36Sopenharmony_cistruct snd_compr_stream; 762306a36Sopenharmony_cistruct snd_compr_tstamp; 862306a36Sopenharmony_cistruct snd_compr_params; 962306a36Sopenharmony_cistruct sof_client_dev; 1062306a36Sopenharmony_cistruct snd_soc_dai; 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci/* 1362306a36Sopenharmony_ci * Callbacks used on platforms where the control for audio is split between 1462306a36Sopenharmony_ci * DSP and host, like HDA. 1562306a36Sopenharmony_ci */ 1662306a36Sopenharmony_cistruct sof_probes_host_ops { 1762306a36Sopenharmony_ci int (*startup)(struct sof_client_dev *cdev, struct snd_compr_stream *cstream, 1862306a36Sopenharmony_ci struct snd_soc_dai *dai, u32 *stream_id); 1962306a36Sopenharmony_ci int (*shutdown)(struct sof_client_dev *cdev, struct snd_compr_stream *cstream, 2062306a36Sopenharmony_ci struct snd_soc_dai *dai); 2162306a36Sopenharmony_ci int (*set_params)(struct sof_client_dev *cdev, struct snd_compr_stream *cstream, 2262306a36Sopenharmony_ci struct snd_compr_params *params, 2362306a36Sopenharmony_ci struct snd_soc_dai *dai); 2462306a36Sopenharmony_ci int (*trigger)(struct sof_client_dev *cdev, struct snd_compr_stream *cstream, 2562306a36Sopenharmony_ci int cmd, struct snd_soc_dai *dai); 2662306a36Sopenharmony_ci int (*pointer)(struct sof_client_dev *cdev, struct snd_compr_stream *cstream, 2762306a36Sopenharmony_ci struct snd_compr_tstamp *tstamp, 2862306a36Sopenharmony_ci struct snd_soc_dai *dai); 2962306a36Sopenharmony_ci}; 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_cistruct sof_probe_point_desc { 3262306a36Sopenharmony_ci unsigned int buffer_id; 3362306a36Sopenharmony_ci unsigned int purpose; 3462306a36Sopenharmony_ci unsigned int stream_tag; 3562306a36Sopenharmony_ci} __packed; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_cistruct sof_probes_ipc_ops { 3862306a36Sopenharmony_ci int (*init)(struct sof_client_dev *cdev, u32 stream_tag, 3962306a36Sopenharmony_ci size_t buffer_size); 4062306a36Sopenharmony_ci int (*deinit)(struct sof_client_dev *cdev); 4162306a36Sopenharmony_ci int (*points_info)(struct sof_client_dev *cdev, 4262306a36Sopenharmony_ci struct sof_probe_point_desc **desc, 4362306a36Sopenharmony_ci size_t *num_desc); 4462306a36Sopenharmony_ci int (*points_add)(struct sof_client_dev *cdev, 4562306a36Sopenharmony_ci struct sof_probe_point_desc *desc, 4662306a36Sopenharmony_ci size_t num_desc); 4762306a36Sopenharmony_ci int (*points_remove)(struct sof_client_dev *cdev, 4862306a36Sopenharmony_ci unsigned int *buffer_id, size_t num_buffer_id); 4962306a36Sopenharmony_ci}; 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ciextern const struct sof_probes_ipc_ops ipc3_probe_ops; 5262306a36Sopenharmony_ciextern const struct sof_probes_ipc_ops ipc4_probe_ops; 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_cistruct sof_probes_priv { 5562306a36Sopenharmony_ci struct dentry *dfs_points; 5662306a36Sopenharmony_ci struct dentry *dfs_points_remove; 5762306a36Sopenharmony_ci u32 extractor_stream_tag; 5862306a36Sopenharmony_ci struct snd_soc_card card; 5962306a36Sopenharmony_ci void *ipc_priv; 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci const struct sof_probes_host_ops *host_ops; 6262306a36Sopenharmony_ci const struct sof_probes_ipc_ops *ipc_ops; 6362306a36Sopenharmony_ci}; 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci#endif 66