1 /* SPDX-License-Identifier: GPL-2.0 */
3 #define TRACE_SYSTEM hswadsp
5 #if !defined(_TRACE_HSWADSP_H) || defined(TRACE_HEADER_MULTI_READ)
6 #define _TRACE_HSWADSP_H
8 #include <linux/types.h>
9 #include <linux/ktime.h>
10 #include <linux/tracepoint.h>
13 struct sst_hsw_stream
;
14 struct sst_hsw_ipc_stream_free_req
;
15 struct sst_hsw_ipc_volume_req
;
16 struct sst_hsw_ipc_stream_alloc_req
;
17 struct sst_hsw_audio_data_format_ipc
;
18 struct sst_hsw_ipc_stream_info_reply
;
19 struct sst_hsw_ipc_device_config_req
;
21 DECLARE_EVENT_CLASS(sst_irq
,
23 TP_PROTO(uint32_t status
, uint32_t mask
),
25 TP_ARGS(status
, mask
),
28 __field( unsigned int, status
)
29 __field( unsigned int, mask
)
33 __entry
->status
= status
;
37 TP_printk("status 0x%8.8x mask 0x%8.8x",
38 (unsigned int)__entry
->status
, (unsigned int)__entry
->mask
)
41 DEFINE_EVENT(sst_irq
, sst_irq_busy
,
43 TP_PROTO(unsigned int status
, unsigned int mask
),
49 DEFINE_EVENT(sst_irq
, sst_irq_done
,
51 TP_PROTO(unsigned int status
, unsigned int mask
),
57 DECLARE_EVENT_CLASS(ipc
,
59 TP_PROTO(const char *name
, int val
),
64 __string( name
, name
)
65 __field( unsigned int, val
)
69 __assign_str(name
, name
);
73 TP_printk("%s 0x%8.8x", __get_str(name
), (unsigned int)__entry
->val
)
77 DEFINE_EVENT(ipc
, ipc_request
,
79 TP_PROTO(const char *name
, int val
),
85 DEFINE_EVENT(ipc
, ipc_reply
,
87 TP_PROTO(const char *name
, int val
),
93 DEFINE_EVENT(ipc
, ipc_pending_reply
,
95 TP_PROTO(const char *name
, int val
),
101 DEFINE_EVENT(ipc
, ipc_notification
,
103 TP_PROTO(const char *name
, int val
),
109 DEFINE_EVENT(ipc
, ipc_error
,
111 TP_PROTO(const char *name
, int val
),
117 DECLARE_EVENT_CLASS(stream_position
,
119 TP_PROTO(unsigned int id
, unsigned int pos
),
124 __field( unsigned int, id
)
125 __field( unsigned int, pos
)
133 TP_printk("id %d position 0x%x",
134 (unsigned int)__entry
->id
, (unsigned int)__entry
->pos
)
137 DEFINE_EVENT(stream_position
, stream_read_position
,
139 TP_PROTO(unsigned int id
, unsigned int pos
),
145 DEFINE_EVENT(stream_position
, stream_write_position
,
147 TP_PROTO(unsigned int id
, unsigned int pos
),
153 TRACE_EVENT(hsw_stream_buffer
,
155 TP_PROTO(struct sst_hsw_stream
*stream
),
161 __field( int, pt_addr
)
162 __field( int, num_pages
)
163 __field( int, ring_size
)
164 __field( int, ring_offset
)
165 __field( int, first_pfn
)
169 __entry
->id
= stream
->host_id
;
170 __entry
->pt_addr
= stream
->request
.ringinfo
.ring_pt_address
;
171 __entry
->num_pages
= stream
->request
.ringinfo
.num_pages
;
172 __entry
->ring_size
= stream
->request
.ringinfo
.ring_size
;
173 __entry
->ring_offset
= stream
->request
.ringinfo
.ring_offset
;
174 __entry
->first_pfn
= stream
->request
.ringinfo
.ring_first_pfn
;
177 TP_printk("stream %d ring addr 0x%x pages %d size 0x%x offset 0x%x PFN 0x%x",
178 (int) __entry
->id
, (int)__entry
->pt_addr
,
179 (int)__entry
->num_pages
, (int)__entry
->ring_size
,
180 (int)__entry
->ring_offset
, (int)__entry
->first_pfn
)
183 TRACE_EVENT(hsw_stream_alloc_reply
,
185 TP_PROTO(struct sst_hsw_stream
*stream
),
191 __field( int, stream_id
)
192 __field( int, mixer_id
)
193 __field( int, peak0
)
194 __field( int, peak1
)
200 __entry
->id
= stream
->host_id
;
201 __entry
->stream_id
= stream
->reply
.stream_hw_id
;
202 __entry
->mixer_id
= stream
->reply
.mixer_hw_id
;
203 __entry
->peak0
= stream
->reply
.peak_meter_register_address
[0];
204 __entry
->peak1
= stream
->reply
.peak_meter_register_address
[1];
205 __entry
->vol0
= stream
->reply
.volume_register_address
[0];
206 __entry
->vol1
= stream
->reply
.volume_register_address
[1];
209 TP_printk("stream %d hw id %d mixer %d peak 0x%x:0x%x vol 0x%x,0x%x",
210 (int) __entry
->id
, (int) __entry
->stream_id
, (int)__entry
->mixer_id
,
211 (int)__entry
->peak0
, (int)__entry
->peak1
,
212 (int)__entry
->vol0
, (int)__entry
->vol1
)
215 TRACE_EVENT(hsw_mixer_info_reply
,
217 TP_PROTO(struct sst_hsw_ipc_stream_info_reply
*reply
),
222 __field( int, mixer_id
)
223 __field( int, peak0
)
224 __field( int, peak1
)
230 __entry
->mixer_id
= reply
->mixer_hw_id
;
231 __entry
->peak0
= reply
->peak_meter_register_address
[0];
232 __entry
->peak1
= reply
->peak_meter_register_address
[1];
233 __entry
->vol0
= reply
->volume_register_address
[0];
234 __entry
->vol1
= reply
->volume_register_address
[1];
237 TP_printk("mixer id %d peak 0x%x:0x%x vol 0x%x,0x%x",
238 (int)__entry
->mixer_id
,
239 (int)__entry
->peak0
, (int)__entry
->peak1
,
240 (int)__entry
->vol0
, (int)__entry
->vol1
)
243 TRACE_EVENT(hsw_stream_data_format
,
245 TP_PROTO(struct sst_hsw_stream
*stream
,
246 struct sst_hsw_audio_data_format_ipc
*req
),
248 TP_ARGS(stream
, req
),
251 __field( uint32_t, id
)
252 __field( uint32_t, frequency
)
253 __field( uint32_t, bitdepth
)
254 __field( uint32_t, map
)
255 __field( uint32_t, config
)
256 __field( uint32_t, style
)
257 __field( uint8_t, ch_num
)
258 __field( uint8_t, valid_bit
)
262 __entry
->id
= stream
->host_id
;
263 __entry
->frequency
= req
->frequency
;
264 __entry
->bitdepth
= req
->bitdepth
;
265 __entry
->map
= req
->map
;
266 __entry
->config
= req
->config
;
267 __entry
->style
= req
->style
;
268 __entry
->ch_num
= req
->ch_num
;
269 __entry
->valid_bit
= req
->valid_bit
;
272 TP_printk("stream %d freq %d depth %d map 0x%x config 0x%x style 0x%x ch %d bits %d",
273 (int) __entry
->id
, (uint32_t)__entry
->frequency
,
274 (uint32_t)__entry
->bitdepth
, (uint32_t)__entry
->map
,
275 (uint32_t)__entry
->config
, (uint32_t)__entry
->style
,
276 (uint8_t)__entry
->ch_num
, (uint8_t)__entry
->valid_bit
)
279 TRACE_EVENT(hsw_stream_alloc_request
,
281 TP_PROTO(struct sst_hsw_stream
*stream
,
282 struct sst_hsw_ipc_stream_alloc_req
*req
),
284 TP_ARGS(stream
, req
),
287 __field( uint32_t, id
)
288 __field( uint8_t, path_id
)
289 __field( uint8_t, stream_type
)
290 __field( uint8_t, format_id
)
294 __entry
->id
= stream
->host_id
;
295 __entry
->path_id
= req
->path_id
;
296 __entry
->stream_type
= req
->stream_type
;
297 __entry
->format_id
= req
->format_id
;
300 TP_printk("stream %d path %d type %d format %d",
301 (int) __entry
->id
, (uint8_t)__entry
->path_id
,
302 (uint8_t)__entry
->stream_type
, (uint8_t)__entry
->format_id
)
305 TRACE_EVENT(hsw_stream_free_req
,
307 TP_PROTO(struct sst_hsw_stream
*stream
,
308 struct sst_hsw_ipc_stream_free_req
*req
),
310 TP_ARGS(stream
, req
),
314 __field( int, stream_id
)
318 __entry
->id
= stream
->host_id
;
319 __entry
->stream_id
= req
->stream_id
;
322 TP_printk("stream %d hw id %d",
323 (int) __entry
->id
, (int) __entry
->stream_id
)
326 TRACE_EVENT(hsw_volume_req
,
328 TP_PROTO(struct sst_hsw_stream
*stream
,
329 struct sst_hsw_ipc_volume_req
*req
),
331 TP_ARGS(stream
, req
),
335 __field( uint32_t, channel
)
336 __field( uint32_t, target_volume
)
337 __field( uint64_t, curve_duration
)
338 __field( uint32_t, curve_type
)
342 __entry
->id
= stream
->host_id
;
343 __entry
->channel
= req
->channel
;
344 __entry
->target_volume
= req
->target_volume
;
345 __entry
->curve_duration
= req
->curve_duration
;
346 __entry
->curve_type
= req
->curve_type
;
349 TP_printk("stream %d chan 0x%x vol %d duration %llu type %d",
350 (int) __entry
->id
, (uint32_t) __entry
->channel
,
351 (uint32_t)__entry
->target_volume
,
352 (uint64_t)__entry
->curve_duration
,
353 (uint32_t)__entry
->curve_type
)
356 TRACE_EVENT(hsw_device_config_req
,
358 TP_PROTO(struct sst_hsw_ipc_device_config_req
*req
),
363 __field( uint32_t, ssp
)
364 __field( uint32_t, clock_freq
)
365 __field( uint32_t, mode
)
366 __field( uint16_t, clock_divider
)
370 __entry
->ssp
= req
->ssp_interface
;
371 __entry
->clock_freq
= req
->clock_frequency
;
372 __entry
->mode
= req
->mode
;
373 __entry
->clock_divider
= req
->clock_divider
;
376 TP_printk("SSP %d Freq %d mode %d div %d",
377 (uint32_t)__entry
->ssp
,
378 (uint32_t)__entry
->clock_freq
, (uint32_t)__entry
->mode
,
379 (uint32_t)__entry
->clock_divider
)
382 #endif /* _TRACE_HSWADSP_H */
384 /* This part must be outside protection */
385 #include <trace/define_trace.h>