Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / misc / cxl / trace.h
1 /*
2  * Copyright 2015 IBM Corp.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version
7  * 2 of the License, or (at your option) any later version.
8  */
9
10 #undef TRACE_SYSTEM
11 #define TRACE_SYSTEM cxl
12
13 #if !defined(_CXL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
14 #define _CXL_TRACE_H
15
16 #include <linux/tracepoint.h>
17
18 #include "cxl.h"
19
20 #define DSISR_FLAGS \
21         { CXL_PSL_DSISR_An_DS,  "DS" }, \
22         { CXL_PSL_DSISR_An_DM,  "DM" }, \
23         { CXL_PSL_DSISR_An_ST,  "ST" }, \
24         { CXL_PSL_DSISR_An_UR,  "UR" }, \
25         { CXL_PSL_DSISR_An_PE,  "PE" }, \
26         { CXL_PSL_DSISR_An_AE,  "AE" }, \
27         { CXL_PSL_DSISR_An_OC,  "OC" }, \
28         { CXL_PSL_DSISR_An_M,   "M" }, \
29         { CXL_PSL_DSISR_An_P,   "P" }, \
30         { CXL_PSL_DSISR_An_A,   "A" }, \
31         { CXL_PSL_DSISR_An_S,   "S" }, \
32         { CXL_PSL_DSISR_An_K,   "K" }
33
34 #define TFC_FLAGS \
35         { CXL_PSL_TFC_An_A,     "A" }, \
36         { CXL_PSL_TFC_An_C,     "C" }, \
37         { CXL_PSL_TFC_An_AE,    "AE" }, \
38         { CXL_PSL_TFC_An_R,     "R" }
39
40 #define LLCMD_NAMES \
41         { CXL_SPA_SW_CMD_TERMINATE,     "TERMINATE" }, \
42         { CXL_SPA_SW_CMD_REMOVE,        "REMOVE" }, \
43         { CXL_SPA_SW_CMD_SUSPEND,       "SUSPEND" }, \
44         { CXL_SPA_SW_CMD_RESUME,        "RESUME" }, \
45         { CXL_SPA_SW_CMD_ADD,           "ADD" }, \
46         { CXL_SPA_SW_CMD_UPDATE,        "UPDATE" }
47
48 #define AFU_COMMANDS \
49         { 0,                    "DISABLE" }, \
50         { CXL_AFU_Cntl_An_E,    "ENABLE" }, \
51         { CXL_AFU_Cntl_An_RA,   "RESET" }
52
53 #define PSL_COMMANDS \
54         { CXL_PSL_SCNTL_An_Pc,  "PURGE" }, \
55         { CXL_PSL_SCNTL_An_Sc,  "SUSPEND" }
56
57
58 DECLARE_EVENT_CLASS(cxl_pe_class,
59         TP_PROTO(struct cxl_context *ctx),
60
61         TP_ARGS(ctx),
62
63         TP_STRUCT__entry(
64                 __field(u8, card)
65                 __field(u8, afu)
66                 __field(u16, pe)
67         ),
68
69         TP_fast_assign(
70                 __entry->card = ctx->afu->adapter->adapter_num;
71                 __entry->afu = ctx->afu->slice;
72                 __entry->pe = ctx->pe;
73         ),
74
75         TP_printk("afu%i.%i pe=%i",
76                 __entry->card,
77                 __entry->afu,
78                 __entry->pe
79         )
80 );
81
82
83 TRACE_EVENT(cxl_attach,
84         TP_PROTO(struct cxl_context *ctx, u64 wed, s16 num_interrupts, u64 amr),
85
86         TP_ARGS(ctx, wed, num_interrupts, amr),
87
88         TP_STRUCT__entry(
89                 __field(u8, card)
90                 __field(u8, afu)
91                 __field(u16, pe)
92                 __field(pid_t, pid)
93                 __field(u64, wed)
94                 __field(u64, amr)
95                 __field(s16, num_interrupts)
96         ),
97
98         TP_fast_assign(
99                 __entry->card = ctx->afu->adapter->adapter_num;
100                 __entry->afu = ctx->afu->slice;
101                 __entry->pe = ctx->pe;
102                 __entry->pid = pid_nr(ctx->pid);
103                 __entry->wed = wed;
104                 __entry->amr = amr;
105                 __entry->num_interrupts = num_interrupts;
106         ),
107
108         TP_printk("afu%i.%i pid=%i pe=%i wed=0x%.16llx irqs=%i amr=0x%llx",
109                 __entry->card,
110                 __entry->afu,
111                 __entry->pid,
112                 __entry->pe,
113                 __entry->wed,
114                 __entry->num_interrupts,
115                 __entry->amr
116         )
117 );
118
119 DEFINE_EVENT(cxl_pe_class, cxl_detach,
120         TP_PROTO(struct cxl_context *ctx),
121         TP_ARGS(ctx)
122 );
123
124 TRACE_EVENT(cxl_afu_irq,
125         TP_PROTO(struct cxl_context *ctx, int afu_irq, int virq, irq_hw_number_t hwirq),
126
127         TP_ARGS(ctx, afu_irq, virq, hwirq),
128
129         TP_STRUCT__entry(
130                 __field(u8, card)
131                 __field(u8, afu)
132                 __field(u16, pe)
133                 __field(u16, afu_irq)
134                 __field(int, virq)
135                 __field(irq_hw_number_t, hwirq)
136         ),
137
138         TP_fast_assign(
139                 __entry->card = ctx->afu->adapter->adapter_num;
140                 __entry->afu = ctx->afu->slice;
141                 __entry->pe = ctx->pe;
142                 __entry->afu_irq = afu_irq;
143                 __entry->virq = virq;
144                 __entry->hwirq = hwirq;
145         ),
146
147         TP_printk("afu%i.%i pe=%i afu_irq=%i virq=%i hwirq=0x%lx",
148                 __entry->card,
149                 __entry->afu,
150                 __entry->pe,
151                 __entry->afu_irq,
152                 __entry->virq,
153                 __entry->hwirq
154         )
155 );
156
157 TRACE_EVENT(cxl_psl_irq,
158         TP_PROTO(struct cxl_context *ctx, int irq, u64 dsisr, u64 dar),
159
160         TP_ARGS(ctx, irq, dsisr, dar),
161
162         TP_STRUCT__entry(
163                 __field(u8, card)
164                 __field(u8, afu)
165                 __field(u16, pe)
166                 __field(int, irq)
167                 __field(u64, dsisr)
168                 __field(u64, dar)
169         ),
170
171         TP_fast_assign(
172                 __entry->card = ctx->afu->adapter->adapter_num;
173                 __entry->afu = ctx->afu->slice;
174                 __entry->pe = ctx->pe;
175                 __entry->irq = irq;
176                 __entry->dsisr = dsisr;
177                 __entry->dar = dar;
178         ),
179
180         TP_printk("afu%i.%i pe=%i irq=%i dsisr=%s dar=0x%.16llx",
181                 __entry->card,
182                 __entry->afu,
183                 __entry->pe,
184                 __entry->irq,
185                 __print_flags(__entry->dsisr, "|", DSISR_FLAGS),
186                 __entry->dar
187         )
188 );
189
190 TRACE_EVENT(cxl_psl_irq_ack,
191         TP_PROTO(struct cxl_context *ctx, u64 tfc),
192
193         TP_ARGS(ctx, tfc),
194
195         TP_STRUCT__entry(
196                 __field(u8, card)
197                 __field(u8, afu)
198                 __field(u16, pe)
199                 __field(u64, tfc)
200         ),
201
202         TP_fast_assign(
203                 __entry->card = ctx->afu->adapter->adapter_num;
204                 __entry->afu = ctx->afu->slice;
205                 __entry->pe = ctx->pe;
206                 __entry->tfc = tfc;
207         ),
208
209         TP_printk("afu%i.%i pe=%i tfc=%s",
210                 __entry->card,
211                 __entry->afu,
212                 __entry->pe,
213                 __print_flags(__entry->tfc, "|", TFC_FLAGS)
214         )
215 );
216
217 TRACE_EVENT(cxl_ste_miss,
218         TP_PROTO(struct cxl_context *ctx, u64 dar),
219
220         TP_ARGS(ctx, dar),
221
222         TP_STRUCT__entry(
223                 __field(u8, card)
224                 __field(u8, afu)
225                 __field(u16, pe)
226                 __field(u64, dar)
227         ),
228
229         TP_fast_assign(
230                 __entry->card = ctx->afu->adapter->adapter_num;
231                 __entry->afu = ctx->afu->slice;
232                 __entry->pe = ctx->pe;
233                 __entry->dar = dar;
234         ),
235
236         TP_printk("afu%i.%i pe=%i dar=0x%.16llx",
237                 __entry->card,
238                 __entry->afu,
239                 __entry->pe,
240                 __entry->dar
241         )
242 );
243
244 TRACE_EVENT(cxl_ste_write,
245         TP_PROTO(struct cxl_context *ctx, unsigned int idx, u64 e, u64 v),
246
247         TP_ARGS(ctx, idx, e, v),
248
249         TP_STRUCT__entry(
250                 __field(u8, card)
251                 __field(u8, afu)
252                 __field(u16, pe)
253                 __field(unsigned int, idx)
254                 __field(u64, e)
255                 __field(u64, v)
256         ),
257
258         TP_fast_assign(
259                 __entry->card = ctx->afu->adapter->adapter_num;
260                 __entry->afu = ctx->afu->slice;
261                 __entry->pe = ctx->pe;
262                 __entry->idx = idx;
263                 __entry->e = e;
264                 __entry->v = v;
265         ),
266
267         TP_printk("afu%i.%i pe=%i SSTE[%i] E=0x%.16llx V=0x%.16llx",
268                 __entry->card,
269                 __entry->afu,
270                 __entry->pe,
271                 __entry->idx,
272                 __entry->e,
273                 __entry->v
274         )
275 );
276
277 TRACE_EVENT(cxl_pte_miss,
278         TP_PROTO(struct cxl_context *ctx, u64 dsisr, u64 dar),
279
280         TP_ARGS(ctx, dsisr, dar),
281
282         TP_STRUCT__entry(
283                 __field(u8, card)
284                 __field(u8, afu)
285                 __field(u16, pe)
286                 __field(u64, dsisr)
287                 __field(u64, dar)
288         ),
289
290         TP_fast_assign(
291                 __entry->card = ctx->afu->adapter->adapter_num;
292                 __entry->afu = ctx->afu->slice;
293                 __entry->pe = ctx->pe;
294                 __entry->dsisr = dsisr;
295                 __entry->dar = dar;
296         ),
297
298         TP_printk("afu%i.%i pe=%i dsisr=%s dar=0x%.16llx",
299                 __entry->card,
300                 __entry->afu,
301                 __entry->pe,
302                 __print_flags(__entry->dsisr, "|", DSISR_FLAGS),
303                 __entry->dar
304         )
305 );
306
307 TRACE_EVENT(cxl_llcmd,
308         TP_PROTO(struct cxl_context *ctx, u64 cmd),
309
310         TP_ARGS(ctx, cmd),
311
312         TP_STRUCT__entry(
313                 __field(u8, card)
314                 __field(u8, afu)
315                 __field(u16, pe)
316                 __field(u64, cmd)
317         ),
318
319         TP_fast_assign(
320                 __entry->card = ctx->afu->adapter->adapter_num;
321                 __entry->afu = ctx->afu->slice;
322                 __entry->pe = ctx->pe;
323                 __entry->cmd = cmd;
324         ),
325
326         TP_printk("afu%i.%i pe=%i cmd=%s",
327                 __entry->card,
328                 __entry->afu,
329                 __entry->pe,
330                 __print_symbolic_u64(__entry->cmd, LLCMD_NAMES)
331         )
332 );
333
334 TRACE_EVENT(cxl_llcmd_done,
335         TP_PROTO(struct cxl_context *ctx, u64 cmd, int rc),
336
337         TP_ARGS(ctx, cmd, rc),
338
339         TP_STRUCT__entry(
340                 __field(u8, card)
341                 __field(u8, afu)
342                 __field(u16, pe)
343                 __field(u64, cmd)
344                 __field(int, rc)
345         ),
346
347         TP_fast_assign(
348                 __entry->card = ctx->afu->adapter->adapter_num;
349                 __entry->afu = ctx->afu->slice;
350                 __entry->pe = ctx->pe;
351                 __entry->rc = rc;
352                 __entry->cmd = cmd;
353         ),
354
355         TP_printk("afu%i.%i pe=%i cmd=%s rc=%i",
356                 __entry->card,
357                 __entry->afu,
358                 __entry->pe,
359                 __print_symbolic_u64(__entry->cmd, LLCMD_NAMES),
360                 __entry->rc
361         )
362 );
363
364 DECLARE_EVENT_CLASS(cxl_afu_psl_ctrl,
365         TP_PROTO(struct cxl_afu *afu, u64 cmd),
366
367         TP_ARGS(afu, cmd),
368
369         TP_STRUCT__entry(
370                 __field(u8, card)
371                 __field(u8, afu)
372                 __field(u64, cmd)
373         ),
374
375         TP_fast_assign(
376                 __entry->card = afu->adapter->adapter_num;
377                 __entry->afu = afu->slice;
378                 __entry->cmd = cmd;
379         ),
380
381         TP_printk("afu%i.%i cmd=%s",
382                 __entry->card,
383                 __entry->afu,
384                 __print_symbolic_u64(__entry->cmd, AFU_COMMANDS)
385         )
386 );
387
388 DECLARE_EVENT_CLASS(cxl_afu_psl_ctrl_done,
389         TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc),
390
391         TP_ARGS(afu, cmd, rc),
392
393         TP_STRUCT__entry(
394                 __field(u8, card)
395                 __field(u8, afu)
396                 __field(u64, cmd)
397                 __field(int, rc)
398         ),
399
400         TP_fast_assign(
401                 __entry->card = afu->adapter->adapter_num;
402                 __entry->afu = afu->slice;
403                 __entry->rc = rc;
404                 __entry->cmd = cmd;
405         ),
406
407         TP_printk("afu%i.%i cmd=%s rc=%i",
408                 __entry->card,
409                 __entry->afu,
410                 __print_symbolic_u64(__entry->cmd, AFU_COMMANDS),
411                 __entry->rc
412         )
413 );
414
415 DEFINE_EVENT(cxl_afu_psl_ctrl, cxl_afu_ctrl,
416         TP_PROTO(struct cxl_afu *afu, u64 cmd),
417         TP_ARGS(afu, cmd)
418 );
419
420 DEFINE_EVENT(cxl_afu_psl_ctrl_done, cxl_afu_ctrl_done,
421         TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc),
422         TP_ARGS(afu, cmd, rc)
423 );
424
425 DEFINE_EVENT_PRINT(cxl_afu_psl_ctrl, cxl_psl_ctrl,
426         TP_PROTO(struct cxl_afu *afu, u64 cmd),
427         TP_ARGS(afu, cmd),
428
429         TP_printk("psl%i.%i cmd=%s",
430                 __entry->card,
431                 __entry->afu,
432                 __print_symbolic_u64(__entry->cmd, PSL_COMMANDS)
433         )
434 );
435
436 DEFINE_EVENT_PRINT(cxl_afu_psl_ctrl_done, cxl_psl_ctrl_done,
437         TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc),
438         TP_ARGS(afu, cmd, rc),
439
440         TP_printk("psl%i.%i cmd=%s rc=%i",
441                 __entry->card,
442                 __entry->afu,
443                 __print_symbolic_u64(__entry->cmd, PSL_COMMANDS),
444                 __entry->rc
445         )
446 );
447
448 DEFINE_EVENT(cxl_pe_class, cxl_slbia,
449         TP_PROTO(struct cxl_context *ctx),
450         TP_ARGS(ctx)
451 );
452
453 #endif /* _CXL_TRACE_H */
454
455 /* This part must be outside protection */
456 #undef TRACE_INCLUDE_PATH
457 #define TRACE_INCLUDE_PATH .
458 #define TRACE_INCLUDE_FILE trace
459 #include <trace/define_trace.h>