GNU Linux-libre 4.19.264-gnu1
[releases.git] / drivers / net / wireless / mediatek / mt76 / mt76x0 / trace.h
1 /*
2  * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
3  * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2
7  * as published by the Free Software Foundation
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  */
14
15 #if !defined(__MT76X0U_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
16 #define __MT76X0U_TRACE_H
17
18 #include <linux/tracepoint.h>
19 #include "mt76x0.h"
20 #include "mac.h"
21
22 #undef TRACE_SYSTEM
23 #define TRACE_SYSTEM mt76x0
24
25 #define MAXNAME         32
26 #define DEV_ENTRY       __array(char, wiphy_name, 32)
27 #define DEV_ASSIGN      strlcpy(__entry->wiphy_name,                    \
28                                 wiphy_name(dev->hw->wiphy), MAXNAME)
29 #define DEV_PR_FMT      "%s "
30 #define DEV_PR_ARG      __entry->wiphy_name
31
32 #define REG_ENTRY       __field(u32, reg) __field(u32, val)
33 #define REG_ASSIGN      __entry->reg = reg; __entry->val = val
34 #define REG_PR_FMT      "%04x=%08x"
35 #define REG_PR_ARG      __entry->reg, __entry->val
36
37 DECLARE_EVENT_CLASS(dev_reg_evt,
38         TP_PROTO(struct mt76_dev *dev, u32 reg, u32 val),
39         TP_ARGS(dev, reg, val),
40         TP_STRUCT__entry(
41                 DEV_ENTRY
42                 REG_ENTRY
43         ),
44         TP_fast_assign(
45                 DEV_ASSIGN;
46                 REG_ASSIGN;
47         ),
48         TP_printk(
49                 DEV_PR_FMT REG_PR_FMT,
50                 DEV_PR_ARG, REG_PR_ARG
51         )
52 );
53
54 DEFINE_EVENT(dev_reg_evt, mt76x0_reg_read,
55         TP_PROTO(struct mt76_dev *dev, u32 reg, u32 val),
56         TP_ARGS(dev, reg, val)
57 );
58
59 DEFINE_EVENT(dev_reg_evt, mt76x0_reg_write,
60         TP_PROTO(struct mt76_dev *dev, u32 reg, u32 val),
61         TP_ARGS(dev, reg, val)
62 );
63
64 TRACE_EVENT(mt76x0_submit_urb,
65         TP_PROTO(struct mt76_dev *dev, struct urb *u),
66         TP_ARGS(dev, u),
67         TP_STRUCT__entry(
68                 DEV_ENTRY __field(unsigned, pipe) __field(u32, len)
69         ),
70         TP_fast_assign(
71                 DEV_ASSIGN;
72                 __entry->pipe = u->pipe;
73                 __entry->len = u->transfer_buffer_length;
74         ),
75         TP_printk(DEV_PR_FMT "p:%08x len:%u",
76                   DEV_PR_ARG, __entry->pipe, __entry->len)
77 );
78
79 #define trace_mt76x0_submit_urb_sync(__dev, __pipe, __len) ({   \
80         struct urb u;                                   \
81         u.pipe = __pipe;                                \
82         u.transfer_buffer_length = __len;               \
83         trace_mt76x0_submit_urb(__dev, &u);                     \
84 })
85
86 TRACE_EVENT(mt76x0_mcu_msg_send,
87         TP_PROTO(struct mt76_dev *dev,
88                  struct sk_buff *skb, u32 csum, bool resp),
89         TP_ARGS(dev, skb, csum, resp),
90         TP_STRUCT__entry(
91                 DEV_ENTRY
92                 __field(u32, info)
93                 __field(u32, csum)
94                 __field(bool, resp)
95         ),
96         TP_fast_assign(
97                 DEV_ASSIGN;
98                 __entry->info = *(u32 *)skb->data;
99                 __entry->csum = csum;
100                 __entry->resp = resp;
101         ),
102         TP_printk(DEV_PR_FMT "i:%08x c:%08x r:%d",
103                   DEV_PR_ARG, __entry->info, __entry->csum, __entry->resp)
104 );
105
106 TRACE_EVENT(mt76x0_vend_req,
107         TP_PROTO(struct mt76_dev *dev, unsigned pipe, u8 req, u8 req_type,
108                  u16 val, u16 offset, void *buf, size_t buflen, int ret),
109         TP_ARGS(dev, pipe, req, req_type, val, offset, buf, buflen, ret),
110         TP_STRUCT__entry(
111                 DEV_ENTRY
112                 __field(unsigned, pipe) __field(u8, req) __field(u8, req_type)
113                 __field(u16, val) __field(u16, offset) __field(void*, buf)
114                 __field(int, buflen) __field(int, ret)
115         ),
116         TP_fast_assign(
117                 DEV_ASSIGN;
118                 __entry->pipe = pipe;
119                 __entry->req = req;
120                 __entry->req_type = req_type;
121                 __entry->val = val;
122                 __entry->offset = offset;
123                 __entry->buf = buf;
124                 __entry->buflen = buflen;
125                 __entry->ret = ret;
126         ),
127         TP_printk(DEV_PR_FMT
128                   "%d p:%08x req:%02hhx %02hhx val:%04hx %04hx buf:%d %d",
129                   DEV_PR_ARG, __entry->ret, __entry->pipe, __entry->req,
130                   __entry->req_type, __entry->val, __entry->offset,
131                   !!__entry->buf, __entry->buflen)
132 );
133
134 DECLARE_EVENT_CLASS(dev_rf_reg_evt,
135         TP_PROTO(struct mt76_dev *dev, u8 bank, u8 reg, u8 val),
136         TP_ARGS(dev, bank, reg, val),
137         TP_STRUCT__entry(
138                 DEV_ENTRY
139                 __field(u8, bank)
140                 __field(u8, reg)
141                 __field(u8, val)
142         ),
143         TP_fast_assign(
144                 DEV_ASSIGN;
145                 REG_ASSIGN;
146                 __entry->bank = bank;
147         ),
148         TP_printk(
149                 DEV_PR_FMT "%02hhx:%02hhx=%02hhx",
150                 DEV_PR_ARG, __entry->bank, __entry->reg, __entry->val
151         )
152 );
153
154 DEFINE_EVENT(dev_rf_reg_evt, mt76x0_rf_read,
155         TP_PROTO(struct mt76_dev *dev, u8 bank, u8 reg, u8 val),
156         TP_ARGS(dev, bank, reg, val)
157 );
158
159 DEFINE_EVENT(dev_rf_reg_evt, mt76x0_rf_write,
160         TP_PROTO(struct mt76_dev *dev, u8 bank, u8 reg, u8 val),
161         TP_ARGS(dev, bank, reg, val)
162 );
163
164 DECLARE_EVENT_CLASS(dev_simple_evt,
165         TP_PROTO(struct mt76_dev *dev, u8 val),
166         TP_ARGS(dev, val),
167         TP_STRUCT__entry(
168                 DEV_ENTRY
169                 __field(u8, val)
170         ),
171         TP_fast_assign(
172                 DEV_ASSIGN;
173                 __entry->val = val;
174         ),
175         TP_printk(
176                 DEV_PR_FMT "%02hhx", DEV_PR_ARG, __entry->val
177         )
178 );
179
180 TRACE_EVENT(mt76x0_rx,
181         TP_PROTO(struct mt76_dev *dev, struct mt76x0_rxwi *rxwi, u32 f),
182         TP_ARGS(dev, rxwi, f),
183         TP_STRUCT__entry(
184                 DEV_ENTRY
185                 __field_struct(struct mt76x0_rxwi, rxwi)
186                 __field(u32, fce_info)
187         ),
188         TP_fast_assign(
189                 DEV_ASSIGN;
190                 __entry->rxwi = *rxwi;
191                 __entry->fce_info = f;
192         ),
193         TP_printk(DEV_PR_FMT "rxi:%08x ctl:%08x", DEV_PR_ARG,
194                   le32_to_cpu(__entry->rxwi.rxinfo),
195                   le32_to_cpu(__entry->rxwi.ctl))
196 );
197
198 TRACE_EVENT(mt76x0_tx,
199         TP_PROTO(struct mt76_dev *dev, struct sk_buff *skb,
200                  struct mt76_sta *sta, struct mt76_txwi *h),
201         TP_ARGS(dev, skb, sta, h),
202         TP_STRUCT__entry(
203                 DEV_ENTRY
204                 __field_struct(struct mt76_txwi, h)
205                 __field(struct sk_buff *, skb)
206                 __field(struct mt76_sta *, sta)
207         ),
208         TP_fast_assign(
209                 DEV_ASSIGN;
210                 __entry->h = *h;
211                 __entry->skb = skb;
212                 __entry->sta = sta;
213         ),
214         TP_printk(DEV_PR_FMT "skb:%p sta:%p  flg:%04hx rate_ctl:%04hx "
215                   "ack:%02hhx wcid:%02hhx len_ctl:%05hx", DEV_PR_ARG,
216                   __entry->skb, __entry->sta,
217                   le16_to_cpu(__entry->h.flags),
218                   le16_to_cpu(__entry->h.rate_ctl),
219                   __entry->h.ack_ctl, __entry->h.wcid,
220                   le16_to_cpu(__entry->h.len_ctl))
221 );
222
223 TRACE_EVENT(mt76x0_tx_dma_done,
224         TP_PROTO(struct mt76_dev *dev, struct sk_buff *skb),
225         TP_ARGS(dev, skb),
226         TP_STRUCT__entry(
227                 DEV_ENTRY
228                 __field(struct sk_buff *, skb)
229         ),
230         TP_fast_assign(
231                 DEV_ASSIGN;
232                 __entry->skb = skb;
233         ),
234         TP_printk(DEV_PR_FMT "%p", DEV_PR_ARG, __entry->skb)
235 );
236
237 TRACE_EVENT(mt76x0_tx_status_cleaned,
238         TP_PROTO(struct mt76_dev *dev, int cleaned),
239         TP_ARGS(dev, cleaned),
240         TP_STRUCT__entry(
241                 DEV_ENTRY
242                 __field(int, cleaned)
243         ),
244         TP_fast_assign(
245                 DEV_ASSIGN;
246                 __entry->cleaned = cleaned;
247         ),
248         TP_printk(DEV_PR_FMT "%d", DEV_PR_ARG, __entry->cleaned)
249 );
250
251 TRACE_EVENT(mt76x0_tx_status,
252         TP_PROTO(struct mt76_dev *dev, u32 stat1, u32 stat2),
253         TP_ARGS(dev, stat1, stat2),
254         TP_STRUCT__entry(
255                 DEV_ENTRY
256                 __field(u32, stat1)     __field(u32, stat2)
257         ),
258         TP_fast_assign(
259                 DEV_ASSIGN;
260                 __entry->stat1 = stat1;
261                 __entry->stat2 = stat2;
262         ),
263         TP_printk(DEV_PR_FMT "%08x %08x",
264                   DEV_PR_ARG, __entry->stat1, __entry->stat2)
265 );
266
267 TRACE_EVENT(mt76x0_rx_dma_aggr,
268         TP_PROTO(struct mt76_dev *dev, int cnt, bool paged),
269         TP_ARGS(dev, cnt, paged),
270         TP_STRUCT__entry(
271                 DEV_ENTRY
272                 __field(u8, cnt)
273                 __field(bool, paged)
274         ),
275         TP_fast_assign(
276                 DEV_ASSIGN;
277                 __entry->cnt = cnt;
278                 __entry->paged = paged;
279         ),
280         TP_printk(DEV_PR_FMT "cnt:%d paged:%d",
281                   DEV_PR_ARG, __entry->cnt, __entry->paged)
282 );
283
284 DEFINE_EVENT(dev_simple_evt, mt76x0_set_key,
285         TP_PROTO(struct mt76_dev *dev, u8 val),
286         TP_ARGS(dev, val)
287 );
288
289 TRACE_EVENT(mt76x0_set_shared_key,
290         TP_PROTO(struct mt76_dev *dev, u8 vid, u8 key),
291         TP_ARGS(dev, vid, key),
292         TP_STRUCT__entry(
293                 DEV_ENTRY
294                 __field(u8, vid)
295                 __field(u8, key)
296         ),
297         TP_fast_assign(
298                 DEV_ASSIGN;
299                 __entry->vid = vid;
300                 __entry->key = key;
301         ),
302         TP_printk(DEV_PR_FMT "phy:%02hhx off:%02hhx",
303                   DEV_PR_ARG, __entry->vid, __entry->key)
304 );
305
306 #endif
307
308 #undef TRACE_INCLUDE_PATH
309 #define TRACE_INCLUDE_PATH .
310 #undef TRACE_INCLUDE_FILE
311 #define TRACE_INCLUDE_FILE trace
312
313 #include <trace/define_trace.h>