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 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 42 #endif 43 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 71 /* 72 * The power events are used for cpuidle & suspend (power_start, power_end) 73 * and for cpufreq (power_frequency) 74 */ 75 DECLARE_EVENT_CLASS(power, 76 77 TP_PROTO(unsigned int type, unsigned int state, unsigned int cpu_id), 78 79 TP_ARGS(type, state, cpu_id), 80 81 TP_STRUCT__entry( 82 __field( u64, type ) 83 __field( u64, state ) 84 __field( u64, cpu_id ) 85 ), 86 87 TP_fast_assign( 88 __entry->type = type; 89 __entry->state = state; 90 __entry->cpu_id = cpu_id; 91 ), 92 93 TP_printk("type=%lu state=%lu cpu_id=%lu", (unsigned long)__entry->type, 94 (unsigned long)__entry->state, (unsigned long)__entry->cpu_id) 95 ); 96 97 DEFINE_EVENT(power, power_start, 98 99 TP_PROTO(unsigned int type, unsigned int state, unsigned int cpu_id), 100 101 TP_ARGS(type, state, cpu_id) 102 ); 103 104 DEFINE_EVENT(power, power_frequency, 105 106 TP_PROTO(unsigned int type, unsigned int state, unsigned int cpu_id), 107 108 TP_ARGS(type, state, cpu_id) 109 ); 110 111 TRACE_EVENT(power_end, 112 113 TP_PROTO(unsigned int cpu_id), 114 115 TP_ARGS(cpu_id), 116 117 TP_STRUCT__entry( 118 __field( u64, cpu_id ) 119 ), 120 121 TP_fast_assign( 122 __entry->cpu_id = cpu_id; 123 ), 124 125 TP_printk("cpu_id=%lu", (unsigned long)__entry->cpu_id) 126 127 ); 128 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 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 ); 237 #endif /* _TRACE_POWER_H */ 238 239 /* This part must be outside protection */ 240 #include <trace/define_trace.h> 241