1#undef TRACE_SYSTEM
2#define TRACE_SYSTEM powerpc
3
4#if !defined(_TRACE_POWERPC_H) || defined(TRACE_HEADER_MULTI_READ)
5#define _TRACE_POWERPC_H
6
7#include <linux/tracepoint.h>
8
9struct pt_regs;
10
11DECLARE_EVENT_CLASS(ppc64_interrupt_class,
12
13	TP_PROTO(struct pt_regs *regs),
14
15	TP_ARGS(regs),
16
17	TP_STRUCT__entry(
18		__field(struct pt_regs *, regs)
19	),
20
21	TP_fast_assign(
22		__entry->regs = regs;
23	),
24
25	TP_printk("pt_regs=%p", __entry->regs)
26);
27
28DEFINE_EVENT(ppc64_interrupt_class, irq_entry,
29
30	TP_PROTO(struct pt_regs *regs),
31
32	TP_ARGS(regs)
33);
34
35DEFINE_EVENT(ppc64_interrupt_class, irq_exit,
36
37	TP_PROTO(struct pt_regs *regs),
38
39	TP_ARGS(regs)
40);
41
42DEFINE_EVENT(ppc64_interrupt_class, timer_interrupt_entry,
43
44	TP_PROTO(struct pt_regs *regs),
45
46	TP_ARGS(regs)
47);
48
49DEFINE_EVENT(ppc64_interrupt_class, timer_interrupt_exit,
50
51	TP_PROTO(struct pt_regs *regs),
52
53	TP_ARGS(regs)
54);
55
56#ifdef CONFIG_PPC_PSERIES
57extern void hcall_tracepoint_regfunc(void);
58extern void hcall_tracepoint_unregfunc(void);
59
60TRACE_EVENT_FN(hcall_entry,
61
62	TP_PROTO(unsigned long opcode, unsigned long *args),
63
64	TP_ARGS(opcode, args),
65
66	TP_STRUCT__entry(
67		__field(unsigned long, opcode)
68	),
69
70	TP_fast_assign(
71		__entry->opcode = opcode;
72	),
73
74	TP_printk("opcode=%lu", __entry->opcode),
75
76	hcall_tracepoint_regfunc, hcall_tracepoint_unregfunc
77);
78
79TRACE_EVENT_FN(hcall_exit,
80
81	TP_PROTO(unsigned long opcode, unsigned long retval,
82		unsigned long *retbuf),
83
84	TP_ARGS(opcode, retval, retbuf),
85
86	TP_STRUCT__entry(
87		__field(unsigned long, opcode)
88		__field(unsigned long, retval)
89	),
90
91	TP_fast_assign(
92		__entry->opcode = opcode;
93		__entry->retval = retval;
94	),
95
96	TP_printk("opcode=%lu retval=%lu", __entry->opcode, __entry->retval),
97
98	hcall_tracepoint_regfunc, hcall_tracepoint_unregfunc
99);
100#endif
101
102#ifdef CONFIG_PPC_POWERNV
103extern void opal_tracepoint_regfunc(void);
104extern void opal_tracepoint_unregfunc(void);
105
106TRACE_EVENT_FN(opal_entry,
107
108	TP_PROTO(unsigned long opcode, unsigned long *args),
109
110	TP_ARGS(opcode, args),
111
112	TP_STRUCT__entry(
113		__field(unsigned long, opcode)
114	),
115
116	TP_fast_assign(
117		__entry->opcode = opcode;
118	),
119
120	TP_printk("opcode=%lu", __entry->opcode),
121
122	opal_tracepoint_regfunc, opal_tracepoint_unregfunc
123);
124
125TRACE_EVENT_FN(opal_exit,
126
127	TP_PROTO(unsigned long opcode, unsigned long retval),
128
129	TP_ARGS(opcode, retval),
130
131	TP_STRUCT__entry(
132		__field(unsigned long, opcode)
133		__field(unsigned long, retval)
134	),
135
136	TP_fast_assign(
137		__entry->opcode = opcode;
138		__entry->retval = retval;
139	),
140
141	TP_printk("opcode=%lu retval=%lu", __entry->opcode, __entry->retval),
142
143	opal_tracepoint_regfunc, opal_tracepoint_unregfunc
144);
145#endif
146
147#endif /* _TRACE_POWERPC_H */
148
149#undef TRACE_INCLUDE_PATH
150#undef TRACE_INCLUDE_FILE
151
152#define TRACE_INCLUDE_PATH asm
153#define TRACE_INCLUDE_FILE trace
154
155#include <trace/define_trace.h>
156