/* SPDX-License-Identifier: GPL-2.0-only */ #ifndef __SOF_CLIENT_PROBES_H #define __SOF_CLIENT_PROBES_H struct snd_compr_stream; struct snd_compr_tstamp; struct snd_compr_params; struct sof_client_dev; struct snd_soc_dai; /* * Callbacks used on platforms where the control for audio is split between * DSP and host, like HDA. */ struct sof_probes_host_ops { int (*startup)(struct sof_client_dev *cdev, struct snd_compr_stream *cstream, struct snd_soc_dai *dai, u32 *stream_id); int (*shutdown)(struct sof_client_dev *cdev, struct snd_compr_stream *cstream, struct snd_soc_dai *dai); int (*set_params)(struct sof_client_dev *cdev, struct snd_compr_stream *cstream, struct snd_compr_params *params, struct snd_soc_dai *dai); int (*trigger)(struct sof_client_dev *cdev, struct snd_compr_stream *cstream, int cmd, struct snd_soc_dai *dai); int (*pointer)(struct sof_client_dev *cdev, struct snd_compr_stream *cstream, struct snd_compr_tstamp *tstamp, struct snd_soc_dai *dai); }; struct sof_probe_point_desc { unsigned int buffer_id; unsigned int purpose; unsigned int stream_tag; } __packed; struct sof_probes_ipc_ops { int (*init)(struct sof_client_dev *cdev, u32 stream_tag, size_t buffer_size); int (*deinit)(struct sof_client_dev *cdev); int (*points_info)(struct sof_client_dev *cdev, struct sof_probe_point_desc **desc, size_t *num_desc); int (*points_add)(struct sof_client_dev *cdev, struct sof_probe_point_desc *desc, size_t num_desc); int (*points_remove)(struct sof_client_dev *cdev, unsigned int *buffer_id, size_t num_buffer_id); }; extern const struct sof_probes_ipc_ops ipc3_probe_ops; extern const struct sof_probes_ipc_ops ipc4_probe_ops; struct sof_probes_priv { struct dentry *dfs_points; struct dentry *dfs_points_remove; u32 extractor_stream_tag; struct snd_soc_card card; void *ipc_priv; const struct sof_probes_host_ops *host_ops; const struct sof_probes_ipc_ops *ipc_ops; }; #endif