1
/******************************************************************************
3
* Copyright(c) 2009 - 2011 Intel Corporation. All rights reserved.
5
* This program is free software; you can redistribute it and/or modify it
6
* under the terms of version 2 of the GNU General Public License as
7
* published by the Free Software Foundation.
9
* This program is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14
* You should have received a copy of the GNU General Public License along with
15
* this program; if not, write to the Free Software Foundation, Inc.,
16
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
18
* The full GNU General Public License is included in this distribution in the
19
* file called LICENSE.
21
* Contact Information:
22
* Intel Linux Wireless <ilw@linux.intel.com>
23
* Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
25
*****************************************************************************/
27
#if !defined(__IWLWIFI_DEVICE_TRACE) || defined(TRACE_HEADER_MULTI_READ)
28
#define __IWLWIFI_DEVICE_TRACE
30
#include <linux/tracepoint.h>
34
#if !defined(CONFIG_IWLWIFI_DEVICE_TRACING) || defined(__CHECKER__)
36
#define TRACE_EVENT(name, proto, ...) \
37
static inline void trace_ ## name(proto) {}
40
#define PRIV_ENTRY __field(struct iwl_priv *, priv)
41
#define PRIV_ASSIGN __entry->priv = priv
44
#define TRACE_SYSTEM iwlwifi_io
46
TRACE_EVENT(iwlwifi_dev_ioread32,
47
TP_PROTO(struct iwl_priv *priv, u32 offs, u32 val),
48
TP_ARGS(priv, offs, val),
59
TP_printk("[%p] read io[%#x] = %#x", __entry->priv, __entry->offs, __entry->val)
62
TRACE_EVENT(iwlwifi_dev_iowrite8,
63
TP_PROTO(struct iwl_priv *priv, u32 offs, u8 val),
64
TP_ARGS(priv, offs, val),
75
TP_printk("[%p] write io[%#x] = %#x)", __entry->priv, __entry->offs, __entry->val)
78
TRACE_EVENT(iwlwifi_dev_iowrite32,
79
TP_PROTO(struct iwl_priv *priv, u32 offs, u32 val),
80
TP_ARGS(priv, offs, val),
91
TP_printk("[%p] write io[%#x] = %#x)", __entry->priv, __entry->offs, __entry->val)
95
#define TRACE_SYSTEM iwlwifi_ucode
97
TRACE_EVENT(iwlwifi_dev_ucode_cont_event,
98
TP_PROTO(struct iwl_priv *priv, u32 time, u32 data, u32 ev),
99
TP_ARGS(priv, time, data, ev),
109
__entry->time = time;
110
__entry->data = data;
113
TP_printk("[%p] EVT_LOGT:%010u:0x%08x:%04u",
114
__entry->priv, __entry->time, __entry->data, __entry->ev)
117
TRACE_EVENT(iwlwifi_dev_ucode_wrap_event,
118
TP_PROTO(struct iwl_priv *priv, u32 wraps, u32 n_entry, u32 p_entry),
119
TP_ARGS(priv, wraps, n_entry, p_entry),
124
__field(u32, n_entry)
125
__field(u32, p_entry)
129
__entry->wraps = wraps;
130
__entry->n_entry = n_entry;
131
__entry->p_entry = p_entry;
133
TP_printk("[%p] wraps=#%02d n=0x%X p=0x%X",
134
__entry->priv, __entry->wraps, __entry->n_entry,
139
#define TRACE_SYSTEM iwlwifi
141
TRACE_EVENT(iwlwifi_dev_hcmd,
142
TP_PROTO(struct iwl_priv *priv, u32 flags,
143
const void *hcmd0, size_t len0,
144
const void *hcmd1, size_t len1,
145
const void *hcmd2, size_t len2),
146
TP_ARGS(priv, flags, hcmd0, len0, hcmd1, len1, hcmd2, len2),
149
__dynamic_array(u8, hcmd0, len0)
150
__dynamic_array(u8, hcmd1, len1)
151
__dynamic_array(u8, hcmd2, len2)
156
memcpy(__get_dynamic_array(hcmd0), hcmd0, len0);
157
memcpy(__get_dynamic_array(hcmd1), hcmd1, len1);
158
memcpy(__get_dynamic_array(hcmd2), hcmd2, len2);
159
__entry->flags = flags;
161
TP_printk("[%p] hcmd %#.2x (%ssync)",
162
__entry->priv, ((u8 *)__get_dynamic_array(hcmd0))[0],
163
__entry->flags & CMD_ASYNC ? "a" : "")
166
TRACE_EVENT(iwlwifi_dev_rx,
167
TP_PROTO(struct iwl_priv *priv, void *rxbuf, size_t len),
168
TP_ARGS(priv, rxbuf, len),
171
__dynamic_array(u8, rxbuf, len)
175
memcpy(__get_dynamic_array(rxbuf), rxbuf, len);
177
TP_printk("[%p] RX cmd %#.2x",
178
__entry->priv, ((u8 *)__get_dynamic_array(rxbuf))[4])
181
TRACE_EVENT(iwlwifi_dev_tx,
182
TP_PROTO(struct iwl_priv *priv, void *tfd, size_t tfdlen,
183
void *buf0, size_t buf0_len,
184
void *buf1, size_t buf1_len),
185
TP_ARGS(priv, tfd, tfdlen, buf0, buf0_len, buf1, buf1_len),
189
__field(size_t, framelen)
190
__dynamic_array(u8, tfd, tfdlen)
193
* Do not insert between or below these items,
194
* we want to keep the frame together (except
195
* for the possible padding).
197
__dynamic_array(u8, buf0, buf0_len)
198
__dynamic_array(u8, buf1, buf1_len)
202
__entry->framelen = buf0_len + buf1_len;
203
memcpy(__get_dynamic_array(tfd), tfd, tfdlen);
204
memcpy(__get_dynamic_array(buf0), buf0, buf0_len);
205
memcpy(__get_dynamic_array(buf1), buf1, buf1_len);
207
TP_printk("[%p] TX %.2x (%zu bytes)",
209
((u8 *)__get_dynamic_array(buf0))[0],
213
TRACE_EVENT(iwlwifi_dev_ucode_error,
214
TP_PROTO(struct iwl_priv *priv, u32 desc, u32 tsf_low,
215
u32 data1, u32 data2, u32 line, u32 blink1,
216
u32 blink2, u32 ilink1, u32 ilink2, u32 bcon_time,
217
u32 gp1, u32 gp2, u32 gp3, u32 ucode_ver, u32 hw_ver,
219
TP_ARGS(priv, desc, tsf_low, data1, data2, line,
220
blink1, blink2, ilink1, ilink2, bcon_time, gp1, gp2,
221
gp3, ucode_ver, hw_ver, brd_ver),
225
__field(u32, tsf_low)
233
__field(u32, bcon_time)
237
__field(u32, ucode_ver)
239
__field(u32, brd_ver)
243
__entry->desc = desc;
244
__entry->tsf_low = tsf_low;
245
__entry->data1 = data1;
246
__entry->data2 = data2;
247
__entry->line = line;
248
__entry->blink1 = blink1;
249
__entry->blink2 = blink2;
250
__entry->ilink1 = ilink1;
251
__entry->ilink2 = ilink2;
252
__entry->bcon_time = bcon_time;
256
__entry->ucode_ver = ucode_ver;
257
__entry->hw_ver = hw_ver;
258
__entry->brd_ver = brd_ver;
260
TP_printk("[%p] #%02d %010u data 0x%08X 0x%08X line %u, "
261
"blink 0x%05X 0x%05X ilink 0x%05X 0x%05X "
262
"bcon_tm %010u gp 0x%08X 0x%08X 0x%08X uCode 0x%08X "
263
"hw 0x%08X brd 0x%08X",
264
__entry->priv, __entry->desc, __entry->tsf_low,
266
__entry->data2, __entry->line, __entry->blink1,
267
__entry->blink2, __entry->ilink1, __entry->ilink2,
268
__entry->bcon_time, __entry->gp1, __entry->gp2,
269
__entry->gp3, __entry->ucode_ver, __entry->hw_ver,
273
TRACE_EVENT(iwlwifi_dev_ucode_event,
274
TP_PROTO(struct iwl_priv *priv, u32 time, u32 data, u32 ev),
275
TP_ARGS(priv, time, data, ev),
285
__entry->time = time;
286
__entry->data = data;
289
TP_printk("[%p] EVT_LOGT:%010u:0x%08x:%04u",
290
__entry->priv, __entry->time, __entry->data, __entry->ev)
292
#endif /* __IWLWIFI_DEVICE_TRACE */
294
#undef TRACE_INCLUDE_PATH
295
#define TRACE_INCLUDE_PATH .
296
#undef TRACE_INCLUDE_FILE
297
#define TRACE_INCLUDE_FILE iwl-devtrace
298
#include <trace/define_trace.h>