1/* SPDX-License-Identifier: GPL-2.0 */
2#undef TRACE_SYSTEM
3#define TRACE_SYSTEM alarmtimer
4
5#if !defined(_TRACE_ALARMTIMER_H) || defined(TRACE_HEADER_MULTI_READ)
6#define _TRACE_ALARMTIMER_H
7
8#include <linux/alarmtimer.h>
9#include <linux/rtc.h>
10#include <linux/tracepoint.h>
11
12TRACE_DEFINE_ENUM(ALARM_REALTIME);
13TRACE_DEFINE_ENUM(ALARM_BOOTTIME);
14TRACE_DEFINE_ENUM(ALARM_REALTIME_FREEZER);
15TRACE_DEFINE_ENUM(ALARM_BOOTTIME_FREEZER);
16
17#define show_alarm_type(type)	__print_flags(type, " | ",	\
18	{ 1 << ALARM_REALTIME, "REALTIME" },			\
19	{ 1 << ALARM_BOOTTIME, "BOOTTIME" },			\
20	{ 1 << ALARM_REALTIME_FREEZER, "REALTIME Freezer" },	\
21	{ 1 << ALARM_BOOTTIME_FREEZER, "BOOTTIME Freezer" })
22
23TRACE_EVENT(alarmtimer_suspend,
24
25	TP_PROTO(ktime_t expires, int flag),
26
27	TP_ARGS(expires, flag),
28
29	TP_STRUCT__entry(
30		__field(s64, expires)
31		__field(unsigned char, alarm_type)
32	),
33
34	TP_fast_assign(
35		__entry->expires = expires;
36		__entry->alarm_type = flag;
37	),
38
39	TP_printk("alarmtimer type:%s expires:%llu",
40		  show_alarm_type((1 << __entry->alarm_type)),
41		  __entry->expires
42	)
43);
44
45DECLARE_EVENT_CLASS(alarm_class,
46
47	TP_PROTO(struct alarm *alarm, ktime_t now),
48
49	TP_ARGS(alarm, now),
50
51	TP_STRUCT__entry(
52		__field(void *,	alarm)
53		__field(unsigned char, alarm_type)
54		__field(s64, expires)
55		__field(s64, now)
56	),
57
58	TP_fast_assign(
59		__entry->alarm = alarm;
60		__entry->alarm_type = alarm->type;
61		__entry->expires = alarm->node.expires;
62		__entry->now = now;
63	),
64
65	TP_printk("alarmtimer:%p type:%s expires:%llu now:%llu",
66		  __entry->alarm,
67		  show_alarm_type((1 << __entry->alarm_type)),
68		  __entry->expires,
69		  __entry->now
70	)
71);
72
73DEFINE_EVENT(alarm_class, alarmtimer_fired,
74
75	TP_PROTO(struct alarm *alarm, ktime_t now),
76
77	TP_ARGS(alarm, now)
78);
79
80DEFINE_EVENT(alarm_class, alarmtimer_start,
81
82	TP_PROTO(struct alarm *alarm, ktime_t now),
83
84	TP_ARGS(alarm, now)
85);
86
87DEFINE_EVENT(alarm_class, alarmtimer_cancel,
88
89	TP_PROTO(struct alarm *alarm, ktime_t now),
90
91	TP_ARGS(alarm, now)
92);
93
94#endif /* _TRACE_ALARMTIMER_H */
95
96/* This part must be outside protection */
97#include <trace/define_trace.h>
98