1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | |
3 | #undef TRACE_SYSTEM |
4 | #define TRACE_SYSTEM rpm |
5 | |
6 | #if !defined(_TRACE_RUNTIME_POWER_H) || defined(TRACE_HEADER_MULTI_READ) |
7 | #define _TRACE_RUNTIME_POWER_H |
8 | |
9 | #include <linux/ktime.h> |
10 | #include <linux/tracepoint.h> |
11 | |
12 | struct device; |
13 | |
14 | /* |
15 | * The rpm_internal events are used for tracing some important |
16 | * runtime pm internal functions. |
17 | */ |
18 | DECLARE_EVENT_CLASS(rpm_internal, |
19 | |
20 | TP_PROTO(struct device *dev, int flags), |
21 | |
22 | TP_ARGS(dev, flags), |
23 | |
24 | TP_STRUCT__entry( |
25 | __string( name, dev_name(dev) ) |
26 | __field( int, flags ) |
27 | __field( int , usage_count ) |
28 | __field( int , disable_depth ) |
29 | __field( int , runtime_auto ) |
30 | __field( int , request_pending ) |
31 | __field( int , irq_safe ) |
32 | __field( int , child_count ) |
33 | ), |
34 | |
35 | TP_fast_assign( |
36 | __assign_str(name, dev_name(dev)); |
37 | __entry->flags = flags; |
38 | __entry->usage_count = atomic_read( |
39 | &dev->power.usage_count); |
40 | __entry->disable_depth = dev->power.disable_depth; |
41 | __entry->runtime_auto = dev->power.runtime_auto; |
42 | __entry->request_pending = dev->power.request_pending; |
43 | __entry->irq_safe = dev->power.irq_safe; |
44 | __entry->child_count = atomic_read( |
45 | &dev->power.child_count); |
46 | ), |
47 | |
48 | TP_printk("%s flags-%x cnt-%-2d dep-%-2d auto-%-1d p-%-1d" |
49 | " irq-%-1d child-%d" , |
50 | __get_str(name), __entry->flags, |
51 | __entry->usage_count, |
52 | __entry->disable_depth, |
53 | __entry->runtime_auto, |
54 | __entry->request_pending, |
55 | __entry->irq_safe, |
56 | __entry->child_count |
57 | ) |
58 | ); |
59 | DEFINE_EVENT(rpm_internal, rpm_suspend, |
60 | |
61 | TP_PROTO(struct device *dev, int flags), |
62 | |
63 | TP_ARGS(dev, flags) |
64 | ); |
65 | DEFINE_EVENT(rpm_internal, rpm_resume, |
66 | |
67 | TP_PROTO(struct device *dev, int flags), |
68 | |
69 | TP_ARGS(dev, flags) |
70 | ); |
71 | DEFINE_EVENT(rpm_internal, rpm_idle, |
72 | |
73 | TP_PROTO(struct device *dev, int flags), |
74 | |
75 | TP_ARGS(dev, flags) |
76 | ); |
77 | DEFINE_EVENT(rpm_internal, rpm_usage, |
78 | |
79 | TP_PROTO(struct device *dev, int flags), |
80 | |
81 | TP_ARGS(dev, flags) |
82 | ); |
83 | |
84 | TRACE_EVENT(rpm_return_int, |
85 | TP_PROTO(struct device *dev, unsigned long ip, int ret), |
86 | TP_ARGS(dev, ip, ret), |
87 | |
88 | TP_STRUCT__entry( |
89 | __string( name, dev_name(dev)) |
90 | __field( unsigned long, ip ) |
91 | __field( int, ret ) |
92 | ), |
93 | |
94 | TP_fast_assign( |
95 | __assign_str(name, dev_name(dev)); |
96 | __entry->ip = ip; |
97 | __entry->ret = ret; |
98 | ), |
99 | |
100 | TP_printk("%pS:%s ret=%d" , (void *)__entry->ip, __get_str(name), |
101 | __entry->ret) |
102 | ); |
103 | |
104 | #endif /* _TRACE_RUNTIME_POWER_H */ |
105 | |
106 | /* This part must be outside protection */ |
107 | #include <trace/define_trace.h> |
108 | |