1416cf0b4SKalle Valo #if !defined(_ATH6KL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
2416cf0b4SKalle Valo 
3416cf0b4SKalle Valo #include <net/cfg80211.h>
4416cf0b4SKalle Valo #include <linux/skbuff.h>
5416cf0b4SKalle Valo #include <linux/tracepoint.h>
6416cf0b4SKalle Valo #include "wmi.h"
7e60c8154SKalle Valo #include "hif.h"
8416cf0b4SKalle Valo 
9416cf0b4SKalle Valo #if !defined(_ATH6KL_TRACE_H)
10416cf0b4SKalle Valo static inline unsigned int ath6kl_get_wmi_id(void *buf, size_t buf_len)
11416cf0b4SKalle Valo {
12416cf0b4SKalle Valo 	struct wmi_cmd_hdr *hdr = buf;
13416cf0b4SKalle Valo 
14416cf0b4SKalle Valo 	if (buf_len < sizeof(*hdr))
15416cf0b4SKalle Valo 		return 0;
16416cf0b4SKalle Valo 
17416cf0b4SKalle Valo 	return le16_to_cpu(hdr->cmd_id);
18416cf0b4SKalle Valo }
19416cf0b4SKalle Valo #endif /* __ATH6KL_TRACE_H */
20416cf0b4SKalle Valo 
21416cf0b4SKalle Valo #define _ATH6KL_TRACE_H
22416cf0b4SKalle Valo 
23416cf0b4SKalle Valo /* create empty functions when tracing is disabled */
24416cf0b4SKalle Valo #if !defined(CONFIG_ATH6KL_TRACING)
25416cf0b4SKalle Valo #undef TRACE_EVENT
26416cf0b4SKalle Valo #define TRACE_EVENT(name, proto, ...) \
27416cf0b4SKalle Valo static inline void trace_ ## name(proto) {}
28416cf0b4SKalle Valo #endif /* !CONFIG_ATH6KL_TRACING || __CHECKER__ */
29416cf0b4SKalle Valo 
30416cf0b4SKalle Valo #undef TRACE_SYSTEM
31416cf0b4SKalle Valo #define TRACE_SYSTEM ath6kl
32416cf0b4SKalle Valo 
33416cf0b4SKalle Valo TRACE_EVENT(ath6kl_wmi_cmd,
34416cf0b4SKalle Valo 	TP_PROTO(void *buf, size_t buf_len),
35416cf0b4SKalle Valo 
36416cf0b4SKalle Valo 	TP_ARGS(buf, buf_len),
37416cf0b4SKalle Valo 
38416cf0b4SKalle Valo 	TP_STRUCT__entry(
39416cf0b4SKalle Valo 		__field(unsigned int, id)
40416cf0b4SKalle Valo 		__field(size_t, buf_len)
41416cf0b4SKalle Valo 		__dynamic_array(u8, buf, buf_len)
42416cf0b4SKalle Valo 	),
43416cf0b4SKalle Valo 
44416cf0b4SKalle Valo 	TP_fast_assign(
45416cf0b4SKalle Valo 		__entry->id = ath6kl_get_wmi_id(buf, buf_len);
46416cf0b4SKalle Valo 		__entry->buf_len = buf_len;
47416cf0b4SKalle Valo 		memcpy(__get_dynamic_array(buf), buf, buf_len);
48416cf0b4SKalle Valo 	),
49416cf0b4SKalle Valo 
50416cf0b4SKalle Valo 	TP_printk(
51416cf0b4SKalle Valo 		"id %d len %d",
52416cf0b4SKalle Valo 		__entry->id, __entry->buf_len
53416cf0b4SKalle Valo 	)
54416cf0b4SKalle Valo );
55416cf0b4SKalle Valo 
56416cf0b4SKalle Valo TRACE_EVENT(ath6kl_wmi_event,
57416cf0b4SKalle Valo 	TP_PROTO(void *buf, size_t buf_len),
58416cf0b4SKalle Valo 
59416cf0b4SKalle Valo 	TP_ARGS(buf, buf_len),
60416cf0b4SKalle Valo 
61416cf0b4SKalle Valo 	TP_STRUCT__entry(
62416cf0b4SKalle Valo 		__field(unsigned int, id)
63416cf0b4SKalle Valo 		__field(size_t, buf_len)
64416cf0b4SKalle Valo 		__dynamic_array(u8, buf, buf_len)
65416cf0b4SKalle Valo 	),
66416cf0b4SKalle Valo 
67416cf0b4SKalle Valo 	TP_fast_assign(
68416cf0b4SKalle Valo 		__entry->id = ath6kl_get_wmi_id(buf, buf_len);
69416cf0b4SKalle Valo 		__entry->buf_len = buf_len;
70416cf0b4SKalle Valo 		memcpy(__get_dynamic_array(buf), buf, buf_len);
71416cf0b4SKalle Valo 	),
72416cf0b4SKalle Valo 
73416cf0b4SKalle Valo 	TP_printk(
74416cf0b4SKalle Valo 		"id %d len %d",
75416cf0b4SKalle Valo 		__entry->id, __entry->buf_len
76416cf0b4SKalle Valo 	)
77416cf0b4SKalle Valo );
78416cf0b4SKalle Valo 
79e60c8154SKalle Valo TRACE_EVENT(ath6kl_sdio,
80e60c8154SKalle Valo 	TP_PROTO(unsigned int addr, int flags,
81e60c8154SKalle Valo 		 void *buf, size_t buf_len),
82e60c8154SKalle Valo 
83e60c8154SKalle Valo 	TP_ARGS(addr, flags, buf, buf_len),
84e60c8154SKalle Valo 
85e60c8154SKalle Valo 	TP_STRUCT__entry(
86e60c8154SKalle Valo 		__field(unsigned int, tx)
87e60c8154SKalle Valo 		__field(unsigned int, addr)
88e60c8154SKalle Valo 		__field(int, flags)
89e60c8154SKalle Valo 		__field(size_t, buf_len)
90e60c8154SKalle Valo 		__dynamic_array(u8, buf, buf_len)
91e60c8154SKalle Valo 	),
92e60c8154SKalle Valo 
93e60c8154SKalle Valo 	TP_fast_assign(
94e60c8154SKalle Valo 		__entry->addr = addr;
95e60c8154SKalle Valo 		__entry->flags = flags;
96e60c8154SKalle Valo 		__entry->buf_len = buf_len;
97e60c8154SKalle Valo 		memcpy(__get_dynamic_array(buf), buf, buf_len);
98e60c8154SKalle Valo 
99e60c8154SKalle Valo 		if (flags & HIF_WRITE)
100e60c8154SKalle Valo 			__entry->tx = 1;
101e60c8154SKalle Valo 		else
102e60c8154SKalle Valo 			__entry->tx = 0;
103e60c8154SKalle Valo 	),
104e60c8154SKalle Valo 
105e60c8154SKalle Valo 	TP_printk(
106e60c8154SKalle Valo 		"%s addr 0x%x flags 0x%x len %d\n",
107e60c8154SKalle Valo 		__entry->tx ? "tx" : "rx",
108e60c8154SKalle Valo 		__entry->addr,
109e60c8154SKalle Valo 		__entry->flags,
110e60c8154SKalle Valo 		__entry->buf_len
111e60c8154SKalle Valo 	)
112e60c8154SKalle Valo );
113e60c8154SKalle Valo 
114e60c8154SKalle Valo TRACE_EVENT(ath6kl_sdio_scat,
115e60c8154SKalle Valo 	TP_PROTO(unsigned int addr, int flags, unsigned int total_len,
116e60c8154SKalle Valo 		 unsigned int entries, struct hif_scatter_item *list),
117e60c8154SKalle Valo 
118e60c8154SKalle Valo 	TP_ARGS(addr, flags, total_len, entries, list),
119e60c8154SKalle Valo 
120e60c8154SKalle Valo 	TP_STRUCT__entry(
121e60c8154SKalle Valo 		__field(unsigned int, tx)
122e60c8154SKalle Valo 		__field(unsigned int, addr)
123e60c8154SKalle Valo 		__field(int, flags)
124e60c8154SKalle Valo 		__field(unsigned int, entries)
125e60c8154SKalle Valo 		__field(size_t, total_len)
126e60c8154SKalle Valo 		__dynamic_array(unsigned int, len_array, entries)
127e60c8154SKalle Valo 		__dynamic_array(u8, data, total_len)
128e60c8154SKalle Valo 	),
129e60c8154SKalle Valo 
130e60c8154SKalle Valo 	TP_fast_assign(
131e60c8154SKalle Valo 		unsigned int *len_array;
132e60c8154SKalle Valo 		int i, offset = 0;
133e60c8154SKalle Valo 		size_t len;
134e60c8154SKalle Valo 
135e60c8154SKalle Valo 		__entry->addr = addr;
136e60c8154SKalle Valo 		__entry->flags = flags;
137e60c8154SKalle Valo 		__entry->entries = entries;
138e60c8154SKalle Valo 		__entry->total_len = total_len;
139e60c8154SKalle Valo 
140e60c8154SKalle Valo 		if (flags & HIF_WRITE)
141e60c8154SKalle Valo 			__entry->tx = 1;
142e60c8154SKalle Valo 		else
143e60c8154SKalle Valo 			__entry->tx = 0;
144e60c8154SKalle Valo 
145e60c8154SKalle Valo 		len_array = __get_dynamic_array(len_array);
146e60c8154SKalle Valo 
147e60c8154SKalle Valo 		for (i = 0; i < entries; i++) {
148e60c8154SKalle Valo 			len = list[i].len;
149e60c8154SKalle Valo 
150e60c8154SKalle Valo 			memcpy((u8 *) __get_dynamic_array(data) + offset,
151e60c8154SKalle Valo 			       list[i].buf, len);
152e60c8154SKalle Valo 
153e60c8154SKalle Valo 			len_array[i] = len;
154e60c8154SKalle Valo 			offset += len;
155e60c8154SKalle Valo 		}
156e60c8154SKalle Valo 	),
157e60c8154SKalle Valo 
158e60c8154SKalle Valo 	TP_printk(
159e60c8154SKalle Valo 		"%s addr 0x%x flags 0x%x entries %d total_len %d\n",
160e60c8154SKalle Valo 		__entry->tx ? "tx" : "rx",
161e60c8154SKalle Valo 		__entry->addr,
162e60c8154SKalle Valo 		__entry->flags,
163e60c8154SKalle Valo 		__entry->entries,
164e60c8154SKalle Valo 		__entry->total_len
165e60c8154SKalle Valo 	)
166e60c8154SKalle Valo );
167e60c8154SKalle Valo 
168d57f093aSKalle Valo TRACE_EVENT(ath6kl_sdio_irq,
169d57f093aSKalle Valo 	TP_PROTO(void *buf, size_t buf_len),
170d57f093aSKalle Valo 
171d57f093aSKalle Valo 	TP_ARGS(buf, buf_len),
172d57f093aSKalle Valo 
173d57f093aSKalle Valo 	TP_STRUCT__entry(
174d57f093aSKalle Valo 		__field(size_t, buf_len)
175d57f093aSKalle Valo 		__dynamic_array(u8, buf, buf_len)
176d57f093aSKalle Valo 	),
177d57f093aSKalle Valo 
178d57f093aSKalle Valo 	TP_fast_assign(
179d57f093aSKalle Valo 		__entry->buf_len = buf_len;
180d57f093aSKalle Valo 		memcpy(__get_dynamic_array(buf), buf, buf_len);
181d57f093aSKalle Valo 	),
182d57f093aSKalle Valo 
183d57f093aSKalle Valo 	TP_printk(
184d57f093aSKalle Valo 		"irq len %d\n", __entry->buf_len
185d57f093aSKalle Valo 	)
186d57f093aSKalle Valo );
187d57f093aSKalle Valo 
1884771979aSKalle Valo TRACE_EVENT(ath6kl_htc_rx,
1894771979aSKalle Valo 	TP_PROTO(int status, int endpoint, void *buf,
1904771979aSKalle Valo 		 size_t buf_len),
1914771979aSKalle Valo 
1924771979aSKalle Valo 	TP_ARGS(status, endpoint, buf, buf_len),
1934771979aSKalle Valo 
1944771979aSKalle Valo 	TP_STRUCT__entry(
1954771979aSKalle Valo 		__field(int, status)
1964771979aSKalle Valo 		__field(int, endpoint)
1974771979aSKalle Valo 		__field(size_t, buf_len)
1984771979aSKalle Valo 		__dynamic_array(u8, buf, buf_len)
1994771979aSKalle Valo 	),
2004771979aSKalle Valo 
2014771979aSKalle Valo 	TP_fast_assign(
2024771979aSKalle Valo 		__entry->status = status;
2034771979aSKalle Valo 		__entry->endpoint = endpoint;
2044771979aSKalle Valo 		__entry->buf_len = buf_len;
2054771979aSKalle Valo 		memcpy(__get_dynamic_array(buf), buf, buf_len);
2064771979aSKalle Valo 	),
2074771979aSKalle Valo 
2084771979aSKalle Valo 	TP_printk(
2094771979aSKalle Valo 		"status %d endpoint %d len %d\n",
2104771979aSKalle Valo 		__entry->status,
2114771979aSKalle Valo 		__entry->endpoint,
2124771979aSKalle Valo 		__entry->buf_len
2134771979aSKalle Valo 	)
2144771979aSKalle Valo );
2154771979aSKalle Valo 
2164771979aSKalle Valo TRACE_EVENT(ath6kl_htc_tx,
2174771979aSKalle Valo 	TP_PROTO(int status, int endpoint, void *buf,
2184771979aSKalle Valo 		 size_t buf_len),
2194771979aSKalle Valo 
2204771979aSKalle Valo 	TP_ARGS(status, endpoint, buf, buf_len),
2214771979aSKalle Valo 
2224771979aSKalle Valo 	TP_STRUCT__entry(
2234771979aSKalle Valo 		__field(int, status)
2244771979aSKalle Valo 		__field(int, endpoint)
2254771979aSKalle Valo 		__field(size_t, buf_len)
2264771979aSKalle Valo 		__dynamic_array(u8, buf, buf_len)
2274771979aSKalle Valo 	),
2284771979aSKalle Valo 
2294771979aSKalle Valo 	TP_fast_assign(
2304771979aSKalle Valo 		__entry->status = status;
2314771979aSKalle Valo 		__entry->endpoint = endpoint;
2324771979aSKalle Valo 		__entry->buf_len = buf_len;
2334771979aSKalle Valo 		memcpy(__get_dynamic_array(buf), buf, buf_len);
2344771979aSKalle Valo 	),
2354771979aSKalle Valo 
2364771979aSKalle Valo 	TP_printk(
2374771979aSKalle Valo 		"status %d endpoint %d len %d\n",
2384771979aSKalle Valo 		__entry->status,
2394771979aSKalle Valo 		__entry->endpoint,
2404771979aSKalle Valo 		__entry->buf_len
2414771979aSKalle Valo 	)
2424771979aSKalle Valo );
2434771979aSKalle Valo 
244416cf0b4SKalle Valo #endif /* _ ATH6KL_TRACE_H || TRACE_HEADER_MULTI_READ*/
245416cf0b4SKalle Valo 
246416cf0b4SKalle Valo /* we don't want to use include/trace/events */
247416cf0b4SKalle Valo #undef TRACE_INCLUDE_PATH
248416cf0b4SKalle Valo #define TRACE_INCLUDE_PATH .
249416cf0b4SKalle Valo #undef TRACE_INCLUDE_FILE
250416cf0b4SKalle Valo #define TRACE_INCLUDE_FILE trace
251416cf0b4SKalle Valo 
252416cf0b4SKalle Valo /* This part must be outside protection */
253416cf0b4SKalle Valo #include <trace/define_trace.h>
254