1/* SPDX-License-Identifier: GPL-2.0-only */
2/******************************************************************************
3 *
4 * Copyright(c) 2009 - 2014 Intel Corporation. All rights reserved.
5 * Copyright(c) 2016-2017 Intel Deutschland GmbH
6 *****************************************************************************/
7
8#if !defined(__IWLWIFI_DEVICE_TRACE_IO) || defined(TRACE_HEADER_MULTI_READ)
9#define __IWLWIFI_DEVICE_TRACE_IO
10
11#include <linux/tracepoint.h>
12#include <linux/pci.h>
13
14#undef TRACE_SYSTEM
15#define TRACE_SYSTEM iwlwifi_io
16
17TRACE_EVENT(iwlwifi_dev_ioread32,
18	TP_PROTO(const struct device *dev, u32 offs, u32 val),
19	TP_ARGS(dev, offs, val),
20	TP_STRUCT__entry(
21		DEV_ENTRY
22		__field(u32, offs)
23		__field(u32, val)
24	),
25	TP_fast_assign(
26		DEV_ASSIGN;
27		__entry->offs = offs;
28		__entry->val = val;
29	),
30	TP_printk("[%s] read io[%#x] = %#x",
31		  __get_str(dev), __entry->offs, __entry->val)
32);
33
34TRACE_EVENT(iwlwifi_dev_iowrite8,
35	TP_PROTO(const struct device *dev, u32 offs, u8 val),
36	TP_ARGS(dev, offs, val),
37	TP_STRUCT__entry(
38		DEV_ENTRY
39		__field(u32, offs)
40		__field(u8, val)
41	),
42	TP_fast_assign(
43		DEV_ASSIGN;
44		__entry->offs = offs;
45		__entry->val = val;
46	),
47	TP_printk("[%s] write io[%#x] = %#x)",
48		  __get_str(dev), __entry->offs, __entry->val)
49);
50
51TRACE_EVENT(iwlwifi_dev_iowrite32,
52	TP_PROTO(const struct device *dev, u32 offs, u32 val),
53	TP_ARGS(dev, offs, val),
54	TP_STRUCT__entry(
55		DEV_ENTRY
56		__field(u32, offs)
57		__field(u32, val)
58	),
59	TP_fast_assign(
60		DEV_ASSIGN;
61		__entry->offs = offs;
62		__entry->val = val;
63	),
64	TP_printk("[%s] write io[%#x] = %#x)",
65		  __get_str(dev), __entry->offs, __entry->val)
66);
67
68TRACE_EVENT(iwlwifi_dev_iowrite64,
69	TP_PROTO(const struct device *dev, u64 offs, u64 val),
70	TP_ARGS(dev, offs, val),
71	TP_STRUCT__entry(
72		DEV_ENTRY
73		__field(u64, offs)
74		__field(u64, val)
75	),
76	TP_fast_assign(
77		DEV_ASSIGN;
78		__entry->offs = offs;
79		__entry->val = val;
80	),
81	TP_printk("[%s] write io[%llu] = %llu)",
82		  __get_str(dev), __entry->offs, __entry->val)
83);
84
85TRACE_EVENT(iwlwifi_dev_iowrite_prph32,
86	TP_PROTO(const struct device *dev, u32 offs, u32 val),
87	TP_ARGS(dev, offs, val),
88	TP_STRUCT__entry(
89		DEV_ENTRY
90		__field(u32, offs)
91		__field(u32, val)
92	),
93	TP_fast_assign(
94		DEV_ASSIGN;
95		__entry->offs = offs;
96		__entry->val = val;
97	),
98	TP_printk("[%s] write PRPH[%#x] = %#x)",
99		  __get_str(dev), __entry->offs, __entry->val)
100);
101
102TRACE_EVENT(iwlwifi_dev_iowrite_prph64,
103	TP_PROTO(const struct device *dev, u64 offs, u64 val),
104	TP_ARGS(dev, offs, val),
105	TP_STRUCT__entry(
106		DEV_ENTRY
107		__field(u64, offs)
108		__field(u64, val)
109	),
110	TP_fast_assign(
111		DEV_ASSIGN;
112		__entry->offs = offs;
113		__entry->val = val;
114	),
115	TP_printk("[%s] write PRPH[%llu] = %llu)",
116		  __get_str(dev), __entry->offs, __entry->val)
117);
118
119TRACE_EVENT(iwlwifi_dev_ioread_prph32,
120	TP_PROTO(const struct device *dev, u32 offs, u32 val),
121	TP_ARGS(dev, offs, val),
122	TP_STRUCT__entry(
123		DEV_ENTRY
124		__field(u32, offs)
125		__field(u32, val)
126	),
127	TP_fast_assign(
128		DEV_ASSIGN;
129		__entry->offs = offs;
130		__entry->val = val;
131	),
132	TP_printk("[%s] read PRPH[%#x] = %#x",
133		  __get_str(dev), __entry->offs, __entry->val)
134);
135
136TRACE_EVENT(iwlwifi_dev_irq,
137	TP_PROTO(const struct device *dev),
138	TP_ARGS(dev),
139	TP_STRUCT__entry(
140		DEV_ENTRY
141	),
142	TP_fast_assign(
143		DEV_ASSIGN;
144	),
145	/* TP_printk("") doesn't compile */
146	TP_printk("%d", 0)
147);
148
149TRACE_EVENT(iwlwifi_dev_irq_msix,
150	TP_PROTO(const struct device *dev, struct msix_entry *msix_entry,
151		 bool defirq, u32 inta_fh, u32 inta_hw),
152	TP_ARGS(dev, msix_entry, defirq, inta_fh, inta_hw),
153	TP_STRUCT__entry(
154		DEV_ENTRY
155		__field(u32, entry)
156		__field(u8, defirq)
157		__field(u32, inta_fh)
158		__field(u32, inta_hw)
159	),
160	TP_fast_assign(
161		DEV_ASSIGN;
162		__entry->entry = msix_entry->entry;
163		__entry->defirq = defirq;
164		__entry->inta_fh = inta_fh;
165		__entry->inta_hw = inta_hw;
166	),
167	TP_printk("entry:%d defirq:%d fh:0x%x, hw:0x%x",
168		  __entry->entry, __entry->defirq,
169		  __entry->inta_fh, __entry->inta_hw)
170);
171
172TRACE_EVENT(iwlwifi_dev_ict_read,
173	TP_PROTO(const struct device *dev, u32 index, u32 value),
174	TP_ARGS(dev, index, value),
175	TP_STRUCT__entry(
176		DEV_ENTRY
177		__field(u32, index)
178		__field(u32, value)
179	),
180	TP_fast_assign(
181		DEV_ASSIGN;
182		__entry->index = index;
183		__entry->value = value;
184	),
185	TP_printk("[%s] read ict[%d] = %#.8x",
186		  __get_str(dev), __entry->index, __entry->value)
187);
188#endif /* __IWLWIFI_DEVICE_TRACE_IO */
189
190#undef TRACE_INCLUDE_PATH
191#define TRACE_INCLUDE_PATH .
192#undef TRACE_INCLUDE_FILE
193#define TRACE_INCLUDE_FILE iwl-devtrace-io
194#include <trace/define_trace.h>
195