162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * amdtp-motu-trace.h - tracepoint definitions to dump a part of packet data
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (c) 2017 Takashi Sakamoto
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#undef TRACE_SYSTEM
962306a36Sopenharmony_ci#define TRACE_SYSTEM		snd_firewire_motu
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#if !defined(_SND_FIREWIRE_MOTU_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
1262306a36Sopenharmony_ci#define _SND_FIREWIRE_MOTU_TRACE_H
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#include <linux/tracepoint.h>
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_cistatic void copy_sph(u32 *frame, __be32 *buffer, unsigned int data_blocks,
1762306a36Sopenharmony_ci		     unsigned int data_block_quadlets);
1862306a36Sopenharmony_cistatic void copy_message(u64 *frames, __be32 *buffer, unsigned int data_blocks,
1962306a36Sopenharmony_ci			 unsigned int data_block_quadlets);
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ciTRACE_EVENT(data_block_sph,
2262306a36Sopenharmony_ci	TP_PROTO(struct amdtp_stream *s, unsigned int data_blocks, __be32 *buffer),
2362306a36Sopenharmony_ci	TP_ARGS(s, data_blocks, buffer),
2462306a36Sopenharmony_ci	TP_STRUCT__entry(
2562306a36Sopenharmony_ci		__field(int, src)
2662306a36Sopenharmony_ci		__field(int, dst)
2762306a36Sopenharmony_ci		__field(unsigned int, data_blocks)
2862306a36Sopenharmony_ci		__dynamic_array(u32, tstamps, data_blocks)
2962306a36Sopenharmony_ci	),
3062306a36Sopenharmony_ci	TP_fast_assign(
3162306a36Sopenharmony_ci		if (s->direction == AMDTP_IN_STREAM) {
3262306a36Sopenharmony_ci			__entry->src = fw_parent_device(s->unit)->node_id;
3362306a36Sopenharmony_ci			__entry->dst = fw_parent_device(s->unit)->card->node_id;
3462306a36Sopenharmony_ci		} else {
3562306a36Sopenharmony_ci			__entry->src = fw_parent_device(s->unit)->card->node_id;
3662306a36Sopenharmony_ci			__entry->dst = fw_parent_device(s->unit)->node_id;
3762306a36Sopenharmony_ci		}
3862306a36Sopenharmony_ci		__entry->data_blocks = data_blocks;
3962306a36Sopenharmony_ci		copy_sph(__get_dynamic_array(tstamps), buffer, data_blocks, s->data_block_quadlets);
4062306a36Sopenharmony_ci	),
4162306a36Sopenharmony_ci	TP_printk(
4262306a36Sopenharmony_ci		"%04x %04x %u %s",
4362306a36Sopenharmony_ci		__entry->src,
4462306a36Sopenharmony_ci		__entry->dst,
4562306a36Sopenharmony_ci		__entry->data_blocks,
4662306a36Sopenharmony_ci		__print_array(__get_dynamic_array(tstamps), __entry->data_blocks, 4)
4762306a36Sopenharmony_ci	)
4862306a36Sopenharmony_ci);
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ciTRACE_EVENT(data_block_message,
5162306a36Sopenharmony_ci	TP_PROTO(struct amdtp_stream *s, unsigned int data_blocks, __be32 *buffer),
5262306a36Sopenharmony_ci	TP_ARGS(s, data_blocks, buffer),
5362306a36Sopenharmony_ci	TP_STRUCT__entry(
5462306a36Sopenharmony_ci		__field(int, src)
5562306a36Sopenharmony_ci		__field(int, dst)
5662306a36Sopenharmony_ci		__field(unsigned int, data_blocks)
5762306a36Sopenharmony_ci		__dynamic_array(u64, messages, data_blocks)
5862306a36Sopenharmony_ci	),
5962306a36Sopenharmony_ci	TP_fast_assign(
6062306a36Sopenharmony_ci		if (s->direction == AMDTP_IN_STREAM) {
6162306a36Sopenharmony_ci			__entry->src = fw_parent_device(s->unit)->node_id;
6262306a36Sopenharmony_ci			__entry->dst = fw_parent_device(s->unit)->card->node_id;
6362306a36Sopenharmony_ci		} else {
6462306a36Sopenharmony_ci			__entry->src = fw_parent_device(s->unit)->card->node_id;
6562306a36Sopenharmony_ci			__entry->dst = fw_parent_device(s->unit)->node_id;
6662306a36Sopenharmony_ci		}
6762306a36Sopenharmony_ci		__entry->data_blocks = data_blocks;
6862306a36Sopenharmony_ci		copy_message(__get_dynamic_array(messages), buffer, data_blocks, s->data_block_quadlets);
6962306a36Sopenharmony_ci	),
7062306a36Sopenharmony_ci	TP_printk(
7162306a36Sopenharmony_ci		"%04x %04x %u %s",
7262306a36Sopenharmony_ci		__entry->src,
7362306a36Sopenharmony_ci		__entry->dst,
7462306a36Sopenharmony_ci		__entry->data_blocks,
7562306a36Sopenharmony_ci		__print_array(__get_dynamic_array(messages), __entry->data_blocks, 8)
7662306a36Sopenharmony_ci	)
7762306a36Sopenharmony_ci);
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci#endif
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci#undef TRACE_INCLUDE_PATH
8262306a36Sopenharmony_ci#define TRACE_INCLUDE_PATH	.
8362306a36Sopenharmony_ci#undef TRACE_INCLUDE_FILE
8462306a36Sopenharmony_ci#define TRACE_INCLUDE_FILE	amdtp-motu-trace
8562306a36Sopenharmony_ci#include <trace/define_trace.h>
86