Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / include / trace / events / power.h
1 #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>
8 #include <linux/pm_qos.h>
9 #include <linux/tracepoint.h>
10 #include <linux/ftrace_event.h>
11
12 #define TPS(x)  tracepoint_string(x)
13
14 DECLARE_EVENT_CLASS(cpu,
15
16         TP_PROTO(unsigned int state, unsigned int cpu_id),
17
18         TP_ARGS(state, cpu_id),
19
20         TP_STRUCT__entry(
21                 __field(        u32,            state           )
22                 __field(        u32,            cpu_id          )
23         ),
24
25         TP_fast_assign(
26                 __entry->state = state;
27                 __entry->cpu_id = cpu_id;
28         ),
29
30         TP_printk("state=%lu cpu_id=%lu", (unsigned long)__entry->state,
31                   (unsigned long)__entry->cpu_id)
32 );
33
34 DEFINE_EVENT(cpu, cpu_idle,
35
36         TP_PROTO(unsigned int state, unsigned int cpu_id),
37
38         TP_ARGS(state, cpu_id)
39 );
40
41 TRACE_EVENT(pstate_sample,
42
43         TP_PROTO(u32 core_busy,
44                 u32 scaled_busy,
45                 u32 state,
46                 u64 mperf,
47                 u64 aperf,
48                 u32 freq
49                 ),
50
51         TP_ARGS(core_busy,
52                 scaled_busy,
53                 state,
54                 mperf,
55                 aperf,
56                 freq
57                 ),
58
59         TP_STRUCT__entry(
60                 __field(u32, core_busy)
61                 __field(u32, scaled_busy)
62                 __field(u32, state)
63                 __field(u64, mperf)
64                 __field(u64, aperf)
65                 __field(u32, freq)
66
67         ),
68
69         TP_fast_assign(
70                 __entry->core_busy = core_busy;
71                 __entry->scaled_busy = scaled_busy;
72                 __entry->state = state;
73                 __entry->mperf = mperf;
74                 __entry->aperf = aperf;
75                 __entry->freq = freq;
76                 ),
77
78         TP_printk("core_busy=%lu scaled=%lu state=%lu mperf=%llu aperf=%llu freq=%lu ",
79                 (unsigned long)__entry->core_busy,
80                 (unsigned long)__entry->scaled_busy,
81                 (unsigned long)__entry->state,
82                 (unsigned long long)__entry->mperf,
83                 (unsigned long long)__entry->aperf,
84                 (unsigned long)__entry->freq
85                 )
86
87 );
88
89 /* This file can get included multiple times, TRACE_HEADER_MULTI_READ at top */
90 #ifndef _PWR_EVENT_AVOID_DOUBLE_DEFINING
91 #define _PWR_EVENT_AVOID_DOUBLE_DEFINING
92
93 #define PWR_EVENT_EXIT -1
94 #endif
95
96 #define pm_verb_symbolic(event) \
97         __print_symbolic(event, \
98                 { PM_EVENT_SUSPEND, "suspend" }, \
99                 { PM_EVENT_RESUME, "resume" }, \
100                 { PM_EVENT_FREEZE, "freeze" }, \
101                 { PM_EVENT_QUIESCE, "quiesce" }, \
102                 { PM_EVENT_HIBERNATE, "hibernate" }, \
103                 { PM_EVENT_THAW, "thaw" }, \
104                 { PM_EVENT_RESTORE, "restore" }, \
105                 { PM_EVENT_RECOVER, "recover" })
106
107 DEFINE_EVENT(cpu, cpu_frequency,
108
109         TP_PROTO(unsigned int frequency, unsigned int cpu_id),
110
111         TP_ARGS(frequency, cpu_id)
112 );
113
114 TRACE_EVENT(device_pm_callback_start,
115
116         TP_PROTO(struct device *dev, const char *pm_ops, int event),
117
118         TP_ARGS(dev, pm_ops, event),
119
120         TP_STRUCT__entry(
121                 __string(device, dev_name(dev))
122                 __string(driver, dev_driver_string(dev))
123                 __string(parent, dev->parent ? dev_name(dev->parent) : "none")
124                 __string(pm_ops, pm_ops ? pm_ops : "none ")
125                 __field(int, event)
126         ),
127
128         TP_fast_assign(
129                 __assign_str(device, dev_name(dev));
130                 __assign_str(driver, dev_driver_string(dev));
131                 __assign_str(parent,
132                         dev->parent ? dev_name(dev->parent) : "none");
133                 __assign_str(pm_ops, pm_ops ? pm_ops : "none ");
134                 __entry->event = event;
135         ),
136
137         TP_printk("%s %s, parent: %s, %s[%s]", __get_str(driver),
138                 __get_str(device), __get_str(parent), __get_str(pm_ops),
139                 pm_verb_symbolic(__entry->event))
140 );
141
142 TRACE_EVENT(device_pm_callback_end,
143
144         TP_PROTO(struct device *dev, int error),
145
146         TP_ARGS(dev, error),
147
148         TP_STRUCT__entry(
149                 __string(device, dev_name(dev))
150                 __string(driver, dev_driver_string(dev))
151                 __field(int, error)
152         ),
153
154         TP_fast_assign(
155                 __assign_str(device, dev_name(dev));
156                 __assign_str(driver, dev_driver_string(dev));
157                 __entry->error = error;
158         ),
159
160         TP_printk("%s %s, err=%d",
161                 __get_str(driver), __get_str(device), __entry->error)
162 );
163
164 TRACE_EVENT(suspend_resume,
165
166         TP_PROTO(const char *action, int val, bool start),
167
168         TP_ARGS(action, val, start),
169
170         TP_STRUCT__entry(
171                 __field(const char *, action)
172                 __field(int, val)
173                 __field(bool, start)
174         ),
175
176         TP_fast_assign(
177                 __entry->action = action;
178                 __entry->val = val;
179                 __entry->start = start;
180         ),
181
182         TP_printk("%s[%u] %s", __entry->action, (unsigned int)__entry->val,
183                 (__entry->start)?"begin":"end")
184 );
185
186 DECLARE_EVENT_CLASS(wakeup_source,
187
188         TP_PROTO(const char *name, unsigned int state),
189
190         TP_ARGS(name, state),
191
192         TP_STRUCT__entry(
193                 __string(       name,           name            )
194                 __field(        u64,            state           )
195         ),
196
197         TP_fast_assign(
198                 __assign_str(name, name);
199                 __entry->state = state;
200         ),
201
202         TP_printk("%s state=0x%lx", __get_str(name),
203                 (unsigned long)__entry->state)
204 );
205
206 DEFINE_EVENT(wakeup_source, wakeup_source_activate,
207
208         TP_PROTO(const char *name, unsigned int state),
209
210         TP_ARGS(name, state)
211 );
212
213 DEFINE_EVENT(wakeup_source, wakeup_source_deactivate,
214
215         TP_PROTO(const char *name, unsigned int state),
216
217         TP_ARGS(name, state)
218 );
219
220 /*
221  * The clock events are used for clock enable/disable and for
222  *  clock rate change
223  */
224 DECLARE_EVENT_CLASS(clock,
225
226         TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
227
228         TP_ARGS(name, state, cpu_id),
229
230         TP_STRUCT__entry(
231                 __string(       name,           name            )
232                 __field(        u64,            state           )
233                 __field(        u64,            cpu_id          )
234         ),
235
236         TP_fast_assign(
237                 __assign_str(name, name);
238                 __entry->state = state;
239                 __entry->cpu_id = cpu_id;
240         ),
241
242         TP_printk("%s state=%lu cpu_id=%lu", __get_str(name),
243                 (unsigned long)__entry->state, (unsigned long)__entry->cpu_id)
244 );
245
246 DEFINE_EVENT(clock, clock_enable,
247
248         TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
249
250         TP_ARGS(name, state, cpu_id)
251 );
252
253 DEFINE_EVENT(clock, clock_disable,
254
255         TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
256
257         TP_ARGS(name, state, cpu_id)
258 );
259
260 DEFINE_EVENT(clock, clock_set_rate,
261
262         TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
263
264         TP_ARGS(name, state, cpu_id)
265 );
266
267 /*
268  * The power domain events are used for power domains transitions
269  */
270 DECLARE_EVENT_CLASS(power_domain,
271
272         TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
273
274         TP_ARGS(name, state, cpu_id),
275
276         TP_STRUCT__entry(
277                 __string(       name,           name            )
278                 __field(        u64,            state           )
279                 __field(        u64,            cpu_id          )
280         ),
281
282         TP_fast_assign(
283                 __assign_str(name, name);
284                 __entry->state = state;
285                 __entry->cpu_id = cpu_id;
286 ),
287
288         TP_printk("%s state=%lu cpu_id=%lu", __get_str(name),
289                 (unsigned long)__entry->state, (unsigned long)__entry->cpu_id)
290 );
291
292 DEFINE_EVENT(power_domain, power_domain_target,
293
294         TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
295
296         TP_ARGS(name, state, cpu_id)
297 );
298
299 /*
300  * The pm qos events are used for pm qos update
301  */
302 DECLARE_EVENT_CLASS(pm_qos_request,
303
304         TP_PROTO(int pm_qos_class, s32 value),
305
306         TP_ARGS(pm_qos_class, value),
307
308         TP_STRUCT__entry(
309                 __field( int,                    pm_qos_class   )
310                 __field( s32,                    value          )
311         ),
312
313         TP_fast_assign(
314                 __entry->pm_qos_class = pm_qos_class;
315                 __entry->value = value;
316         ),
317
318         TP_printk("pm_qos_class=%s value=%d",
319                   __print_symbolic(__entry->pm_qos_class,
320                         { PM_QOS_CPU_DMA_LATENCY,       "CPU_DMA_LATENCY" },
321                         { PM_QOS_NETWORK_LATENCY,       "NETWORK_LATENCY" },
322                         { PM_QOS_NETWORK_THROUGHPUT,    "NETWORK_THROUGHPUT" }),
323                   __entry->value)
324 );
325
326 DEFINE_EVENT(pm_qos_request, pm_qos_add_request,
327
328         TP_PROTO(int pm_qos_class, s32 value),
329
330         TP_ARGS(pm_qos_class, value)
331 );
332
333 DEFINE_EVENT(pm_qos_request, pm_qos_update_request,
334
335         TP_PROTO(int pm_qos_class, s32 value),
336
337         TP_ARGS(pm_qos_class, value)
338 );
339
340 DEFINE_EVENT(pm_qos_request, pm_qos_remove_request,
341
342         TP_PROTO(int pm_qos_class, s32 value),
343
344         TP_ARGS(pm_qos_class, value)
345 );
346
347 TRACE_EVENT(pm_qos_update_request_timeout,
348
349         TP_PROTO(int pm_qos_class, s32 value, unsigned long timeout_us),
350
351         TP_ARGS(pm_qos_class, value, timeout_us),
352
353         TP_STRUCT__entry(
354                 __field( int,                    pm_qos_class   )
355                 __field( s32,                    value          )
356                 __field( unsigned long,          timeout_us     )
357         ),
358
359         TP_fast_assign(
360                 __entry->pm_qos_class = pm_qos_class;
361                 __entry->value = value;
362                 __entry->timeout_us = timeout_us;
363         ),
364
365         TP_printk("pm_qos_class=%s value=%d, timeout_us=%ld",
366                   __print_symbolic(__entry->pm_qos_class,
367                         { PM_QOS_CPU_DMA_LATENCY,       "CPU_DMA_LATENCY" },
368                         { PM_QOS_NETWORK_LATENCY,       "NETWORK_LATENCY" },
369                         { PM_QOS_NETWORK_THROUGHPUT,    "NETWORK_THROUGHPUT" }),
370                   __entry->value, __entry->timeout_us)
371 );
372
373 DECLARE_EVENT_CLASS(pm_qos_update,
374
375         TP_PROTO(enum pm_qos_req_action action, int prev_value, int curr_value),
376
377         TP_ARGS(action, prev_value, curr_value),
378
379         TP_STRUCT__entry(
380                 __field( enum pm_qos_req_action, action         )
381                 __field( int,                    prev_value     )
382                 __field( int,                    curr_value     )
383         ),
384
385         TP_fast_assign(
386                 __entry->action = action;
387                 __entry->prev_value = prev_value;
388                 __entry->curr_value = curr_value;
389         ),
390
391         TP_printk("action=%s prev_value=%d curr_value=%d",
392                   __print_symbolic(__entry->action,
393                         { PM_QOS_ADD_REQ,       "ADD_REQ" },
394                         { PM_QOS_UPDATE_REQ,    "UPDATE_REQ" },
395                         { PM_QOS_REMOVE_REQ,    "REMOVE_REQ" }),
396                   __entry->prev_value, __entry->curr_value)
397 );
398
399 DEFINE_EVENT(pm_qos_update, pm_qos_update_target,
400
401         TP_PROTO(enum pm_qos_req_action action, int prev_value, int curr_value),
402
403         TP_ARGS(action, prev_value, curr_value)
404 );
405
406 DEFINE_EVENT_PRINT(pm_qos_update, pm_qos_update_flags,
407
408         TP_PROTO(enum pm_qos_req_action action, int prev_value, int curr_value),
409
410         TP_ARGS(action, prev_value, curr_value),
411
412         TP_printk("action=%s prev_value=0x%x curr_value=0x%x",
413                   __print_symbolic(__entry->action,
414                         { PM_QOS_ADD_REQ,       "ADD_REQ" },
415                         { PM_QOS_UPDATE_REQ,    "UPDATE_REQ" },
416                         { PM_QOS_REMOVE_REQ,    "REMOVE_REQ" }),
417                   __entry->prev_value, __entry->curr_value)
418 );
419
420 DECLARE_EVENT_CLASS(dev_pm_qos_request,
421
422         TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
423                  s32 new_value),
424
425         TP_ARGS(name, type, new_value),
426
427         TP_STRUCT__entry(
428                 __string( name,                    name         )
429                 __field( enum dev_pm_qos_req_type, type         )
430                 __field( s32,                      new_value    )
431         ),
432
433         TP_fast_assign(
434                 __assign_str(name, name);
435                 __entry->type = type;
436                 __entry->new_value = new_value;
437         ),
438
439         TP_printk("device=%s type=%s new_value=%d",
440                   __get_str(name),
441                   __print_symbolic(__entry->type,
442                         { DEV_PM_QOS_RESUME_LATENCY, "DEV_PM_QOS_RESUME_LATENCY" },
443                         { DEV_PM_QOS_FLAGS, "DEV_PM_QOS_FLAGS" }),
444                   __entry->new_value)
445 );
446
447 DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_add_request,
448
449         TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
450                  s32 new_value),
451
452         TP_ARGS(name, type, new_value)
453 );
454
455 DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_update_request,
456
457         TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
458                  s32 new_value),
459
460         TP_ARGS(name, type, new_value)
461 );
462
463 DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_remove_request,
464
465         TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
466                  s32 new_value),
467
468         TP_ARGS(name, type, new_value)
469 );
470 #endif /* _TRACE_POWER_H */
471
472 /* This part must be outside protection */
473 #include <trace/define_trace.h>