xref: /OK3568_Linux_fs/kernel/drivers/misc/cxl/trace.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright 2015 IBM Corp.
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #undef TRACE_SYSTEM
7*4882a593Smuzhiyun #define TRACE_SYSTEM cxl
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #if !defined(_CXL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
10*4882a593Smuzhiyun #define _CXL_TRACE_H
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include <linux/tracepoint.h>
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #include "cxl.h"
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun #define dsisr_psl9_flags(flags) \
17*4882a593Smuzhiyun 	__print_flags(flags, "|", \
18*4882a593Smuzhiyun 		{ CXL_PSL9_DSISR_An_CO_MASK,	"FR" }, \
19*4882a593Smuzhiyun 		{ CXL_PSL9_DSISR_An_TF,		"TF" }, \
20*4882a593Smuzhiyun 		{ CXL_PSL9_DSISR_An_PE,		"PE" }, \
21*4882a593Smuzhiyun 		{ CXL_PSL9_DSISR_An_AE,		"AE" }, \
22*4882a593Smuzhiyun 		{ CXL_PSL9_DSISR_An_OC,		"OC" }, \
23*4882a593Smuzhiyun 		{ CXL_PSL9_DSISR_An_S,		"S" })
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #define DSISR_FLAGS \
26*4882a593Smuzhiyun 	{ CXL_PSL_DSISR_An_DS,	"DS" }, \
27*4882a593Smuzhiyun 	{ CXL_PSL_DSISR_An_DM,	"DM" }, \
28*4882a593Smuzhiyun 	{ CXL_PSL_DSISR_An_ST,	"ST" }, \
29*4882a593Smuzhiyun 	{ CXL_PSL_DSISR_An_UR,	"UR" }, \
30*4882a593Smuzhiyun 	{ CXL_PSL_DSISR_An_PE,	"PE" }, \
31*4882a593Smuzhiyun 	{ CXL_PSL_DSISR_An_AE,	"AE" }, \
32*4882a593Smuzhiyun 	{ CXL_PSL_DSISR_An_OC,	"OC" }, \
33*4882a593Smuzhiyun 	{ CXL_PSL_DSISR_An_M,	"M" }, \
34*4882a593Smuzhiyun 	{ CXL_PSL_DSISR_An_P,	"P" }, \
35*4882a593Smuzhiyun 	{ CXL_PSL_DSISR_An_A,	"A" }, \
36*4882a593Smuzhiyun 	{ CXL_PSL_DSISR_An_S,	"S" }, \
37*4882a593Smuzhiyun 	{ CXL_PSL_DSISR_An_K,	"K" }
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun #define TFC_FLAGS \
40*4882a593Smuzhiyun 	{ CXL_PSL_TFC_An_A,	"A" }, \
41*4882a593Smuzhiyun 	{ CXL_PSL_TFC_An_C,	"C" }, \
42*4882a593Smuzhiyun 	{ CXL_PSL_TFC_An_AE,	"AE" }, \
43*4882a593Smuzhiyun 	{ CXL_PSL_TFC_An_R,	"R" }
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun #define LLCMD_NAMES \
46*4882a593Smuzhiyun 	{ CXL_SPA_SW_CMD_TERMINATE,	"TERMINATE" }, \
47*4882a593Smuzhiyun 	{ CXL_SPA_SW_CMD_REMOVE,	"REMOVE" }, \
48*4882a593Smuzhiyun 	{ CXL_SPA_SW_CMD_SUSPEND,	"SUSPEND" }, \
49*4882a593Smuzhiyun 	{ CXL_SPA_SW_CMD_RESUME,	"RESUME" }, \
50*4882a593Smuzhiyun 	{ CXL_SPA_SW_CMD_ADD,		"ADD" }, \
51*4882a593Smuzhiyun 	{ CXL_SPA_SW_CMD_UPDATE,	"UPDATE" }
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun #define AFU_COMMANDS \
54*4882a593Smuzhiyun 	{ 0,			"DISABLE" }, \
55*4882a593Smuzhiyun 	{ CXL_AFU_Cntl_An_E,	"ENABLE" }, \
56*4882a593Smuzhiyun 	{ CXL_AFU_Cntl_An_RA,	"RESET" }
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun #define PSL_COMMANDS \
59*4882a593Smuzhiyun 	{ CXL_PSL_SCNTL_An_Pc,	"PURGE" }, \
60*4882a593Smuzhiyun 	{ CXL_PSL_SCNTL_An_Sc,	"SUSPEND" }
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun DECLARE_EVENT_CLASS(cxl_pe_class,
64*4882a593Smuzhiyun 	TP_PROTO(struct cxl_context *ctx),
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun 	TP_ARGS(ctx),
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun 	TP_STRUCT__entry(
69*4882a593Smuzhiyun 		__field(u8, card)
70*4882a593Smuzhiyun 		__field(u8, afu)
71*4882a593Smuzhiyun 		__field(u16, pe)
72*4882a593Smuzhiyun 	),
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun 	TP_fast_assign(
75*4882a593Smuzhiyun 		__entry->card = ctx->afu->adapter->adapter_num;
76*4882a593Smuzhiyun 		__entry->afu = ctx->afu->slice;
77*4882a593Smuzhiyun 		__entry->pe = ctx->pe;
78*4882a593Smuzhiyun 	),
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun 	TP_printk("afu%i.%i pe=%i",
81*4882a593Smuzhiyun 		__entry->card,
82*4882a593Smuzhiyun 		__entry->afu,
83*4882a593Smuzhiyun 		__entry->pe
84*4882a593Smuzhiyun 	)
85*4882a593Smuzhiyun );
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun TRACE_EVENT(cxl_attach,
89*4882a593Smuzhiyun 	TP_PROTO(struct cxl_context *ctx, u64 wed, s16 num_interrupts, u64 amr),
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun 	TP_ARGS(ctx, wed, num_interrupts, amr),
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun 	TP_STRUCT__entry(
94*4882a593Smuzhiyun 		__field(u8, card)
95*4882a593Smuzhiyun 		__field(u8, afu)
96*4882a593Smuzhiyun 		__field(u16, pe)
97*4882a593Smuzhiyun 		__field(pid_t, pid)
98*4882a593Smuzhiyun 		__field(u64, wed)
99*4882a593Smuzhiyun 		__field(u64, amr)
100*4882a593Smuzhiyun 		__field(s16, num_interrupts)
101*4882a593Smuzhiyun 	),
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun 	TP_fast_assign(
104*4882a593Smuzhiyun 		__entry->card = ctx->afu->adapter->adapter_num;
105*4882a593Smuzhiyun 		__entry->afu = ctx->afu->slice;
106*4882a593Smuzhiyun 		__entry->pe = ctx->pe;
107*4882a593Smuzhiyun 		__entry->pid = pid_nr(ctx->pid);
108*4882a593Smuzhiyun 		__entry->wed = wed;
109*4882a593Smuzhiyun 		__entry->amr = amr;
110*4882a593Smuzhiyun 		__entry->num_interrupts = num_interrupts;
111*4882a593Smuzhiyun 	),
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun 	TP_printk("afu%i.%i pid=%i pe=%i wed=0x%016llx irqs=%i amr=0x%llx",
114*4882a593Smuzhiyun 		__entry->card,
115*4882a593Smuzhiyun 		__entry->afu,
116*4882a593Smuzhiyun 		__entry->pid,
117*4882a593Smuzhiyun 		__entry->pe,
118*4882a593Smuzhiyun 		__entry->wed,
119*4882a593Smuzhiyun 		__entry->num_interrupts,
120*4882a593Smuzhiyun 		__entry->amr
121*4882a593Smuzhiyun 	)
122*4882a593Smuzhiyun );
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun DEFINE_EVENT(cxl_pe_class, cxl_detach,
125*4882a593Smuzhiyun 	TP_PROTO(struct cxl_context *ctx),
126*4882a593Smuzhiyun 	TP_ARGS(ctx)
127*4882a593Smuzhiyun );
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun TRACE_EVENT(cxl_afu_irq,
130*4882a593Smuzhiyun 	TP_PROTO(struct cxl_context *ctx, int afu_irq, int virq, irq_hw_number_t hwirq),
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun 	TP_ARGS(ctx, afu_irq, virq, hwirq),
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun 	TP_STRUCT__entry(
135*4882a593Smuzhiyun 		__field(u8, card)
136*4882a593Smuzhiyun 		__field(u8, afu)
137*4882a593Smuzhiyun 		__field(u16, pe)
138*4882a593Smuzhiyun 		__field(u16, afu_irq)
139*4882a593Smuzhiyun 		__field(int, virq)
140*4882a593Smuzhiyun 		__field(irq_hw_number_t, hwirq)
141*4882a593Smuzhiyun 	),
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun 	TP_fast_assign(
144*4882a593Smuzhiyun 		__entry->card = ctx->afu->adapter->adapter_num;
145*4882a593Smuzhiyun 		__entry->afu = ctx->afu->slice;
146*4882a593Smuzhiyun 		__entry->pe = ctx->pe;
147*4882a593Smuzhiyun 		__entry->afu_irq = afu_irq;
148*4882a593Smuzhiyun 		__entry->virq = virq;
149*4882a593Smuzhiyun 		__entry->hwirq = hwirq;
150*4882a593Smuzhiyun 	),
151*4882a593Smuzhiyun 
152*4882a593Smuzhiyun 	TP_printk("afu%i.%i pe=%i afu_irq=%i virq=%i hwirq=0x%lx",
153*4882a593Smuzhiyun 		__entry->card,
154*4882a593Smuzhiyun 		__entry->afu,
155*4882a593Smuzhiyun 		__entry->pe,
156*4882a593Smuzhiyun 		__entry->afu_irq,
157*4882a593Smuzhiyun 		__entry->virq,
158*4882a593Smuzhiyun 		__entry->hwirq
159*4882a593Smuzhiyun 	)
160*4882a593Smuzhiyun );
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun TRACE_EVENT(cxl_psl9_irq,
163*4882a593Smuzhiyun 	TP_PROTO(struct cxl_context *ctx, int irq, u64 dsisr, u64 dar),
164*4882a593Smuzhiyun 
165*4882a593Smuzhiyun 	TP_ARGS(ctx, irq, dsisr, dar),
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun 	TP_STRUCT__entry(
168*4882a593Smuzhiyun 		__field(u8, card)
169*4882a593Smuzhiyun 		__field(u8, afu)
170*4882a593Smuzhiyun 		__field(u16, pe)
171*4882a593Smuzhiyun 		__field(int, irq)
172*4882a593Smuzhiyun 		__field(u64, dsisr)
173*4882a593Smuzhiyun 		__field(u64, dar)
174*4882a593Smuzhiyun 	),
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun 	TP_fast_assign(
177*4882a593Smuzhiyun 		__entry->card = ctx->afu->adapter->adapter_num;
178*4882a593Smuzhiyun 		__entry->afu = ctx->afu->slice;
179*4882a593Smuzhiyun 		__entry->pe = ctx->pe;
180*4882a593Smuzhiyun 		__entry->irq = irq;
181*4882a593Smuzhiyun 		__entry->dsisr = dsisr;
182*4882a593Smuzhiyun 		__entry->dar = dar;
183*4882a593Smuzhiyun 	),
184*4882a593Smuzhiyun 
185*4882a593Smuzhiyun 	TP_printk("afu%i.%i pe=%i irq=%i dsisr=0x%016llx dsisr=%s dar=0x%016llx",
186*4882a593Smuzhiyun 		__entry->card,
187*4882a593Smuzhiyun 		__entry->afu,
188*4882a593Smuzhiyun 		__entry->pe,
189*4882a593Smuzhiyun 		__entry->irq,
190*4882a593Smuzhiyun 		__entry->dsisr,
191*4882a593Smuzhiyun 		dsisr_psl9_flags(__entry->dsisr),
192*4882a593Smuzhiyun 		__entry->dar
193*4882a593Smuzhiyun 	)
194*4882a593Smuzhiyun );
195*4882a593Smuzhiyun 
196*4882a593Smuzhiyun TRACE_EVENT(cxl_psl_irq,
197*4882a593Smuzhiyun 	TP_PROTO(struct cxl_context *ctx, int irq, u64 dsisr, u64 dar),
198*4882a593Smuzhiyun 
199*4882a593Smuzhiyun 	TP_ARGS(ctx, irq, dsisr, dar),
200*4882a593Smuzhiyun 
201*4882a593Smuzhiyun 	TP_STRUCT__entry(
202*4882a593Smuzhiyun 		__field(u8, card)
203*4882a593Smuzhiyun 		__field(u8, afu)
204*4882a593Smuzhiyun 		__field(u16, pe)
205*4882a593Smuzhiyun 		__field(int, irq)
206*4882a593Smuzhiyun 		__field(u64, dsisr)
207*4882a593Smuzhiyun 		__field(u64, dar)
208*4882a593Smuzhiyun 	),
209*4882a593Smuzhiyun 
210*4882a593Smuzhiyun 	TP_fast_assign(
211*4882a593Smuzhiyun 		__entry->card = ctx->afu->adapter->adapter_num;
212*4882a593Smuzhiyun 		__entry->afu = ctx->afu->slice;
213*4882a593Smuzhiyun 		__entry->pe = ctx->pe;
214*4882a593Smuzhiyun 		__entry->irq = irq;
215*4882a593Smuzhiyun 		__entry->dsisr = dsisr;
216*4882a593Smuzhiyun 		__entry->dar = dar;
217*4882a593Smuzhiyun 	),
218*4882a593Smuzhiyun 
219*4882a593Smuzhiyun 	TP_printk("afu%i.%i pe=%i irq=%i dsisr=%s dar=0x%016llx",
220*4882a593Smuzhiyun 		__entry->card,
221*4882a593Smuzhiyun 		__entry->afu,
222*4882a593Smuzhiyun 		__entry->pe,
223*4882a593Smuzhiyun 		__entry->irq,
224*4882a593Smuzhiyun 		__print_flags(__entry->dsisr, "|", DSISR_FLAGS),
225*4882a593Smuzhiyun 		__entry->dar
226*4882a593Smuzhiyun 	)
227*4882a593Smuzhiyun );
228*4882a593Smuzhiyun 
229*4882a593Smuzhiyun TRACE_EVENT(cxl_psl_irq_ack,
230*4882a593Smuzhiyun 	TP_PROTO(struct cxl_context *ctx, u64 tfc),
231*4882a593Smuzhiyun 
232*4882a593Smuzhiyun 	TP_ARGS(ctx, tfc),
233*4882a593Smuzhiyun 
234*4882a593Smuzhiyun 	TP_STRUCT__entry(
235*4882a593Smuzhiyun 		__field(u8, card)
236*4882a593Smuzhiyun 		__field(u8, afu)
237*4882a593Smuzhiyun 		__field(u16, pe)
238*4882a593Smuzhiyun 		__field(u64, tfc)
239*4882a593Smuzhiyun 	),
240*4882a593Smuzhiyun 
241*4882a593Smuzhiyun 	TP_fast_assign(
242*4882a593Smuzhiyun 		__entry->card = ctx->afu->adapter->adapter_num;
243*4882a593Smuzhiyun 		__entry->afu = ctx->afu->slice;
244*4882a593Smuzhiyun 		__entry->pe = ctx->pe;
245*4882a593Smuzhiyun 		__entry->tfc = tfc;
246*4882a593Smuzhiyun 	),
247*4882a593Smuzhiyun 
248*4882a593Smuzhiyun 	TP_printk("afu%i.%i pe=%i tfc=%s",
249*4882a593Smuzhiyun 		__entry->card,
250*4882a593Smuzhiyun 		__entry->afu,
251*4882a593Smuzhiyun 		__entry->pe,
252*4882a593Smuzhiyun 		__print_flags(__entry->tfc, "|", TFC_FLAGS)
253*4882a593Smuzhiyun 	)
254*4882a593Smuzhiyun );
255*4882a593Smuzhiyun 
256*4882a593Smuzhiyun TRACE_EVENT(cxl_ste_miss,
257*4882a593Smuzhiyun 	TP_PROTO(struct cxl_context *ctx, u64 dar),
258*4882a593Smuzhiyun 
259*4882a593Smuzhiyun 	TP_ARGS(ctx, dar),
260*4882a593Smuzhiyun 
261*4882a593Smuzhiyun 	TP_STRUCT__entry(
262*4882a593Smuzhiyun 		__field(u8, card)
263*4882a593Smuzhiyun 		__field(u8, afu)
264*4882a593Smuzhiyun 		__field(u16, pe)
265*4882a593Smuzhiyun 		__field(u64, dar)
266*4882a593Smuzhiyun 	),
267*4882a593Smuzhiyun 
268*4882a593Smuzhiyun 	TP_fast_assign(
269*4882a593Smuzhiyun 		__entry->card = ctx->afu->adapter->adapter_num;
270*4882a593Smuzhiyun 		__entry->afu = ctx->afu->slice;
271*4882a593Smuzhiyun 		__entry->pe = ctx->pe;
272*4882a593Smuzhiyun 		__entry->dar = dar;
273*4882a593Smuzhiyun 	),
274*4882a593Smuzhiyun 
275*4882a593Smuzhiyun 	TP_printk("afu%i.%i pe=%i dar=0x%016llx",
276*4882a593Smuzhiyun 		__entry->card,
277*4882a593Smuzhiyun 		__entry->afu,
278*4882a593Smuzhiyun 		__entry->pe,
279*4882a593Smuzhiyun 		__entry->dar
280*4882a593Smuzhiyun 	)
281*4882a593Smuzhiyun );
282*4882a593Smuzhiyun 
283*4882a593Smuzhiyun TRACE_EVENT(cxl_ste_write,
284*4882a593Smuzhiyun 	TP_PROTO(struct cxl_context *ctx, unsigned int idx, u64 e, u64 v),
285*4882a593Smuzhiyun 
286*4882a593Smuzhiyun 	TP_ARGS(ctx, idx, e, v),
287*4882a593Smuzhiyun 
288*4882a593Smuzhiyun 	TP_STRUCT__entry(
289*4882a593Smuzhiyun 		__field(u8, card)
290*4882a593Smuzhiyun 		__field(u8, afu)
291*4882a593Smuzhiyun 		__field(u16, pe)
292*4882a593Smuzhiyun 		__field(unsigned int, idx)
293*4882a593Smuzhiyun 		__field(u64, e)
294*4882a593Smuzhiyun 		__field(u64, v)
295*4882a593Smuzhiyun 	),
296*4882a593Smuzhiyun 
297*4882a593Smuzhiyun 	TP_fast_assign(
298*4882a593Smuzhiyun 		__entry->card = ctx->afu->adapter->adapter_num;
299*4882a593Smuzhiyun 		__entry->afu = ctx->afu->slice;
300*4882a593Smuzhiyun 		__entry->pe = ctx->pe;
301*4882a593Smuzhiyun 		__entry->idx = idx;
302*4882a593Smuzhiyun 		__entry->e = e;
303*4882a593Smuzhiyun 		__entry->v = v;
304*4882a593Smuzhiyun 	),
305*4882a593Smuzhiyun 
306*4882a593Smuzhiyun 	TP_printk("afu%i.%i pe=%i SSTE[%i] E=0x%016llx V=0x%016llx",
307*4882a593Smuzhiyun 		__entry->card,
308*4882a593Smuzhiyun 		__entry->afu,
309*4882a593Smuzhiyun 		__entry->pe,
310*4882a593Smuzhiyun 		__entry->idx,
311*4882a593Smuzhiyun 		__entry->e,
312*4882a593Smuzhiyun 		__entry->v
313*4882a593Smuzhiyun 	)
314*4882a593Smuzhiyun );
315*4882a593Smuzhiyun 
316*4882a593Smuzhiyun TRACE_EVENT(cxl_pte_miss,
317*4882a593Smuzhiyun 	TP_PROTO(struct cxl_context *ctx, u64 dsisr, u64 dar),
318*4882a593Smuzhiyun 
319*4882a593Smuzhiyun 	TP_ARGS(ctx, dsisr, dar),
320*4882a593Smuzhiyun 
321*4882a593Smuzhiyun 	TP_STRUCT__entry(
322*4882a593Smuzhiyun 		__field(u8, card)
323*4882a593Smuzhiyun 		__field(u8, afu)
324*4882a593Smuzhiyun 		__field(u16, pe)
325*4882a593Smuzhiyun 		__field(u64, dsisr)
326*4882a593Smuzhiyun 		__field(u64, dar)
327*4882a593Smuzhiyun 	),
328*4882a593Smuzhiyun 
329*4882a593Smuzhiyun 	TP_fast_assign(
330*4882a593Smuzhiyun 		__entry->card = ctx->afu->adapter->adapter_num;
331*4882a593Smuzhiyun 		__entry->afu = ctx->afu->slice;
332*4882a593Smuzhiyun 		__entry->pe = ctx->pe;
333*4882a593Smuzhiyun 		__entry->dsisr = dsisr;
334*4882a593Smuzhiyun 		__entry->dar = dar;
335*4882a593Smuzhiyun 	),
336*4882a593Smuzhiyun 
337*4882a593Smuzhiyun 	TP_printk("afu%i.%i pe=%i dsisr=%s dar=0x%016llx",
338*4882a593Smuzhiyun 		__entry->card,
339*4882a593Smuzhiyun 		__entry->afu,
340*4882a593Smuzhiyun 		__entry->pe,
341*4882a593Smuzhiyun 		__print_flags(__entry->dsisr, "|", DSISR_FLAGS),
342*4882a593Smuzhiyun 		__entry->dar
343*4882a593Smuzhiyun 	)
344*4882a593Smuzhiyun );
345*4882a593Smuzhiyun 
346*4882a593Smuzhiyun TRACE_EVENT(cxl_llcmd,
347*4882a593Smuzhiyun 	TP_PROTO(struct cxl_context *ctx, u64 cmd),
348*4882a593Smuzhiyun 
349*4882a593Smuzhiyun 	TP_ARGS(ctx, cmd),
350*4882a593Smuzhiyun 
351*4882a593Smuzhiyun 	TP_STRUCT__entry(
352*4882a593Smuzhiyun 		__field(u8, card)
353*4882a593Smuzhiyun 		__field(u8, afu)
354*4882a593Smuzhiyun 		__field(u16, pe)
355*4882a593Smuzhiyun 		__field(u64, cmd)
356*4882a593Smuzhiyun 	),
357*4882a593Smuzhiyun 
358*4882a593Smuzhiyun 	TP_fast_assign(
359*4882a593Smuzhiyun 		__entry->card = ctx->afu->adapter->adapter_num;
360*4882a593Smuzhiyun 		__entry->afu = ctx->afu->slice;
361*4882a593Smuzhiyun 		__entry->pe = ctx->pe;
362*4882a593Smuzhiyun 		__entry->cmd = cmd;
363*4882a593Smuzhiyun 	),
364*4882a593Smuzhiyun 
365*4882a593Smuzhiyun 	TP_printk("afu%i.%i pe=%i cmd=%s",
366*4882a593Smuzhiyun 		__entry->card,
367*4882a593Smuzhiyun 		__entry->afu,
368*4882a593Smuzhiyun 		__entry->pe,
369*4882a593Smuzhiyun 		__print_symbolic_u64(__entry->cmd, LLCMD_NAMES)
370*4882a593Smuzhiyun 	)
371*4882a593Smuzhiyun );
372*4882a593Smuzhiyun 
373*4882a593Smuzhiyun TRACE_EVENT(cxl_llcmd_done,
374*4882a593Smuzhiyun 	TP_PROTO(struct cxl_context *ctx, u64 cmd, int rc),
375*4882a593Smuzhiyun 
376*4882a593Smuzhiyun 	TP_ARGS(ctx, cmd, rc),
377*4882a593Smuzhiyun 
378*4882a593Smuzhiyun 	TP_STRUCT__entry(
379*4882a593Smuzhiyun 		__field(u8, card)
380*4882a593Smuzhiyun 		__field(u8, afu)
381*4882a593Smuzhiyun 		__field(u16, pe)
382*4882a593Smuzhiyun 		__field(u64, cmd)
383*4882a593Smuzhiyun 		__field(int, rc)
384*4882a593Smuzhiyun 	),
385*4882a593Smuzhiyun 
386*4882a593Smuzhiyun 	TP_fast_assign(
387*4882a593Smuzhiyun 		__entry->card = ctx->afu->adapter->adapter_num;
388*4882a593Smuzhiyun 		__entry->afu = ctx->afu->slice;
389*4882a593Smuzhiyun 		__entry->pe = ctx->pe;
390*4882a593Smuzhiyun 		__entry->rc = rc;
391*4882a593Smuzhiyun 		__entry->cmd = cmd;
392*4882a593Smuzhiyun 	),
393*4882a593Smuzhiyun 
394*4882a593Smuzhiyun 	TP_printk("afu%i.%i pe=%i cmd=%s rc=%i",
395*4882a593Smuzhiyun 		__entry->card,
396*4882a593Smuzhiyun 		__entry->afu,
397*4882a593Smuzhiyun 		__entry->pe,
398*4882a593Smuzhiyun 		__print_symbolic_u64(__entry->cmd, LLCMD_NAMES),
399*4882a593Smuzhiyun 		__entry->rc
400*4882a593Smuzhiyun 	)
401*4882a593Smuzhiyun );
402*4882a593Smuzhiyun 
403*4882a593Smuzhiyun DECLARE_EVENT_CLASS(cxl_afu_psl_ctrl,
404*4882a593Smuzhiyun 	TP_PROTO(struct cxl_afu *afu, u64 cmd),
405*4882a593Smuzhiyun 
406*4882a593Smuzhiyun 	TP_ARGS(afu, cmd),
407*4882a593Smuzhiyun 
408*4882a593Smuzhiyun 	TP_STRUCT__entry(
409*4882a593Smuzhiyun 		__field(u8, card)
410*4882a593Smuzhiyun 		__field(u8, afu)
411*4882a593Smuzhiyun 		__field(u64, cmd)
412*4882a593Smuzhiyun 	),
413*4882a593Smuzhiyun 
414*4882a593Smuzhiyun 	TP_fast_assign(
415*4882a593Smuzhiyun 		__entry->card = afu->adapter->adapter_num;
416*4882a593Smuzhiyun 		__entry->afu = afu->slice;
417*4882a593Smuzhiyun 		__entry->cmd = cmd;
418*4882a593Smuzhiyun 	),
419*4882a593Smuzhiyun 
420*4882a593Smuzhiyun 	TP_printk("afu%i.%i cmd=%s",
421*4882a593Smuzhiyun 		__entry->card,
422*4882a593Smuzhiyun 		__entry->afu,
423*4882a593Smuzhiyun 		__print_symbolic_u64(__entry->cmd, AFU_COMMANDS)
424*4882a593Smuzhiyun 	)
425*4882a593Smuzhiyun );
426*4882a593Smuzhiyun 
427*4882a593Smuzhiyun DECLARE_EVENT_CLASS(cxl_afu_psl_ctrl_done,
428*4882a593Smuzhiyun 	TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc),
429*4882a593Smuzhiyun 
430*4882a593Smuzhiyun 	TP_ARGS(afu, cmd, rc),
431*4882a593Smuzhiyun 
432*4882a593Smuzhiyun 	TP_STRUCT__entry(
433*4882a593Smuzhiyun 		__field(u8, card)
434*4882a593Smuzhiyun 		__field(u8, afu)
435*4882a593Smuzhiyun 		__field(u64, cmd)
436*4882a593Smuzhiyun 		__field(int, rc)
437*4882a593Smuzhiyun 	),
438*4882a593Smuzhiyun 
439*4882a593Smuzhiyun 	TP_fast_assign(
440*4882a593Smuzhiyun 		__entry->card = afu->adapter->adapter_num;
441*4882a593Smuzhiyun 		__entry->afu = afu->slice;
442*4882a593Smuzhiyun 		__entry->rc = rc;
443*4882a593Smuzhiyun 		__entry->cmd = cmd;
444*4882a593Smuzhiyun 	),
445*4882a593Smuzhiyun 
446*4882a593Smuzhiyun 	TP_printk("afu%i.%i cmd=%s rc=%i",
447*4882a593Smuzhiyun 		__entry->card,
448*4882a593Smuzhiyun 		__entry->afu,
449*4882a593Smuzhiyun 		__print_symbolic_u64(__entry->cmd, AFU_COMMANDS),
450*4882a593Smuzhiyun 		__entry->rc
451*4882a593Smuzhiyun 	)
452*4882a593Smuzhiyun );
453*4882a593Smuzhiyun 
454*4882a593Smuzhiyun DEFINE_EVENT(cxl_afu_psl_ctrl, cxl_afu_ctrl,
455*4882a593Smuzhiyun 	TP_PROTO(struct cxl_afu *afu, u64 cmd),
456*4882a593Smuzhiyun 	TP_ARGS(afu, cmd)
457*4882a593Smuzhiyun );
458*4882a593Smuzhiyun 
459*4882a593Smuzhiyun DEFINE_EVENT(cxl_afu_psl_ctrl_done, cxl_afu_ctrl_done,
460*4882a593Smuzhiyun 	TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc),
461*4882a593Smuzhiyun 	TP_ARGS(afu, cmd, rc)
462*4882a593Smuzhiyun );
463*4882a593Smuzhiyun 
464*4882a593Smuzhiyun DEFINE_EVENT_PRINT(cxl_afu_psl_ctrl, cxl_psl_ctrl,
465*4882a593Smuzhiyun 	TP_PROTO(struct cxl_afu *afu, u64 cmd),
466*4882a593Smuzhiyun 	TP_ARGS(afu, cmd),
467*4882a593Smuzhiyun 
468*4882a593Smuzhiyun 	TP_printk("psl%i.%i cmd=%s",
469*4882a593Smuzhiyun 		__entry->card,
470*4882a593Smuzhiyun 		__entry->afu,
471*4882a593Smuzhiyun 		__print_symbolic_u64(__entry->cmd, PSL_COMMANDS)
472*4882a593Smuzhiyun 	)
473*4882a593Smuzhiyun );
474*4882a593Smuzhiyun 
475*4882a593Smuzhiyun DEFINE_EVENT_PRINT(cxl_afu_psl_ctrl_done, cxl_psl_ctrl_done,
476*4882a593Smuzhiyun 	TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc),
477*4882a593Smuzhiyun 	TP_ARGS(afu, cmd, rc),
478*4882a593Smuzhiyun 
479*4882a593Smuzhiyun 	TP_printk("psl%i.%i cmd=%s rc=%i",
480*4882a593Smuzhiyun 		__entry->card,
481*4882a593Smuzhiyun 		__entry->afu,
482*4882a593Smuzhiyun 		__print_symbolic_u64(__entry->cmd, PSL_COMMANDS),
483*4882a593Smuzhiyun 		__entry->rc
484*4882a593Smuzhiyun 	)
485*4882a593Smuzhiyun );
486*4882a593Smuzhiyun 
487*4882a593Smuzhiyun DEFINE_EVENT(cxl_pe_class, cxl_slbia,
488*4882a593Smuzhiyun 	TP_PROTO(struct cxl_context *ctx),
489*4882a593Smuzhiyun 	TP_ARGS(ctx)
490*4882a593Smuzhiyun );
491*4882a593Smuzhiyun 
492*4882a593Smuzhiyun TRACE_EVENT(cxl_hcall,
493*4882a593Smuzhiyun 	TP_PROTO(u64 unit_address, u64 process_token, long rc),
494*4882a593Smuzhiyun 
495*4882a593Smuzhiyun 	TP_ARGS(unit_address, process_token, rc),
496*4882a593Smuzhiyun 
497*4882a593Smuzhiyun 	TP_STRUCT__entry(
498*4882a593Smuzhiyun 		__field(u64, unit_address)
499*4882a593Smuzhiyun 		__field(u64, process_token)
500*4882a593Smuzhiyun 		__field(long, rc)
501*4882a593Smuzhiyun 	),
502*4882a593Smuzhiyun 
503*4882a593Smuzhiyun 	TP_fast_assign(
504*4882a593Smuzhiyun 		__entry->unit_address = unit_address;
505*4882a593Smuzhiyun 		__entry->process_token = process_token;
506*4882a593Smuzhiyun 		__entry->rc = rc;
507*4882a593Smuzhiyun 	),
508*4882a593Smuzhiyun 
509*4882a593Smuzhiyun 	TP_printk("unit_address=0x%016llx process_token=0x%016llx rc=%li",
510*4882a593Smuzhiyun 		__entry->unit_address,
511*4882a593Smuzhiyun 		__entry->process_token,
512*4882a593Smuzhiyun 		__entry->rc
513*4882a593Smuzhiyun 	)
514*4882a593Smuzhiyun );
515*4882a593Smuzhiyun 
516*4882a593Smuzhiyun TRACE_EVENT(cxl_hcall_control,
517*4882a593Smuzhiyun 	TP_PROTO(u64 unit_address, char *fct, u64 p1, u64 p2, u64 p3,
518*4882a593Smuzhiyun 	u64 p4, unsigned long r4, long rc),
519*4882a593Smuzhiyun 
520*4882a593Smuzhiyun 	TP_ARGS(unit_address, fct, p1, p2, p3, p4, r4, rc),
521*4882a593Smuzhiyun 
522*4882a593Smuzhiyun 	TP_STRUCT__entry(
523*4882a593Smuzhiyun 		__field(u64, unit_address)
524*4882a593Smuzhiyun 		__field(char *, fct)
525*4882a593Smuzhiyun 		__field(u64, p1)
526*4882a593Smuzhiyun 		__field(u64, p2)
527*4882a593Smuzhiyun 		__field(u64, p3)
528*4882a593Smuzhiyun 		__field(u64, p4)
529*4882a593Smuzhiyun 		__field(unsigned long, r4)
530*4882a593Smuzhiyun 		__field(long, rc)
531*4882a593Smuzhiyun 	),
532*4882a593Smuzhiyun 
533*4882a593Smuzhiyun 	TP_fast_assign(
534*4882a593Smuzhiyun 		__entry->unit_address = unit_address;
535*4882a593Smuzhiyun 		__entry->fct = fct;
536*4882a593Smuzhiyun 		__entry->p1 = p1;
537*4882a593Smuzhiyun 		__entry->p2 = p2;
538*4882a593Smuzhiyun 		__entry->p3 = p3;
539*4882a593Smuzhiyun 		__entry->p4 = p4;
540*4882a593Smuzhiyun 		__entry->r4 = r4;
541*4882a593Smuzhiyun 		__entry->rc = rc;
542*4882a593Smuzhiyun 	),
543*4882a593Smuzhiyun 
544*4882a593Smuzhiyun 	TP_printk("unit_address=%#.16llx %s(%#llx, %#llx, %#llx, %#llx, R4: %#lx)): %li",
545*4882a593Smuzhiyun 		__entry->unit_address,
546*4882a593Smuzhiyun 		__entry->fct,
547*4882a593Smuzhiyun 		__entry->p1,
548*4882a593Smuzhiyun 		__entry->p2,
549*4882a593Smuzhiyun 		__entry->p3,
550*4882a593Smuzhiyun 		__entry->p4,
551*4882a593Smuzhiyun 		__entry->r4,
552*4882a593Smuzhiyun 		__entry->rc
553*4882a593Smuzhiyun 	)
554*4882a593Smuzhiyun );
555*4882a593Smuzhiyun 
556*4882a593Smuzhiyun TRACE_EVENT(cxl_hcall_attach,
557*4882a593Smuzhiyun 	TP_PROTO(u64 unit_address, u64 phys_addr, unsigned long process_token,
558*4882a593Smuzhiyun 		unsigned long mmio_addr, unsigned long mmio_size, long rc),
559*4882a593Smuzhiyun 
560*4882a593Smuzhiyun 	TP_ARGS(unit_address, phys_addr, process_token,
561*4882a593Smuzhiyun 		mmio_addr, mmio_size, rc),
562*4882a593Smuzhiyun 
563*4882a593Smuzhiyun 	TP_STRUCT__entry(
564*4882a593Smuzhiyun 		__field(u64, unit_address)
565*4882a593Smuzhiyun 		__field(u64, phys_addr)
566*4882a593Smuzhiyun 		__field(unsigned long, process_token)
567*4882a593Smuzhiyun 		__field(unsigned long, mmio_addr)
568*4882a593Smuzhiyun 		__field(unsigned long, mmio_size)
569*4882a593Smuzhiyun 		__field(long, rc)
570*4882a593Smuzhiyun 	),
571*4882a593Smuzhiyun 
572*4882a593Smuzhiyun 	TP_fast_assign(
573*4882a593Smuzhiyun 		__entry->unit_address = unit_address;
574*4882a593Smuzhiyun 		__entry->phys_addr = phys_addr;
575*4882a593Smuzhiyun 		__entry->process_token = process_token;
576*4882a593Smuzhiyun 		__entry->mmio_addr = mmio_addr;
577*4882a593Smuzhiyun 		__entry->mmio_size = mmio_size;
578*4882a593Smuzhiyun 		__entry->rc = rc;
579*4882a593Smuzhiyun 	),
580*4882a593Smuzhiyun 
581*4882a593Smuzhiyun 	TP_printk("unit_address=0x%016llx phys_addr=0x%016llx "
582*4882a593Smuzhiyun 		"token=0x%.8lx mmio_addr=0x%lx mmio_size=0x%lx rc=%li",
583*4882a593Smuzhiyun 		__entry->unit_address,
584*4882a593Smuzhiyun 		__entry->phys_addr,
585*4882a593Smuzhiyun 		__entry->process_token,
586*4882a593Smuzhiyun 		__entry->mmio_addr,
587*4882a593Smuzhiyun 		__entry->mmio_size,
588*4882a593Smuzhiyun 		__entry->rc
589*4882a593Smuzhiyun 	)
590*4882a593Smuzhiyun );
591*4882a593Smuzhiyun 
592*4882a593Smuzhiyun DEFINE_EVENT(cxl_hcall, cxl_hcall_detach,
593*4882a593Smuzhiyun 	TP_PROTO(u64 unit_address, u64 process_token, long rc),
594*4882a593Smuzhiyun 	TP_ARGS(unit_address, process_token, rc)
595*4882a593Smuzhiyun );
596*4882a593Smuzhiyun 
597*4882a593Smuzhiyun DEFINE_EVENT(cxl_hcall_control, cxl_hcall_control_function,
598*4882a593Smuzhiyun 	TP_PROTO(u64 unit_address, char *fct, u64 p1, u64 p2, u64 p3,
599*4882a593Smuzhiyun 	u64 p4, unsigned long r4, long rc),
600*4882a593Smuzhiyun 	TP_ARGS(unit_address, fct, p1, p2, p3, p4, r4, rc)
601*4882a593Smuzhiyun );
602*4882a593Smuzhiyun 
603*4882a593Smuzhiyun DEFINE_EVENT(cxl_hcall, cxl_hcall_collect_int_info,
604*4882a593Smuzhiyun 	TP_PROTO(u64 unit_address, u64 process_token, long rc),
605*4882a593Smuzhiyun 	TP_ARGS(unit_address, process_token, rc)
606*4882a593Smuzhiyun );
607*4882a593Smuzhiyun 
608*4882a593Smuzhiyun TRACE_EVENT(cxl_hcall_control_faults,
609*4882a593Smuzhiyun 	TP_PROTO(u64 unit_address, u64 process_token,
610*4882a593Smuzhiyun 		u64 control_mask, u64 reset_mask, unsigned long r4,
611*4882a593Smuzhiyun 		long rc),
612*4882a593Smuzhiyun 
613*4882a593Smuzhiyun 	TP_ARGS(unit_address, process_token,
614*4882a593Smuzhiyun 		control_mask, reset_mask, r4, rc),
615*4882a593Smuzhiyun 
616*4882a593Smuzhiyun 	TP_STRUCT__entry(
617*4882a593Smuzhiyun 		__field(u64, unit_address)
618*4882a593Smuzhiyun 		__field(u64, process_token)
619*4882a593Smuzhiyun 		__field(u64, control_mask)
620*4882a593Smuzhiyun 		__field(u64, reset_mask)
621*4882a593Smuzhiyun 		__field(unsigned long, r4)
622*4882a593Smuzhiyun 		__field(long, rc)
623*4882a593Smuzhiyun 	),
624*4882a593Smuzhiyun 
625*4882a593Smuzhiyun 	TP_fast_assign(
626*4882a593Smuzhiyun 		__entry->unit_address = unit_address;
627*4882a593Smuzhiyun 		__entry->process_token = process_token;
628*4882a593Smuzhiyun 		__entry->control_mask = control_mask;
629*4882a593Smuzhiyun 		__entry->reset_mask = reset_mask;
630*4882a593Smuzhiyun 		__entry->r4 = r4;
631*4882a593Smuzhiyun 		__entry->rc = rc;
632*4882a593Smuzhiyun 	),
633*4882a593Smuzhiyun 
634*4882a593Smuzhiyun 	TP_printk("unit_address=0x%016llx process_token=0x%llx "
635*4882a593Smuzhiyun 		"control_mask=%#llx reset_mask=%#llx r4=%#lx rc=%li",
636*4882a593Smuzhiyun 		__entry->unit_address,
637*4882a593Smuzhiyun 		__entry->process_token,
638*4882a593Smuzhiyun 		__entry->control_mask,
639*4882a593Smuzhiyun 		__entry->reset_mask,
640*4882a593Smuzhiyun 		__entry->r4,
641*4882a593Smuzhiyun 		__entry->rc
642*4882a593Smuzhiyun 	)
643*4882a593Smuzhiyun );
644*4882a593Smuzhiyun 
645*4882a593Smuzhiyun DEFINE_EVENT(cxl_hcall_control, cxl_hcall_control_facility,
646*4882a593Smuzhiyun 	TP_PROTO(u64 unit_address, char *fct, u64 p1, u64 p2, u64 p3,
647*4882a593Smuzhiyun 	u64 p4, unsigned long r4, long rc),
648*4882a593Smuzhiyun 	TP_ARGS(unit_address, fct, p1, p2, p3, p4, r4, rc)
649*4882a593Smuzhiyun );
650*4882a593Smuzhiyun 
651*4882a593Smuzhiyun TRACE_EVENT(cxl_hcall_download_facility,
652*4882a593Smuzhiyun 	TP_PROTO(u64 unit_address, char *fct, u64 list_address, u64 num,
653*4882a593Smuzhiyun 	unsigned long r4, long rc),
654*4882a593Smuzhiyun 
655*4882a593Smuzhiyun 	TP_ARGS(unit_address, fct, list_address, num, r4, rc),
656*4882a593Smuzhiyun 
657*4882a593Smuzhiyun 	TP_STRUCT__entry(
658*4882a593Smuzhiyun 		__field(u64, unit_address)
659*4882a593Smuzhiyun 		__field(char *, fct)
660*4882a593Smuzhiyun 		__field(u64, list_address)
661*4882a593Smuzhiyun 		__field(u64, num)
662*4882a593Smuzhiyun 		__field(unsigned long, r4)
663*4882a593Smuzhiyun 		__field(long, rc)
664*4882a593Smuzhiyun 	),
665*4882a593Smuzhiyun 
666*4882a593Smuzhiyun 	TP_fast_assign(
667*4882a593Smuzhiyun 		__entry->unit_address = unit_address;
668*4882a593Smuzhiyun 		__entry->fct = fct;
669*4882a593Smuzhiyun 		__entry->list_address = list_address;
670*4882a593Smuzhiyun 		__entry->num = num;
671*4882a593Smuzhiyun 		__entry->r4 = r4;
672*4882a593Smuzhiyun 		__entry->rc = rc;
673*4882a593Smuzhiyun 	),
674*4882a593Smuzhiyun 
675*4882a593Smuzhiyun 	TP_printk("%#.16llx, %s(%#llx, %#llx), %#lx): %li",
676*4882a593Smuzhiyun 		__entry->unit_address,
677*4882a593Smuzhiyun 		__entry->fct,
678*4882a593Smuzhiyun 		__entry->list_address,
679*4882a593Smuzhiyun 		__entry->num,
680*4882a593Smuzhiyun 		__entry->r4,
681*4882a593Smuzhiyun 		__entry->rc
682*4882a593Smuzhiyun 	)
683*4882a593Smuzhiyun );
684*4882a593Smuzhiyun 
685*4882a593Smuzhiyun #endif /* _CXL_TRACE_H */
686*4882a593Smuzhiyun 
687*4882a593Smuzhiyun /* This part must be outside protection */
688*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH
689*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH .
690*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE trace
691*4882a593Smuzhiyun #include <trace/define_trace.h>
692