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