13dc0d709SPeter Ujfalusi /* SPDX-License-Identifier: GPL-2.0-only */ 23dc0d709SPeter Ujfalusi 33dc0d709SPeter Ujfalusi #ifndef __SOF_CLIENT_PROBES_H 43dc0d709SPeter Ujfalusi #define __SOF_CLIENT_PROBES_H 53dc0d709SPeter Ujfalusi 63dc0d709SPeter Ujfalusi struct snd_compr_stream; 73dc0d709SPeter Ujfalusi struct snd_compr_tstamp; 83dc0d709SPeter Ujfalusi struct snd_compr_params; 93dc0d709SPeter Ujfalusi struct sof_client_dev; 103dc0d709SPeter Ujfalusi struct snd_soc_dai; 113dc0d709SPeter Ujfalusi 123dc0d709SPeter Ujfalusi /* 133dc0d709SPeter Ujfalusi * Callbacks used on platforms where the control for audio is split between 143dc0d709SPeter Ujfalusi * DSP and host, like HDA. 153dc0d709SPeter Ujfalusi */ 163dc0d709SPeter Ujfalusi struct sof_probes_host_ops { 17bdcf7926SPierre-Louis Bossart int (*startup)(struct sof_client_dev *cdev, struct snd_compr_stream *cstream, 183dc0d709SPeter Ujfalusi struct snd_soc_dai *dai, u32 *stream_id); 19bdcf7926SPierre-Louis Bossart int (*shutdown)(struct sof_client_dev *cdev, struct snd_compr_stream *cstream, 203dc0d709SPeter Ujfalusi struct snd_soc_dai *dai); 213dc0d709SPeter Ujfalusi int (*set_params)(struct sof_client_dev *cdev, struct snd_compr_stream *cstream, 223dc0d709SPeter Ujfalusi struct snd_compr_params *params, 233dc0d709SPeter Ujfalusi struct snd_soc_dai *dai); 243dc0d709SPeter Ujfalusi int (*trigger)(struct sof_client_dev *cdev, struct snd_compr_stream *cstream, 253dc0d709SPeter Ujfalusi int cmd, struct snd_soc_dai *dai); 263dc0d709SPeter Ujfalusi int (*pointer)(struct sof_client_dev *cdev, struct snd_compr_stream *cstream, 273dc0d709SPeter Ujfalusi struct snd_compr_tstamp *tstamp, 283dc0d709SPeter Ujfalusi struct snd_soc_dai *dai); 293dc0d709SPeter Ujfalusi }; 303dc0d709SPeter Ujfalusi 31ccf06b14SJyri Sarha struct sof_probe_point_desc { 32ccf06b14SJyri Sarha unsigned int buffer_id; 33ccf06b14SJyri Sarha unsigned int purpose; 34ccf06b14SJyri Sarha unsigned int stream_tag; 35ccf06b14SJyri Sarha } __packed; 36ccf06b14SJyri Sarha 37ccf06b14SJyri Sarha struct sof_probes_ipc_ops { 38ccf06b14SJyri Sarha int (*init)(struct sof_client_dev *cdev, u32 stream_tag, 39ccf06b14SJyri Sarha size_t buffer_size); 40ccf06b14SJyri Sarha int (*deinit)(struct sof_client_dev *cdev); 41ccf06b14SJyri Sarha int (*points_info)(struct sof_client_dev *cdev, 42ccf06b14SJyri Sarha struct sof_probe_point_desc **desc, 43ccf06b14SJyri Sarha size_t *num_desc); 44ccf06b14SJyri Sarha int (*points_add)(struct sof_client_dev *cdev, 45ccf06b14SJyri Sarha struct sof_probe_point_desc *desc, 46ccf06b14SJyri Sarha size_t num_desc); 47ccf06b14SJyri Sarha int (*points_remove)(struct sof_client_dev *cdev, 48ccf06b14SJyri Sarha unsigned int *buffer_id, size_t num_buffer_id); 49ccf06b14SJyri Sarha }; 50ccf06b14SJyri Sarha 51ccf06b14SJyri Sarha extern const struct sof_probes_ipc_ops ipc3_probe_ops; 52*f5623593SJyri Sarha extern const struct sof_probes_ipc_ops ipc4_probe_ops; 53*f5623593SJyri Sarha 54*f5623593SJyri Sarha struct sof_probes_priv { 55*f5623593SJyri Sarha struct dentry *dfs_points; 56*f5623593SJyri Sarha struct dentry *dfs_points_remove; 57*f5623593SJyri Sarha u32 extractor_stream_tag; 58*f5623593SJyri Sarha struct snd_soc_card card; 59*f5623593SJyri Sarha void *ipc_priv; 60*f5623593SJyri Sarha 61*f5623593SJyri Sarha const struct sof_probes_host_ops *host_ops; 62*f5623593SJyri Sarha const struct sof_probes_ipc_ops *ipc_ops; 63*f5623593SJyri Sarha }; 64*f5623593SJyri Sarha 653dc0d709SPeter Ujfalusi #endif 66