1fa6e73d6SBard Liao /* SPDX-License-Identifier: GPL-2.0-only */ 2fa6e73d6SBard Liao /* 3fa6e73d6SBard Liao * Copyright(c) 2022 Intel Corporation. All rights reserved. 4fa6e73d6SBard Liao * 5fa6e73d6SBard Liao * Author: Noah Klayman <noah.klayman@intel.com> 6fa6e73d6SBard Liao */ 7fa6e73d6SBard Liao 8fa6e73d6SBard Liao #undef TRACE_SYSTEM 9fa6e73d6SBard Liao #define TRACE_SYSTEM sof 10fa6e73d6SBard Liao 11fa6e73d6SBard Liao #if !defined(_TRACE_SOF_H) || defined(TRACE_HEADER_MULTI_READ) 12fa6e73d6SBard Liao #define _TRACE_SOF_H 13fa6e73d6SBard Liao #include <linux/tracepoint.h> 14*bcd2cc35SNoah Klayman #include <linux/types.h> 15fa6e73d6SBard Liao #include <sound/sof/stream.h> 16fa6e73d6SBard Liao #include "../../../sound/soc/sof/sof-audio.h" 17fa6e73d6SBard Liao 18fa6e73d6SBard Liao DECLARE_EVENT_CLASS(sof_widget_template, 19fa6e73d6SBard Liao TP_PROTO(struct snd_sof_widget *swidget), 20fa6e73d6SBard Liao TP_ARGS(swidget), 21fa6e73d6SBard Liao TP_STRUCT__entry( 22fa6e73d6SBard Liao __string(name, swidget->widget->name) 23fa6e73d6SBard Liao __field(int, use_count) 24fa6e73d6SBard Liao ), 25fa6e73d6SBard Liao TP_fast_assign( 26fa6e73d6SBard Liao __assign_str(name, swidget->widget->name); 27fa6e73d6SBard Liao __entry->use_count = swidget->use_count; 28fa6e73d6SBard Liao ), 29fa6e73d6SBard Liao TP_printk("name=%s use_count=%d", __get_str(name), __entry->use_count) 30fa6e73d6SBard Liao ); 31fa6e73d6SBard Liao 32fa6e73d6SBard Liao DEFINE_EVENT(sof_widget_template, sof_widget_setup, 33fa6e73d6SBard Liao TP_PROTO(struct snd_sof_widget *swidget), 34fa6e73d6SBard Liao TP_ARGS(swidget) 35fa6e73d6SBard Liao ); 36fa6e73d6SBard Liao 37fa6e73d6SBard Liao DEFINE_EVENT(sof_widget_template, sof_widget_free, 38fa6e73d6SBard Liao TP_PROTO(struct snd_sof_widget *swidget), 39fa6e73d6SBard Liao TP_ARGS(swidget) 40fa6e73d6SBard Liao ); 41fa6e73d6SBard Liao 42*bcd2cc35SNoah Klayman TRACE_EVENT(sof_ipc3_period_elapsed_position, 43*bcd2cc35SNoah Klayman TP_PROTO(struct snd_sof_dev *sdev, struct sof_ipc_stream_posn *posn), 44*bcd2cc35SNoah Klayman TP_ARGS(sdev, posn), 45*bcd2cc35SNoah Klayman TP_STRUCT__entry( 46*bcd2cc35SNoah Klayman __string(device_name, dev_name(sdev->dev)) 47*bcd2cc35SNoah Klayman __field(u64, host_posn) 48*bcd2cc35SNoah Klayman __field(u64, dai_posn) 49*bcd2cc35SNoah Klayman __field(u64, wallclock) 50*bcd2cc35SNoah Klayman ), 51*bcd2cc35SNoah Klayman TP_fast_assign( 52*bcd2cc35SNoah Klayman __assign_str(device_name, dev_name(sdev->dev)); 53*bcd2cc35SNoah Klayman __entry->host_posn = posn->host_posn; 54*bcd2cc35SNoah Klayman __entry->dai_posn = posn->dai_posn; 55*bcd2cc35SNoah Klayman __entry->wallclock = posn->wallclock; 56*bcd2cc35SNoah Klayman ), 57*bcd2cc35SNoah Klayman TP_printk("device_name=%s host_posn=%#llx dai_posn=%#llx wallclock=%#llx", 58*bcd2cc35SNoah Klayman __get_str(device_name), __entry->host_posn, __entry->dai_posn, 59*bcd2cc35SNoah Klayman __entry->wallclock) 60*bcd2cc35SNoah Klayman ); 61*bcd2cc35SNoah Klayman 62*bcd2cc35SNoah Klayman TRACE_EVENT(sof_pcm_pointer_position, 63*bcd2cc35SNoah Klayman TP_PROTO(struct snd_sof_dev *sdev, 64*bcd2cc35SNoah Klayman struct snd_sof_pcm *spcm, 65*bcd2cc35SNoah Klayman struct snd_pcm_substream *substream, 66*bcd2cc35SNoah Klayman snd_pcm_uframes_t dma_posn, 67*bcd2cc35SNoah Klayman snd_pcm_uframes_t dai_posn 68*bcd2cc35SNoah Klayman ), 69*bcd2cc35SNoah Klayman TP_ARGS(sdev, spcm, substream, dma_posn, dai_posn), 70*bcd2cc35SNoah Klayman TP_STRUCT__entry( 71*bcd2cc35SNoah Klayman __string(device_name, dev_name(sdev->dev)) 72*bcd2cc35SNoah Klayman __field(u32, pcm_id) 73*bcd2cc35SNoah Klayman __field(int, stream) 74*bcd2cc35SNoah Klayman __field(unsigned long, dma_posn) 75*bcd2cc35SNoah Klayman __field(unsigned long, dai_posn) 76*bcd2cc35SNoah Klayman ), 77*bcd2cc35SNoah Klayman TP_fast_assign( 78*bcd2cc35SNoah Klayman __assign_str(device_name, dev_name(sdev->dev)); 79*bcd2cc35SNoah Klayman __entry->pcm_id = le32_to_cpu(spcm->pcm.pcm_id); 80*bcd2cc35SNoah Klayman __entry->stream = substream->stream; 81*bcd2cc35SNoah Klayman __entry->dma_posn = dma_posn; 82*bcd2cc35SNoah Klayman __entry->dai_posn = dai_posn; 83*bcd2cc35SNoah Klayman ), 84*bcd2cc35SNoah Klayman TP_printk("device_name=%s pcm_id=%d stream=%d dma_posn=%lu dai_posn=%lu", 85*bcd2cc35SNoah Klayman __get_str(device_name), __entry->pcm_id, __entry->stream, 86*bcd2cc35SNoah Klayman __entry->dma_posn, __entry->dai_posn) 87*bcd2cc35SNoah Klayman ); 88*bcd2cc35SNoah Klayman 89*bcd2cc35SNoah Klayman TRACE_EVENT(sof_stream_position_ipc_rx, 90*bcd2cc35SNoah Klayman TP_PROTO(struct device *dev), 91*bcd2cc35SNoah Klayman TP_ARGS(dev), 92*bcd2cc35SNoah Klayman TP_STRUCT__entry( 93*bcd2cc35SNoah Klayman __string(device_name, dev_name(dev)) 94*bcd2cc35SNoah Klayman ), 95*bcd2cc35SNoah Klayman TP_fast_assign( 96*bcd2cc35SNoah Klayman __assign_str(device_name, dev_name(dev)); 97*bcd2cc35SNoah Klayman ), 98*bcd2cc35SNoah Klayman TP_printk("device_name=%s", __get_str(device_name)) 99*bcd2cc35SNoah Klayman ); 100*bcd2cc35SNoah Klayman 101fa6e73d6SBard Liao #endif /* _TRACE_SOF_H */ 102fa6e73d6SBard Liao 103fa6e73d6SBard Liao /* This part must be outside protection */ 104fa6e73d6SBard Liao #include <trace/define_trace.h> 105