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 
17 TRACE_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 
34 TRACE_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 
51 TRACE_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 
68 TRACE_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 
85 TRACE_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 
102 TRACE_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 
119 TRACE_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 
136 TRACE_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 
149 TRACE_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 
172 TRACE_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