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 
168416cf0b4SKalle Valo #endif /* _ ATH6KL_TRACE_H || TRACE_HEADER_MULTI_READ*/
169416cf0b4SKalle Valo 
170416cf0b4SKalle Valo /* we don't want to use include/trace/events */
171416cf0b4SKalle Valo #undef TRACE_INCLUDE_PATH
172416cf0b4SKalle Valo #define TRACE_INCLUDE_PATH .
173416cf0b4SKalle Valo #undef TRACE_INCLUDE_FILE
174416cf0b4SKalle Valo #define TRACE_INCLUDE_FILE trace
175416cf0b4SKalle Valo 
176416cf0b4SKalle Valo /* This part must be outside protection */
177416cf0b4SKalle Valo #include <trace/define_trace.h>
178