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 11 DECLARE_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 31 DEFINE_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 43 #endif 44 45 DEFINE_EVENT(cpu, cpu_frequency, 46 47 TP_PROTO(unsigned int frequency, unsigned int cpu_id), 48 49 TP_ARGS(frequency, cpu_id) 50 ); 51 52 TRACE_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 69 DECLARE_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 89 DEFINE_EVENT(wakeup_source, wakeup_source_activate, 90 91 TP_PROTO(const char *name, unsigned int state), 92 93 TP_ARGS(name, state) 94 ); 95 96 DEFINE_EVENT(wakeup_source, wakeup_source_deactivate, 97 98 TP_PROTO(const char *name, unsigned int state), 99 100 TP_ARGS(name, state) 101 ); 102 103 /* 104 * The clock events are used for clock enable/disable and for 105 * clock rate change 106 */ 107 DECLARE_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 129 DEFINE_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 136 DEFINE_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 143 DEFINE_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 */ 153 DECLARE_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 175 DEFINE_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 ); 181 182 /* 183 * The pm qos events are used for pm qos update 184 */ 185 DECLARE_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 209 DEFINE_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 216 DEFINE_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 223 DEFINE_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 230 TRACE_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 256 DECLARE_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 282 DEFINE_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 289 DEFINE_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 ); 302 303 DECLARE_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 330 DEFINE_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 338 DEFINE_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 346 DEFINE_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 ); 353 #endif /* _TRACE_POWER_H */ 354 355 /* This part must be outside protection */ 356 #include <trace/define_trace.h> 357