blob: 8e42410bd1591c5168d616d3ebcac66a1d22aed5 [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 */
Saharaae8822b2013-06-21 11:12:29 +0900185DECLARE_EVENT_CLASS(pm_qos_request,
186
187 TP_PROTO(int pm_qos_class, s32 value),
188
189 TP_ARGS(pm_qos_class, value),
190
191 TP_STRUCT__entry(
192 __field( int, pm_qos_class )
193 __field( s32, value )
194 ),
195
196 TP_fast_assign(
197 __entry->pm_qos_class = pm_qos_class;
198 __entry->value = value;
199 ),
200
201 TP_printk("pm_qos_class=%s value=%d",
202 __print_symbolic(__entry->pm_qos_class,
203 { PM_QOS_CPU_DMA_LATENCY, "CPU_DMA_LATENCY" },
204 { PM_QOS_NETWORK_LATENCY, "NETWORK_LATENCY" },
205 { PM_QOS_NETWORK_THROUGHPUT, "NETWORK_THROUGHPUT" }),
206 __entry->value)
207);
208
209DEFINE_EVENT(pm_qos_request, pm_qos_add_request,
210
211 TP_PROTO(int pm_qos_class, s32 value),
212
213 TP_ARGS(pm_qos_class, value)
214);
215
216DEFINE_EVENT(pm_qos_request, pm_qos_update_request,
217
218 TP_PROTO(int pm_qos_class, s32 value),
219
220 TP_ARGS(pm_qos_class, value)
221);
222
223DEFINE_EVENT(pm_qos_request, pm_qos_remove_request,
224
225 TP_PROTO(int pm_qos_class, s32 value),
226
227 TP_ARGS(pm_qos_class, value)
228);
229
230TRACE_EVENT(pm_qos_update_request_timeout,
231
232 TP_PROTO(int pm_qos_class, s32 value, unsigned long timeout_us),
233
234 TP_ARGS(pm_qos_class, value, timeout_us),
235
236 TP_STRUCT__entry(
237 __field( int, pm_qos_class )
238 __field( s32, value )
239 __field( unsigned long, timeout_us )
240 ),
241
242 TP_fast_assign(
243 __entry->pm_qos_class = pm_qos_class;
244 __entry->value = value;
245 __entry->timeout_us = timeout_us;
246 ),
247
248 TP_printk("pm_qos_class=%s value=%d, timeout_us=%ld",
249 __print_symbolic(__entry->pm_qos_class,
250 { PM_QOS_CPU_DMA_LATENCY, "CPU_DMA_LATENCY" },
251 { PM_QOS_NETWORK_LATENCY, "NETWORK_LATENCY" },
252 { PM_QOS_NETWORK_THROUGHPUT, "NETWORK_THROUGHPUT" }),
253 __entry->value, __entry->timeout_us)
254);
255
Sahara247e9ee2013-06-21 11:12:28 +0900256DECLARE_EVENT_CLASS(pm_qos_update,
257
258 TP_PROTO(enum pm_qos_req_action action, int prev_value, int curr_value),
259
260 TP_ARGS(action, prev_value, curr_value),
261
262 TP_STRUCT__entry(
263 __field( enum pm_qos_req_action, action )
264 __field( int, prev_value )
265 __field( int, curr_value )
266 ),
267
268 TP_fast_assign(
269 __entry->action = action;
270 __entry->prev_value = prev_value;
271 __entry->curr_value = curr_value;
272 ),
273
274 TP_printk("action=%s prev_value=%d curr_value=%d",
275 __print_symbolic(__entry->action,
276 { PM_QOS_ADD_REQ, "ADD_REQ" },
277 { PM_QOS_UPDATE_REQ, "UPDATE_REQ" },
278 { PM_QOS_REMOVE_REQ, "REMOVE_REQ" }),
279 __entry->prev_value, __entry->curr_value)
280);
281
282DEFINE_EVENT(pm_qos_update, pm_qos_update_target,
283
284 TP_PROTO(enum pm_qos_req_action action, int prev_value, int curr_value),
285
286 TP_ARGS(action, prev_value, curr_value)
287);
288
289DEFINE_EVENT_PRINT(pm_qos_update, pm_qos_update_flags,
290
291 TP_PROTO(enum pm_qos_req_action action, int prev_value, int curr_value),
292
293 TP_ARGS(action, prev_value, curr_value),
294
295 TP_printk("action=%s prev_value=0x%x curr_value=0x%x",
296 __print_symbolic(__entry->action,
297 { PM_QOS_ADD_REQ, "ADD_REQ" },
298 { PM_QOS_UPDATE_REQ, "UPDATE_REQ" },
299 { PM_QOS_REMOVE_REQ, "REMOVE_REQ" }),
300 __entry->prev_value, __entry->curr_value)
301);
Sahara96d9d0b2013-06-21 11:12:30 +0900302
303DECLARE_EVENT_CLASS(dev_pm_qos_request,
304
305 TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
306 s32 new_value),
307
308 TP_ARGS(name, type, new_value),
309
310 TP_STRUCT__entry(
311 __string( name, name )
312 __field( enum dev_pm_qos_req_type, type )
313 __field( s32, new_value )
314 ),
315
316 TP_fast_assign(
317 __assign_str(name, name);
318 __entry->type = type;
319 __entry->new_value = new_value;
320 ),
321
322 TP_printk("device=%s type=%s new_value=%d",
323 __get_str(name),
324 __print_symbolic(__entry->type,
325 { DEV_PM_QOS_LATENCY, "DEV_PM_QOS_LATENCY" },
326 { DEV_PM_QOS_FLAGS, "DEV_PM_QOS_FLAGS" }),
327 __entry->new_value)
328);
329
330DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_add_request,
331
332 TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
333 s32 new_value),
334
335 TP_ARGS(name, type, new_value)
336);
337
338DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_update_request,
339
340 TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
341 s32 new_value),
342
343 TP_ARGS(name, type, new_value)
344);
345
346DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_remove_request,
347
348 TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
349 s32 new_value),
350
351 TP_ARGS(name, type, new_value)
352);
Arjan van de Ven61613522009-09-17 16:11:28 +0200353#endif /* _TRACE_POWER_H */
354
355/* This part must be outside protection */
356#include <trace/define_trace.h>