blob: f1e73bd04beb7075c2a3df8741e563a7e3084eb5 [file] [log] [blame]
Arjan van de Ven61613522009-09-17 16:11:28 +02001#undef TRACE_SYSTEM
2#define TRACE_SYSTEM power
3
4#if !defined(_TRACE_POWER_H) || defined(TRACE_HEADER_MULTI_READ)
5#define _TRACE_POWER_H
6
7#include <linux/ktime.h>
Sahara247e9ee2013-06-21 11:12:28 +09008#include <linux/pm_qos.h>
Arjan van de Ven61613522009-09-17 16:11:28 +02009#include <linux/tracepoint.h>
10
Thomas Renninger25e41932011-01-03 17:50:44 +010011DECLARE_EVENT_CLASS(cpu,
12
13 TP_PROTO(unsigned int state, unsigned int cpu_id),
14
15 TP_ARGS(state, cpu_id),
16
17 TP_STRUCT__entry(
18 __field( u32, state )
19 __field( u32, cpu_id )
20 ),
21
22 TP_fast_assign(
23 __entry->state = state;
24 __entry->cpu_id = cpu_id;
25 ),
26
27 TP_printk("state=%lu cpu_id=%lu", (unsigned long)__entry->state,
28 (unsigned long)__entry->cpu_id)
29);
30
31DEFINE_EVENT(cpu, cpu_idle,
32
33 TP_PROTO(unsigned int state, unsigned int cpu_id),
34
35 TP_ARGS(state, cpu_id)
36);
37
38/* This file can get included multiple times, TRACE_HEADER_MULTI_READ at top */
39#ifndef _PWR_EVENT_AVOID_DOUBLE_DEFINING
40#define _PWR_EVENT_AVOID_DOUBLE_DEFINING
41
42#define PWR_EVENT_EXIT -1
Arjan van de Ven61613522009-09-17 16:11:28 +020043#endif
44
Thomas Renninger25e41932011-01-03 17:50:44 +010045DEFINE_EVENT(cpu, cpu_frequency,
46
47 TP_PROTO(unsigned int frequency, unsigned int cpu_id),
48
49 TP_ARGS(frequency, cpu_id)
50);
51
52TRACE_EVENT(machine_suspend,
53
54 TP_PROTO(unsigned int state),
55
56 TP_ARGS(state),
57
58 TP_STRUCT__entry(
59 __field( u32, state )
60 ),
61
62 TP_fast_assign(
63 __entry->state = state;
64 ),
65
66 TP_printk("state=%lu", (unsigned long)__entry->state)
67);
68
Arve Hjønnevåg6791e362012-04-29 22:53:02 +020069DECLARE_EVENT_CLASS(wakeup_source,
70
71 TP_PROTO(const char *name, unsigned int state),
72
73 TP_ARGS(name, state),
74
75 TP_STRUCT__entry(
76 __string( name, name )
77 __field( u64, state )
78 ),
79
80 TP_fast_assign(
81 __assign_str(name, name);
82 __entry->state = state;
83 ),
84
85 TP_printk("%s state=0x%lx", __get_str(name),
86 (unsigned long)__entry->state)
87);
88
89DEFINE_EVENT(wakeup_source, wakeup_source_activate,
90
91 TP_PROTO(const char *name, unsigned int state),
92
93 TP_ARGS(name, state)
94);
95
96DEFINE_EVENT(wakeup_source, wakeup_source_deactivate,
97
98 TP_PROTO(const char *name, unsigned int state),
99
100 TP_ARGS(name, state)
101);
102
Jean Pihet74704ac2010-09-07 09:21:32 +0200103/*
104 * The clock events are used for clock enable/disable and for
105 * clock rate change
106 */
107DECLARE_EVENT_CLASS(clock,
108
109 TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
110
111 TP_ARGS(name, state, cpu_id),
112
113 TP_STRUCT__entry(
114 __string( name, name )
115 __field( u64, state )
116 __field( u64, cpu_id )
117 ),
118
119 TP_fast_assign(
120 __assign_str(name, name);
121 __entry->state = state;
122 __entry->cpu_id = cpu_id;
123 ),
124
125 TP_printk("%s state=%lu cpu_id=%lu", __get_str(name),
126 (unsigned long)__entry->state, (unsigned long)__entry->cpu_id)
127);
128
129DEFINE_EVENT(clock, clock_enable,
130
131 TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
132
133 TP_ARGS(name, state, cpu_id)
134);
135
136DEFINE_EVENT(clock, clock_disable,
137
138 TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
139
140 TP_ARGS(name, state, cpu_id)
141);
142
143DEFINE_EVENT(clock, clock_set_rate,
144
145 TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
146
147 TP_ARGS(name, state, cpu_id)
148);
149
150/*
151 * The power domain events are used for power domains transitions
152 */
153DECLARE_EVENT_CLASS(power_domain,
154
155 TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
156
157 TP_ARGS(name, state, cpu_id),
158
159 TP_STRUCT__entry(
160 __string( name, name )
161 __field( u64, state )
162 __field( u64, cpu_id )
163 ),
164
165 TP_fast_assign(
166 __assign_str(name, name);
167 __entry->state = state;
168 __entry->cpu_id = cpu_id;
169),
170
171 TP_printk("%s state=%lu cpu_id=%lu", __get_str(name),
172 (unsigned long)__entry->state, (unsigned long)__entry->cpu_id)
173);
174
175DEFINE_EVENT(power_domain, power_domain_target,
176
177 TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
178
179 TP_ARGS(name, state, cpu_id)
180);
Sahara247e9ee2013-06-21 11:12:28 +0900181
182/*
183 * The pm qos events are used for pm qos update
184 */
185DECLARE_EVENT_CLASS(pm_qos_update,
186
187 TP_PROTO(enum pm_qos_req_action action, int prev_value, int curr_value),
188
189 TP_ARGS(action, prev_value, curr_value),
190
191 TP_STRUCT__entry(
192 __field( enum pm_qos_req_action, action )
193 __field( int, prev_value )
194 __field( int, curr_value )
195 ),
196
197 TP_fast_assign(
198 __entry->action = action;
199 __entry->prev_value = prev_value;
200 __entry->curr_value = curr_value;
201 ),
202
203 TP_printk("action=%s prev_value=%d curr_value=%d",
204 __print_symbolic(__entry->action,
205 { PM_QOS_ADD_REQ, "ADD_REQ" },
206 { PM_QOS_UPDATE_REQ, "UPDATE_REQ" },
207 { PM_QOS_REMOVE_REQ, "REMOVE_REQ" }),
208 __entry->prev_value, __entry->curr_value)
209);
210
211DEFINE_EVENT(pm_qos_update, pm_qos_update_target,
212
213 TP_PROTO(enum pm_qos_req_action action, int prev_value, int curr_value),
214
215 TP_ARGS(action, prev_value, curr_value)
216);
217
218DEFINE_EVENT_PRINT(pm_qos_update, pm_qos_update_flags,
219
220 TP_PROTO(enum pm_qos_req_action action, int prev_value, int curr_value),
221
222 TP_ARGS(action, prev_value, curr_value),
223
224 TP_printk("action=%s prev_value=0x%x curr_value=0x%x",
225 __print_symbolic(__entry->action,
226 { PM_QOS_ADD_REQ, "ADD_REQ" },
227 { PM_QOS_UPDATE_REQ, "UPDATE_REQ" },
228 { PM_QOS_REMOVE_REQ, "REMOVE_REQ" }),
229 __entry->prev_value, __entry->curr_value)
230);
Arjan van de Ven61613522009-09-17 16:11:28 +0200231#endif /* _TRACE_POWER_H */
232
233/* This part must be outside protection */
234#include <trace/define_trace.h>