| Arjan van de Ven | 6161352 | 2009-09-17 16:11:28 +0200 | [diff] [blame] | 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/tracepoint.h> | 
|  | 9 |  | 
| Thomas Renninger | 25e4193 | 2011-01-03 17:50:44 +0100 | [diff] [blame] | 10 | DECLARE_EVENT_CLASS(cpu, | 
|  | 11 |  | 
|  | 12 | TP_PROTO(unsigned int state, unsigned int cpu_id), | 
|  | 13 |  | 
|  | 14 | TP_ARGS(state, cpu_id), | 
|  | 15 |  | 
|  | 16 | TP_STRUCT__entry( | 
|  | 17 | __field(	u32,		state		) | 
|  | 18 | __field(	u32,		cpu_id		) | 
|  | 19 | ), | 
|  | 20 |  | 
|  | 21 | TP_fast_assign( | 
|  | 22 | __entry->state = state; | 
|  | 23 | __entry->cpu_id = cpu_id; | 
|  | 24 | ), | 
|  | 25 |  | 
|  | 26 | TP_printk("state=%lu cpu_id=%lu", (unsigned long)__entry->state, | 
|  | 27 | (unsigned long)__entry->cpu_id) | 
|  | 28 | ); | 
|  | 29 |  | 
|  | 30 | DEFINE_EVENT(cpu, cpu_idle, | 
|  | 31 |  | 
|  | 32 | TP_PROTO(unsigned int state, unsigned int cpu_id), | 
|  | 33 |  | 
|  | 34 | TP_ARGS(state, cpu_id) | 
|  | 35 | ); | 
|  | 36 |  | 
|  | 37 | /* This file can get included multiple times, TRACE_HEADER_MULTI_READ at top */ | 
|  | 38 | #ifndef _PWR_EVENT_AVOID_DOUBLE_DEFINING | 
|  | 39 | #define _PWR_EVENT_AVOID_DOUBLE_DEFINING | 
|  | 40 |  | 
|  | 41 | #define PWR_EVENT_EXIT -1 | 
| Arjan van de Ven | 6161352 | 2009-09-17 16:11:28 +0200 | [diff] [blame] | 42 | #endif | 
|  | 43 |  | 
| Thomas Renninger | 25e4193 | 2011-01-03 17:50:44 +0100 | [diff] [blame] | 44 | DEFINE_EVENT(cpu, cpu_frequency, | 
|  | 45 |  | 
|  | 46 | TP_PROTO(unsigned int frequency, unsigned int cpu_id), | 
|  | 47 |  | 
|  | 48 | TP_ARGS(frequency, cpu_id) | 
|  | 49 | ); | 
|  | 50 |  | 
|  | 51 | TRACE_EVENT(machine_suspend, | 
|  | 52 |  | 
|  | 53 | TP_PROTO(unsigned int state), | 
|  | 54 |  | 
|  | 55 | TP_ARGS(state), | 
|  | 56 |  | 
|  | 57 | TP_STRUCT__entry( | 
|  | 58 | __field(	u32,		state		) | 
|  | 59 | ), | 
|  | 60 |  | 
|  | 61 | TP_fast_assign( | 
|  | 62 | __entry->state = state; | 
|  | 63 | ), | 
|  | 64 |  | 
|  | 65 | TP_printk("state=%lu", (unsigned long)__entry->state) | 
|  | 66 | ); | 
|  | 67 |  | 
|  | 68 | /* This code will be removed after deprecation time exceeded (2.6.41) */ | 
|  | 69 | #ifdef CONFIG_EVENT_POWER_TRACING_DEPRECATED | 
|  | 70 |  | 
| Jean Pihet | 74704ac | 2010-09-07 09:21:32 +0200 | [diff] [blame] | 71 | /* | 
|  | 72 | * The power events are used for cpuidle & suspend (power_start, power_end) | 
|  | 73 | *  and for cpufreq (power_frequency) | 
|  | 74 | */ | 
| Li Zefan | 7703466 | 2009-11-26 15:05:38 +0800 | [diff] [blame] | 75 | DECLARE_EVENT_CLASS(power, | 
| Arjan van de Ven | 6161352 | 2009-09-17 16:11:28 +0200 | [diff] [blame] | 76 |  | 
| Thomas Renninger | 4c21adf | 2010-07-20 16:59:34 -0700 | [diff] [blame] | 77 | TP_PROTO(unsigned int type, unsigned int state, unsigned int cpu_id), | 
| Arjan van de Ven | 6161352 | 2009-09-17 16:11:28 +0200 | [diff] [blame] | 78 |  | 
| Thomas Renninger | 4c21adf | 2010-07-20 16:59:34 -0700 | [diff] [blame] | 79 | TP_ARGS(type, state, cpu_id), | 
| Arjan van de Ven | 6161352 | 2009-09-17 16:11:28 +0200 | [diff] [blame] | 80 |  | 
|  | 81 | TP_STRUCT__entry( | 
|  | 82 | __field(	u64,		type		) | 
|  | 83 | __field(	u64,		state		) | 
| Thomas Renninger | 4c21adf | 2010-07-20 16:59:34 -0700 | [diff] [blame] | 84 | __field(	u64,		cpu_id		) | 
| Arjan van de Ven | 6161352 | 2009-09-17 16:11:28 +0200 | [diff] [blame] | 85 | ), | 
|  | 86 |  | 
|  | 87 | TP_fast_assign( | 
|  | 88 | __entry->type = type; | 
|  | 89 | __entry->state = state; | 
| Thomas Renninger | 4c21adf | 2010-07-20 16:59:34 -0700 | [diff] [blame] | 90 | __entry->cpu_id = cpu_id; | 
| Arjan van de Ven | 6161352 | 2009-09-17 16:11:28 +0200 | [diff] [blame] | 91 | ), | 
|  | 92 |  | 
| Thomas Renninger | 4c21adf | 2010-07-20 16:59:34 -0700 | [diff] [blame] | 93 | TP_printk("type=%lu state=%lu cpu_id=%lu", (unsigned long)__entry->type, | 
|  | 94 | (unsigned long)__entry->state, (unsigned long)__entry->cpu_id) | 
| Arjan van de Ven | 6161352 | 2009-09-17 16:11:28 +0200 | [diff] [blame] | 95 | ); | 
|  | 96 |  | 
| Li Zefan | 7703466 | 2009-11-26 15:05:38 +0800 | [diff] [blame] | 97 | DEFINE_EVENT(power, power_start, | 
|  | 98 |  | 
| Thomas Renninger | 4c21adf | 2010-07-20 16:59:34 -0700 | [diff] [blame] | 99 | TP_PROTO(unsigned int type, unsigned int state, unsigned int cpu_id), | 
| Li Zefan | 7703466 | 2009-11-26 15:05:38 +0800 | [diff] [blame] | 100 |  | 
| Thomas Renninger | 4c21adf | 2010-07-20 16:59:34 -0700 | [diff] [blame] | 101 | TP_ARGS(type, state, cpu_id) | 
| Li Zefan | 7703466 | 2009-11-26 15:05:38 +0800 | [diff] [blame] | 102 | ); | 
|  | 103 |  | 
|  | 104 | DEFINE_EVENT(power, power_frequency, | 
|  | 105 |  | 
| Thomas Renninger | 4c21adf | 2010-07-20 16:59:34 -0700 | [diff] [blame] | 106 | TP_PROTO(unsigned int type, unsigned int state, unsigned int cpu_id), | 
| Li Zefan | 7703466 | 2009-11-26 15:05:38 +0800 | [diff] [blame] | 107 |  | 
| Thomas Renninger | 4c21adf | 2010-07-20 16:59:34 -0700 | [diff] [blame] | 108 | TP_ARGS(type, state, cpu_id) | 
| Li Zefan | 7703466 | 2009-11-26 15:05:38 +0800 | [diff] [blame] | 109 | ); | 
|  | 110 |  | 
| Arjan van de Ven | 6161352 | 2009-09-17 16:11:28 +0200 | [diff] [blame] | 111 | TRACE_EVENT(power_end, | 
|  | 112 |  | 
| Thomas Renninger | 4c21adf | 2010-07-20 16:59:34 -0700 | [diff] [blame] | 113 | TP_PROTO(unsigned int cpu_id), | 
| Arjan van de Ven | 6161352 | 2009-09-17 16:11:28 +0200 | [diff] [blame] | 114 |  | 
| Thomas Renninger | 4c21adf | 2010-07-20 16:59:34 -0700 | [diff] [blame] | 115 | TP_ARGS(cpu_id), | 
| Arjan van de Ven | 6161352 | 2009-09-17 16:11:28 +0200 | [diff] [blame] | 116 |  | 
|  | 117 | TP_STRUCT__entry( | 
| Thomas Renninger | 4c21adf | 2010-07-20 16:59:34 -0700 | [diff] [blame] | 118 | __field(	u64,		cpu_id		) | 
| Arjan van de Ven | 6161352 | 2009-09-17 16:11:28 +0200 | [diff] [blame] | 119 | ), | 
|  | 120 |  | 
|  | 121 | TP_fast_assign( | 
| Thomas Renninger | 4c21adf | 2010-07-20 16:59:34 -0700 | [diff] [blame] | 122 | __entry->cpu_id = cpu_id; | 
| Arjan van de Ven | 6161352 | 2009-09-17 16:11:28 +0200 | [diff] [blame] | 123 | ), | 
|  | 124 |  | 
| Thomas Renninger | 4c21adf | 2010-07-20 16:59:34 -0700 | [diff] [blame] | 125 | TP_printk("cpu_id=%lu", (unsigned long)__entry->cpu_id) | 
| Arjan van de Ven | 6161352 | 2009-09-17 16:11:28 +0200 | [diff] [blame] | 126 |  | 
|  | 127 | ); | 
|  | 128 |  | 
| Thomas Renninger | 25e4193 | 2011-01-03 17:50:44 +0100 | [diff] [blame] | 129 | /* Deprecated dummy functions must be protected against multi-declartion */ | 
|  | 130 | #ifndef _PWR_EVENT_AVOID_DOUBLE_DEFINING_DEPRECATED | 
|  | 131 | #define _PWR_EVENT_AVOID_DOUBLE_DEFINING_DEPRECATED | 
|  | 132 |  | 
|  | 133 | enum { | 
|  | 134 | POWER_NONE = 0, | 
|  | 135 | POWER_CSTATE = 1, | 
|  | 136 | POWER_PSTATE = 2, | 
|  | 137 | }; | 
|  | 138 | #endif /* _PWR_EVENT_AVOID_DOUBLE_DEFINING_DEPRECATED */ | 
|  | 139 |  | 
|  | 140 | #else /* CONFIG_EVENT_POWER_TRACING_DEPRECATED */ | 
|  | 141 |  | 
|  | 142 | #ifndef _PWR_EVENT_AVOID_DOUBLE_DEFINING_DEPRECATED | 
|  | 143 | #define _PWR_EVENT_AVOID_DOUBLE_DEFINING_DEPRECATED | 
|  | 144 | enum { | 
|  | 145 | POWER_NONE = 0, | 
|  | 146 | POWER_CSTATE = 1, | 
|  | 147 | POWER_PSTATE = 2, | 
|  | 148 | }; | 
|  | 149 |  | 
|  | 150 | /* These dummy declaration have to be ripped out when the deprecated | 
|  | 151 | events get removed */ | 
|  | 152 | static inline void trace_power_start(u64 type, u64 state, u64 cpuid) {}; | 
|  | 153 | static inline void trace_power_end(u64 cpuid) {}; | 
|  | 154 | static inline void trace_power_frequency(u64 type, u64 state, u64 cpuid) {}; | 
|  | 155 | #endif /* _PWR_EVENT_AVOID_DOUBLE_DEFINING_DEPRECATED */ | 
|  | 156 |  | 
|  | 157 | #endif /* CONFIG_EVENT_POWER_TRACING_DEPRECATED */ | 
|  | 158 |  | 
| Jean Pihet | 74704ac | 2010-09-07 09:21:32 +0200 | [diff] [blame] | 159 | /* | 
|  | 160 | * The clock events are used for clock enable/disable and for | 
|  | 161 | *  clock rate change | 
|  | 162 | */ | 
|  | 163 | DECLARE_EVENT_CLASS(clock, | 
|  | 164 |  | 
|  | 165 | TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id), | 
|  | 166 |  | 
|  | 167 | TP_ARGS(name, state, cpu_id), | 
|  | 168 |  | 
|  | 169 | TP_STRUCT__entry( | 
|  | 170 | __string(       name,           name            ) | 
|  | 171 | __field(        u64,            state           ) | 
|  | 172 | __field(        u64,            cpu_id          ) | 
|  | 173 | ), | 
|  | 174 |  | 
|  | 175 | TP_fast_assign( | 
|  | 176 | __assign_str(name, name); | 
|  | 177 | __entry->state = state; | 
|  | 178 | __entry->cpu_id = cpu_id; | 
|  | 179 | ), | 
|  | 180 |  | 
|  | 181 | TP_printk("%s state=%lu cpu_id=%lu", __get_str(name), | 
|  | 182 | (unsigned long)__entry->state, (unsigned long)__entry->cpu_id) | 
|  | 183 | ); | 
|  | 184 |  | 
|  | 185 | DEFINE_EVENT(clock, clock_enable, | 
|  | 186 |  | 
|  | 187 | TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id), | 
|  | 188 |  | 
|  | 189 | TP_ARGS(name, state, cpu_id) | 
|  | 190 | ); | 
|  | 191 |  | 
|  | 192 | DEFINE_EVENT(clock, clock_disable, | 
|  | 193 |  | 
|  | 194 | TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id), | 
|  | 195 |  | 
|  | 196 | TP_ARGS(name, state, cpu_id) | 
|  | 197 | ); | 
|  | 198 |  | 
|  | 199 | DEFINE_EVENT(clock, clock_set_rate, | 
|  | 200 |  | 
|  | 201 | TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id), | 
|  | 202 |  | 
|  | 203 | TP_ARGS(name, state, cpu_id) | 
|  | 204 | ); | 
|  | 205 |  | 
|  | 206 | /* | 
|  | 207 | * The power domain events are used for power domains transitions | 
|  | 208 | */ | 
|  | 209 | DECLARE_EVENT_CLASS(power_domain, | 
|  | 210 |  | 
|  | 211 | TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id), | 
|  | 212 |  | 
|  | 213 | TP_ARGS(name, state, cpu_id), | 
|  | 214 |  | 
|  | 215 | TP_STRUCT__entry( | 
|  | 216 | __string(       name,           name            ) | 
|  | 217 | __field(        u64,            state           ) | 
|  | 218 | __field(        u64,            cpu_id          ) | 
|  | 219 | ), | 
|  | 220 |  | 
|  | 221 | TP_fast_assign( | 
|  | 222 | __assign_str(name, name); | 
|  | 223 | __entry->state = state; | 
|  | 224 | __entry->cpu_id = cpu_id; | 
|  | 225 | ), | 
|  | 226 |  | 
|  | 227 | TP_printk("%s state=%lu cpu_id=%lu", __get_str(name), | 
|  | 228 | (unsigned long)__entry->state, (unsigned long)__entry->cpu_id) | 
|  | 229 | ); | 
|  | 230 |  | 
|  | 231 | DEFINE_EVENT(power_domain, power_domain_target, | 
|  | 232 |  | 
|  | 233 | TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id), | 
|  | 234 |  | 
|  | 235 | TP_ARGS(name, state, cpu_id) | 
|  | 236 | ); | 
| Arjan van de Ven | 6161352 | 2009-09-17 16:11:28 +0200 | [diff] [blame] | 237 | #endif /* _TRACE_POWER_H */ | 
|  | 238 |  | 
|  | 239 | /* This part must be outside protection */ | 
|  | 240 | #include <trace/define_trace.h> |