2 #define TRACE_SYSTEM power
4 #if !defined(_TRACE_POWER_H) || defined(TRACE_HEADER_MULTI_READ)
7 #include <linux/ktime.h>
8 #include <linux/pm_qos.h>
9 #include <linux/tracepoint.h>
11 DECLARE_EVENT_CLASS(cpu,
13 TP_PROTO(unsigned int state, unsigned int cpu_id),
15 TP_ARGS(state, cpu_id),
19 __field( u32, cpu_id )
23 __entry->state = state;
24 __entry->cpu_id = cpu_id;
27 TP_printk("state=%lu cpu_id=%lu", (unsigned long)__entry->state,
28 (unsigned long)__entry->cpu_id)
31 DEFINE_EVENT(cpu, cpu_idle,
33 TP_PROTO(unsigned int state, unsigned int cpu_id),
35 TP_ARGS(state, cpu_id)
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
42 #define PWR_EVENT_EXIT -1
45 DEFINE_EVENT(cpu, cpu_frequency,
47 TP_PROTO(unsigned int frequency, unsigned int cpu_id),
49 TP_ARGS(frequency, cpu_id)
52 TRACE_EVENT(machine_suspend,
54 TP_PROTO(unsigned int state),
63 __entry->state = state;
66 TP_printk("state=%lu", (unsigned long)__entry->state)
69 DECLARE_EVENT_CLASS(wakeup_source,
71 TP_PROTO(const char *name, unsigned int state),
76 __string( name, name )
81 __assign_str(name, name);
82 __entry->state = state;
85 TP_printk("%s state=0x%lx", __get_str(name),
86 (unsigned long)__entry->state)
89 DEFINE_EVENT(wakeup_source, wakeup_source_activate,
91 TP_PROTO(const char *name, unsigned int state),
96 DEFINE_EVENT(wakeup_source, wakeup_source_deactivate,
98 TP_PROTO(const char *name, unsigned int state),
104 * The clock events are used for clock enable/disable and for
107 DECLARE_EVENT_CLASS(clock,
109 TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
111 TP_ARGS(name, state, cpu_id),
114 __string( name, name )
115 __field( u64, state )
116 __field( u64, cpu_id )
120 __assign_str(name, name);
121 __entry->state = state;
122 __entry->cpu_id = cpu_id;
125 TP_printk("%s state=%lu cpu_id=%lu", __get_str(name),
126 (unsigned long)__entry->state, (unsigned long)__entry->cpu_id)
129 DEFINE_EVENT(clock, clock_enable,
131 TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
133 TP_ARGS(name, state, cpu_id)
136 DEFINE_EVENT(clock, clock_disable,
138 TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
140 TP_ARGS(name, state, cpu_id)
143 DEFINE_EVENT(clock, clock_set_rate,
145 TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
147 TP_ARGS(name, state, cpu_id)
151 * The power domain events are used for power domains transitions
153 DECLARE_EVENT_CLASS(power_domain,
155 TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
157 TP_ARGS(name, state, cpu_id),
160 __string( name, name )
161 __field( u64, state )
162 __field( u64, cpu_id )
166 __assign_str(name, name);
167 __entry->state = state;
168 __entry->cpu_id = cpu_id;
171 TP_printk("%s state=%lu cpu_id=%lu", __get_str(name),
172 (unsigned long)__entry->state, (unsigned long)__entry->cpu_id)
175 DEFINE_EVENT(power_domain, power_domain_target,
177 TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
179 TP_ARGS(name, state, cpu_id)
183 * The pm qos events are used for pm qos update
185 DECLARE_EVENT_CLASS(pm_qos_request,
187 TP_PROTO(int pm_qos_class, s32 value),
189 TP_ARGS(pm_qos_class, value),
192 __field( int, pm_qos_class )
193 __field( s32, value )
197 __entry->pm_qos_class = pm_qos_class;
198 __entry->value = value;
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" }),
209 DEFINE_EVENT(pm_qos_request, pm_qos_add_request,
211 TP_PROTO(int pm_qos_class, s32 value),
213 TP_ARGS(pm_qos_class, value)
216 DEFINE_EVENT(pm_qos_request, pm_qos_update_request,
218 TP_PROTO(int pm_qos_class, s32 value),
220 TP_ARGS(pm_qos_class, value)
223 DEFINE_EVENT(pm_qos_request, pm_qos_remove_request,
225 TP_PROTO(int pm_qos_class, s32 value),
227 TP_ARGS(pm_qos_class, value)
230 TRACE_EVENT(pm_qos_update_request_timeout,
232 TP_PROTO(int pm_qos_class, s32 value, unsigned long timeout_us),
234 TP_ARGS(pm_qos_class, value, timeout_us),
237 __field( int, pm_qos_class )
238 __field( s32, value )
239 __field( unsigned long, timeout_us )
243 __entry->pm_qos_class = pm_qos_class;
244 __entry->value = value;
245 __entry->timeout_us = timeout_us;
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)
256 DECLARE_EVENT_CLASS(pm_qos_update,
258 TP_PROTO(enum pm_qos_req_action action, int prev_value, int curr_value),
260 TP_ARGS(action, prev_value, curr_value),
263 __field( enum pm_qos_req_action, action )
264 __field( int, prev_value )
265 __field( int, curr_value )
269 __entry->action = action;
270 __entry->prev_value = prev_value;
271 __entry->curr_value = curr_value;
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)
282 DEFINE_EVENT(pm_qos_update, pm_qos_update_target,
284 TP_PROTO(enum pm_qos_req_action action, int prev_value, int curr_value),
286 TP_ARGS(action, prev_value, curr_value)
289 DEFINE_EVENT_PRINT(pm_qos_update, pm_qos_update_flags,
291 TP_PROTO(enum pm_qos_req_action action, int prev_value, int curr_value),
293 TP_ARGS(action, prev_value, curr_value),
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)
303 DECLARE_EVENT_CLASS(dev_pm_qos_request,
305 TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
308 TP_ARGS(name, type, new_value),
311 __string( name, name )
312 __field( enum dev_pm_qos_req_type, type )
313 __field( s32, new_value )
317 __assign_str(name, name);
318 __entry->type = type;
319 __entry->new_value = new_value;
322 TP_printk("device=%s type=%s new_value=%d",
324 __print_symbolic(__entry->type,
325 { DEV_PM_QOS_LATENCY, "DEV_PM_QOS_LATENCY" },
326 { DEV_PM_QOS_FLAGS, "DEV_PM_QOS_FLAGS" }),
330 DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_add_request,
332 TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
335 TP_ARGS(name, type, new_value)
338 DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_update_request,
340 TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
343 TP_ARGS(name, type, new_value)
346 DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_remove_request,
348 TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
351 TP_ARGS(name, type, new_value)
353 #endif /* _TRACE_POWER_H */
355 /* This part must be outside protection */
356 #include <trace/define_trace.h>