^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * This file is provided under a dual BSD/GPLv2 license. When using or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * redistributing this file, you may do so under either license.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Copyright(c) 2019-2020 Intel Corporation. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * Author: Cezary Rojewski <cezary.rojewski@intel.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #ifndef __SOF_PROBE_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #define __SOF_PROBE_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <sound/sof/header.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) struct snd_sof_dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #define SOF_PROBE_INVALID_NODE_ID UINT_MAX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) struct sof_probe_dma {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) unsigned int stream_tag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) unsigned int dma_buffer_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) enum sof_connection_purpose {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) SOF_CONNECTION_PURPOSE_EXTRACT = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) SOF_CONNECTION_PURPOSE_INJECT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) struct sof_probe_point_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) unsigned int buffer_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) unsigned int purpose;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) unsigned int stream_tag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) struct sof_ipc_probe_dma_add_params {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) struct sof_ipc_cmd_hdr hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) unsigned int num_elems;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) struct sof_probe_dma dma[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) struct sof_ipc_probe_info_params {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) struct sof_ipc_reply rhdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) unsigned int num_elems;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) struct sof_probe_dma dma[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) struct sof_probe_point_desc desc[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) struct sof_ipc_probe_dma_remove_params {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) struct sof_ipc_cmd_hdr hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) unsigned int num_elems;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) unsigned int stream_tag[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) struct sof_ipc_probe_point_add_params {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) struct sof_ipc_cmd_hdr hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) unsigned int num_elems;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) struct sof_probe_point_desc desc[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) struct sof_ipc_probe_point_remove_params {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) struct sof_ipc_cmd_hdr hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) unsigned int num_elems;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) unsigned int buffer_id[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) int sof_ipc_probe_init(struct snd_sof_dev *sdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) u32 stream_tag, size_t buffer_size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) int sof_ipc_probe_deinit(struct snd_sof_dev *sdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) int sof_ipc_probe_dma_info(struct snd_sof_dev *sdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) struct sof_probe_dma **dma, size_t *num_dma);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) int sof_ipc_probe_dma_add(struct snd_sof_dev *sdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) struct sof_probe_dma *dma, size_t num_dma);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) int sof_ipc_probe_dma_remove(struct snd_sof_dev *sdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) unsigned int *stream_tag, size_t num_stream_tag);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) int sof_ipc_probe_points_info(struct snd_sof_dev *sdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) struct sof_probe_point_desc **desc, size_t *num_desc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) int sof_ipc_probe_points_add(struct snd_sof_dev *sdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) struct sof_probe_point_desc *desc, size_t num_desc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) int sof_ipc_probe_points_remove(struct snd_sof_dev *sdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) unsigned int *buffer_id, size_t num_buffer_id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) #endif