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