// SPDX-License-Identifier: GPL-2.0-only // // Copyright(c) 2019-2022 Intel Corporation // // Author: Cezary Rojewski <[email protected]> // // Code moved to this file by: // Jyri Sarha <[email protected]> // #include <linux/stddef.h> #include <sound/soc.h> #include <sound/sof/header.h> #include "sof-client.h" #include "sof-client-probes.h" struct sof_probe_dma { … } __packed; struct sof_ipc_probe_dma_add_params { … } __packed; struct sof_ipc_probe_info_params { … } __packed; struct sof_ipc_probe_point_add_params { … } __packed; struct sof_ipc_probe_point_remove_params { … } __packed; /** * ipc3_probes_init - initialize data probing * @cdev: SOF client device * @stream_tag: Extractor stream tag * @buffer_size: DMA buffer size to set for extractor * * Host chooses whether extraction is supported or not by providing * valid stream tag to DSP. Once specified, stream described by that * tag will be tied to DSP for extraction for the entire lifetime of * probe. * * Probing is initialized only once and each INIT request must be * matched by DEINIT call. */ static int ipc3_probes_init(struct sof_client_dev *cdev, u32 stream_tag, size_t buffer_size) { … } /** * ipc3_probes_deinit - cleanup after data probing * @cdev: SOF client device * * Host sends DEINIT request to free previously initialized probe * on DSP side once it is no longer needed. DEINIT only when there * are no probes connected and with all injectors detached. */ static int ipc3_probes_deinit(struct sof_client_dev *cdev) { … } static int ipc3_probes_info(struct sof_client_dev *cdev, unsigned int cmd, void **params, size_t *num_params) { … } /** * ipc3_probes_points_info - retrieve list of active probe points * @cdev: SOF client device * @desc: Returned list of active probes * @num_desc: Returned count of active probes * * Host sends PROBE_POINT_INFO request to obtain list of active probe * points, valid for disconnection when given probe is no longer * required. */ static int ipc3_probes_points_info(struct sof_client_dev *cdev, struct sof_probe_point_desc **desc, size_t *num_desc) { … } /** * ipc3_probes_points_add - connect specified probes * @cdev: SOF client device * @desc: List of probe points to connect * @num_desc: Number of elements in @desc * * Dynamically connects to provided set of endpoints. Immediately * after connection is established, host must be prepared to * transfer data from or to target stream given the probing purpose. * * Each probe point should be removed using PROBE_POINT_REMOVE * request when no longer needed. */ static int ipc3_probes_points_add(struct sof_client_dev *cdev, struct sof_probe_point_desc *desc, size_t num_desc) { … } /** * ipc3_probes_points_remove - disconnect specified probes * @cdev: SOF client device * @buffer_id: List of probe points to disconnect * @num_buffer_id: Number of elements in @desc * * Removes previously connected probes from list of active probe * points and frees all resources on DSP side. */ static int ipc3_probes_points_remove(struct sof_client_dev *cdev, unsigned int *buffer_id, size_t num_buffer_id) { … } const struct sof_probes_ipc_ops ipc3_probe_ops = …;