Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
[pandora-kernel.git] / drivers / net / wireless / iwlegacy / iwl-devtrace.h
1 /******************************************************************************
2  *
3  * Copyright(c) 2009 - 2011 Intel Corporation. All rights reserved.
4  *
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.
8  *
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
12  * more details.
13  *
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
17  *
18  * The full GNU General Public License is included in this distribution in the
19  * file called LICENSE.
20  *
21  * Contact Information:
22  *  Intel Linux Wireless <ilw@linux.intel.com>
23  * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
24  *
25  *****************************************************************************/
26
27 #if !defined(__IWLWIFI_LEGACY_DEVICE_TRACE) || defined(TRACE_HEADER_MULTI_READ)
28 #define __IWLWIFI_LEGACY_DEVICE_TRACE
29
30 #include <linux/tracepoint.h>
31
32 #if !defined(CONFIG_IWLWIFI_LEGACY_DEVICE_TRACING) || defined(__CHECKER__)
33 #undef TRACE_EVENT
34 #define TRACE_EVENT(name, proto, ...) \
35 static inline void trace_ ## name(proto) {}
36 #endif
37
38
39 #define PRIV_ENTRY      __field(struct iwl_priv *, priv)
40 #define PRIV_ASSIGN     (__entry->priv = priv)
41
42 #undef TRACE_SYSTEM
43 #define TRACE_SYSTEM iwlwifi_legacy_io
44
45 TRACE_EVENT(iwlwifi_legacy_dev_ioread32,
46         TP_PROTO(struct iwl_priv *priv, u32 offs, u32 val),
47         TP_ARGS(priv, offs, val),
48         TP_STRUCT__entry(
49                 PRIV_ENTRY
50                 __field(u32, offs)
51                 __field(u32, val)
52         ),
53         TP_fast_assign(
54                 PRIV_ASSIGN;
55                 __entry->offs = offs;
56                 __entry->val = val;
57         ),
58         TP_printk("[%p] read io[%#x] = %#x", __entry->priv,
59                                         __entry->offs, __entry->val)
60 );
61
62 TRACE_EVENT(iwlwifi_legacy_dev_iowrite8,
63         TP_PROTO(struct iwl_priv *priv, u32 offs, u8 val),
64         TP_ARGS(priv, offs, val),
65         TP_STRUCT__entry(
66                 PRIV_ENTRY
67                 __field(u32, offs)
68                 __field(u8, val)
69         ),
70         TP_fast_assign(
71                 PRIV_ASSIGN;
72                 __entry->offs = offs;
73                 __entry->val = val;
74         ),
75         TP_printk("[%p] write io[%#x] = %#x)", __entry->priv,
76                                         __entry->offs, __entry->val)
77 );
78
79 TRACE_EVENT(iwlwifi_legacy_dev_iowrite32,
80         TP_PROTO(struct iwl_priv *priv, u32 offs, u32 val),
81         TP_ARGS(priv, offs, val),
82         TP_STRUCT__entry(
83                 PRIV_ENTRY
84                 __field(u32, offs)
85                 __field(u32, val)
86         ),
87         TP_fast_assign(
88                 PRIV_ASSIGN;
89                 __entry->offs = offs;
90                 __entry->val = val;
91         ),
92         TP_printk("[%p] write io[%#x] = %#x)", __entry->priv,
93                                         __entry->offs, __entry->val)
94 );
95
96 #undef TRACE_SYSTEM
97 #define TRACE_SYSTEM iwlwifi_legacy_ucode
98
99 TRACE_EVENT(iwlwifi_legacy_dev_ucode_cont_event,
100         TP_PROTO(struct iwl_priv *priv, u32 time, u32 data, u32 ev),
101         TP_ARGS(priv, time, data, ev),
102         TP_STRUCT__entry(
103                 PRIV_ENTRY
104
105                 __field(u32, time)
106                 __field(u32, data)
107                 __field(u32, ev)
108         ),
109         TP_fast_assign(
110                 PRIV_ASSIGN;
111                 __entry->time = time;
112                 __entry->data = data;
113                 __entry->ev = ev;
114         ),
115         TP_printk("[%p] EVT_LOGT:%010u:0x%08x:%04u",
116                   __entry->priv, __entry->time, __entry->data, __entry->ev)
117 );
118
119 TRACE_EVENT(iwlwifi_legacy_dev_ucode_wrap_event,
120         TP_PROTO(struct iwl_priv *priv, u32 wraps, u32 n_entry, u32 p_entry),
121         TP_ARGS(priv, wraps, n_entry, p_entry),
122         TP_STRUCT__entry(
123                 PRIV_ENTRY
124
125                 __field(u32, wraps)
126                 __field(u32, n_entry)
127                 __field(u32, p_entry)
128         ),
129         TP_fast_assign(
130                 PRIV_ASSIGN;
131                 __entry->wraps = wraps;
132                 __entry->n_entry = n_entry;
133                 __entry->p_entry = p_entry;
134         ),
135         TP_printk("[%p] wraps=#%02d n=0x%X p=0x%X",
136                   __entry->priv, __entry->wraps, __entry->n_entry,
137                   __entry->p_entry)
138 );
139
140 #undef TRACE_SYSTEM
141 #define TRACE_SYSTEM iwlwifi
142
143 TRACE_EVENT(iwlwifi_legacy_dev_hcmd,
144         TP_PROTO(struct iwl_priv *priv, void *hcmd, size_t len, u32 flags),
145         TP_ARGS(priv, hcmd, len, flags),
146         TP_STRUCT__entry(
147                 PRIV_ENTRY
148                 __dynamic_array(u8, hcmd, len)
149                 __field(u32, flags)
150         ),
151         TP_fast_assign(
152                 PRIV_ASSIGN;
153                 memcpy(__get_dynamic_array(hcmd), hcmd, len);
154                 __entry->flags = flags;
155         ),
156         TP_printk("[%p] hcmd %#.2x (%ssync)",
157                   __entry->priv, ((u8 *)__get_dynamic_array(hcmd))[0],
158                   __entry->flags & CMD_ASYNC ? "a" : "")
159 );
160
161 TRACE_EVENT(iwlwifi_legacy_dev_rx,
162         TP_PROTO(struct iwl_priv *priv, void *rxbuf, size_t len),
163         TP_ARGS(priv, rxbuf, len),
164         TP_STRUCT__entry(
165                 PRIV_ENTRY
166                 __dynamic_array(u8, rxbuf, len)
167         ),
168         TP_fast_assign(
169                 PRIV_ASSIGN;
170                 memcpy(__get_dynamic_array(rxbuf), rxbuf, len);
171         ),
172         TP_printk("[%p] RX cmd %#.2x",
173                   __entry->priv, ((u8 *)__get_dynamic_array(rxbuf))[4])
174 );
175
176 TRACE_EVENT(iwlwifi_legacy_dev_tx,
177         TP_PROTO(struct iwl_priv *priv, void *tfd, size_t tfdlen,
178                  void *buf0, size_t buf0_len,
179                  void *buf1, size_t buf1_len),
180         TP_ARGS(priv, tfd, tfdlen, buf0, buf0_len, buf1, buf1_len),
181         TP_STRUCT__entry(
182                 PRIV_ENTRY
183
184                 __field(size_t, framelen)
185                 __dynamic_array(u8, tfd, tfdlen)
186
187                 /*
188                  * Do not insert between or below these items,
189                  * we want to keep the frame together (except
190                  * for the possible padding).
191                  */
192                 __dynamic_array(u8, buf0, buf0_len)
193                 __dynamic_array(u8, buf1, buf1_len)
194         ),
195         TP_fast_assign(
196                 PRIV_ASSIGN;
197                 __entry->framelen = buf0_len + buf1_len;
198                 memcpy(__get_dynamic_array(tfd), tfd, tfdlen);
199                 memcpy(__get_dynamic_array(buf0), buf0, buf0_len);
200                 memcpy(__get_dynamic_array(buf1), buf1, buf1_len);
201         ),
202         TP_printk("[%p] TX %.2x (%zu bytes)",
203                   __entry->priv,
204                   ((u8 *)__get_dynamic_array(buf0))[0],
205                   __entry->framelen)
206 );
207
208 TRACE_EVENT(iwlwifi_legacy_dev_ucode_error,
209         TP_PROTO(struct iwl_priv *priv, u32 desc, u32 time,
210                  u32 data1, u32 data2, u32 line, u32 blink1,
211                  u32 blink2, u32 ilink1, u32 ilink2),
212         TP_ARGS(priv, desc, time, data1, data2, line,
213                 blink1, blink2, ilink1, ilink2),
214         TP_STRUCT__entry(
215                 PRIV_ENTRY
216                 __field(u32, desc)
217                 __field(u32, time)
218                 __field(u32, data1)
219                 __field(u32, data2)
220                 __field(u32, line)
221                 __field(u32, blink1)
222                 __field(u32, blink2)
223                 __field(u32, ilink1)
224                 __field(u32, ilink2)
225         ),
226         TP_fast_assign(
227                 PRIV_ASSIGN;
228                 __entry->desc = desc;
229                 __entry->time = time;
230                 __entry->data1 = data1;
231                 __entry->data2 = data2;
232                 __entry->line = line;
233                 __entry->blink1 = blink1;
234                 __entry->blink2 = blink2;
235                 __entry->ilink1 = ilink1;
236                 __entry->ilink2 = ilink2;
237         ),
238         TP_printk("[%p] #%02d %010u data 0x%08X 0x%08X line %u, "
239                   "blink 0x%05X 0x%05X ilink 0x%05X 0x%05X",
240                   __entry->priv, __entry->desc, __entry->time, __entry->data1,
241                   __entry->data2, __entry->line, __entry->blink1,
242                   __entry->blink2, __entry->ilink1, __entry->ilink2)
243 );
244
245 TRACE_EVENT(iwlwifi_legacy_dev_ucode_event,
246         TP_PROTO(struct iwl_priv *priv, u32 time, u32 data, u32 ev),
247         TP_ARGS(priv, time, data, ev),
248         TP_STRUCT__entry(
249                 PRIV_ENTRY
250
251                 __field(u32, time)
252                 __field(u32, data)
253                 __field(u32, ev)
254         ),
255         TP_fast_assign(
256                 PRIV_ASSIGN;
257                 __entry->time = time;
258                 __entry->data = data;
259                 __entry->ev = ev;
260         ),
261         TP_printk("[%p] EVT_LOGT:%010u:0x%08x:%04u",
262                   __entry->priv, __entry->time, __entry->data, __entry->ev)
263 );
264 #endif /* __IWLWIFI_DEVICE_TRACE */
265
266 #undef TRACE_INCLUDE_PATH
267 #define TRACE_INCLUDE_PATH .
268 #undef TRACE_INCLUDE_FILE
269 #define TRACE_INCLUDE_FILE iwl-devtrace
270 #include <trace/define_trace.h>