xref: /linux/sound/soc/intel/avs/trace.c (revision c771600c6af14749609b49565ffb4cac2959710d)
169b23b39SCezary Rojewski // SPDX-License-Identifier: GPL-2.0-only
269b23b39SCezary Rojewski //
394001147SPierre-Louis Bossart // Copyright(c) 2021-2022 Intel Corporation
469b23b39SCezary Rojewski //
569b23b39SCezary Rojewski // Author: Cezary Rojewski <cezary.rojewski@intel.com>
669b23b39SCezary Rojewski //         Amadeusz Slawinski <amadeuszx.slawinski@linux.intel.com>
769b23b39SCezary Rojewski //
869b23b39SCezary Rojewski 
969b23b39SCezary Rojewski #include <linux/types.h>
1069b23b39SCezary Rojewski 
1169b23b39SCezary Rojewski #define CREATE_TRACE_POINTS
1269b23b39SCezary Rojewski #include "trace.h"
1369b23b39SCezary Rojewski 
1469b23b39SCezary Rojewski #define BYTES_PER_LINE 16
1569b23b39SCezary Rojewski #define MAX_CHUNK_SIZE ((PAGE_SIZE - 150) /* Place for trace header */	\
1669b23b39SCezary Rojewski 			/ (2 * BYTES_PER_LINE + 4) /* chars per line */	\
1769b23b39SCezary Rojewski 			* BYTES_PER_LINE)
1869b23b39SCezary Rojewski 
trace_avs_msg_payload(const void * data,size_t size)1969b23b39SCezary Rojewski void trace_avs_msg_payload(const void *data, size_t size)
2069b23b39SCezary Rojewski {
2169b23b39SCezary Rojewski 	size_t remaining = size;
2269b23b39SCezary Rojewski 	size_t offset = 0;
2369b23b39SCezary Rojewski 
2469b23b39SCezary Rojewski 	while (remaining > 0) {
2569b23b39SCezary Rojewski 		u32 chunk;
2669b23b39SCezary Rojewski 
274a1b1b65SAmadeusz Sławiński 		chunk = min_t(size_t, remaining, MAX_CHUNK_SIZE);
2869b23b39SCezary Rojewski 		trace_avs_ipc_msg_payload(data, chunk, offset, size);
2969b23b39SCezary Rojewski 
3069b23b39SCezary Rojewski 		remaining -= chunk;
3169b23b39SCezary Rojewski 		offset += chunk;
3269b23b39SCezary Rojewski 	}
3369b23b39SCezary Rojewski }
34