1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org> 4 * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl> 5 */ 6 7 #if !defined(__MT7601U_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) 8 #define __MT7601U_TRACE_H 9 10 #include <linux/tracepoint.h> 11 #include "mt7601u.h" 12 #include "mac.h" 13 14 #undef TRACE_SYSTEM 15 #define TRACE_SYSTEM mt7601u 16 17 #define MAXNAME 32 18 #define DEV_ENTRY __array(char, wiphy_name, 32) 19 #define DEV_ASSIGN strscpy(__entry->wiphy_name, \ 20 wiphy_name(dev->hw->wiphy), MAXNAME) 21 #define DEV_PR_FMT "%s " 22 #define DEV_PR_ARG __entry->wiphy_name 23 24 #define REG_ENTRY __field(u32, reg) __field(u32, val) 25 #define REG_ASSIGN __entry->reg = reg; __entry->val = val 26 #define REG_PR_FMT "%04x=%08x" 27 #define REG_PR_ARG __entry->reg, __entry->val 28 29 DECLARE_EVENT_CLASS(dev_reg_evtu, 30 TP_PROTO(struct mt7601u_dev *dev, u32 reg, u32 val), 31 TP_ARGS(dev, reg, val), 32 TP_STRUCT__entry( 33 DEV_ENTRY 34 REG_ENTRY 35 ), 36 TP_fast_assign( 37 DEV_ASSIGN; 38 REG_ASSIGN; 39 ), 40 TP_printk( 41 DEV_PR_FMT REG_PR_FMT, 42 DEV_PR_ARG, REG_PR_ARG 43 ) 44 ); 45 46 DEFINE_EVENT(dev_reg_evtu, reg_read, 47 TP_PROTO(struct mt7601u_dev *dev, u32 reg, u32 val), 48 TP_ARGS(dev, reg, val) 49 ); 50 51 DEFINE_EVENT(dev_reg_evtu, reg_write, 52 TP_PROTO(struct mt7601u_dev *dev, u32 reg, u32 val), 53 TP_ARGS(dev, reg, val) 54 ); 55 56 TRACE_EVENT(mt_submit_urb, 57 TP_PROTO(struct mt7601u_dev *dev, struct urb *u), 58 TP_ARGS(dev, u), 59 TP_STRUCT__entry( 60 DEV_ENTRY __field(unsigned, pipe) __field(u32, len) 61 ), 62 TP_fast_assign( 63 DEV_ASSIGN; 64 __entry->pipe = u->pipe; 65 __entry->len = u->transfer_buffer_length; 66 ), 67 TP_printk(DEV_PR_FMT "p:%08x len:%u", 68 DEV_PR_ARG, __entry->pipe, __entry->len) 69 ); 70 71 #define trace_mt_submit_urb_sync(__dev, __pipe, __len) ({ \ 72 struct urb u; \ 73 u.pipe = __pipe; \ 74 u.transfer_buffer_length = __len; \ 75 trace_mt_submit_urb(__dev, &u); \ 76 }) 77 78 TRACE_EVENT(mt_mcu_msg_send, 79 TP_PROTO(struct mt7601u_dev *dev, 80 struct sk_buff *skb, u32 csum, bool resp), 81 TP_ARGS(dev, skb, csum, resp), 82 TP_STRUCT__entry( 83 DEV_ENTRY 84 __field(u32, info) 85 __field(u32, csum) 86 __field(bool, resp) 87 ), 88 TP_fast_assign( 89 DEV_ASSIGN; 90 __entry->info = *(u32 *)skb->data; 91 __entry->csum = csum; 92 __entry->resp = resp; 93 ), 94 TP_printk(DEV_PR_FMT "i:%08x c:%08x r:%d", 95 DEV_PR_ARG, __entry->info, __entry->csum, __entry->resp) 96 ); 97 98 TRACE_EVENT(mt_vend_req, 99 TP_PROTO(struct mt7601u_dev *dev, unsigned pipe, u8 req, u8 req_type, 100 u16 val, u16 offset, void *buf, size_t buflen, int ret), 101 TP_ARGS(dev, pipe, req, req_type, val, offset, buf, buflen, ret), 102 TP_STRUCT__entry( 103 DEV_ENTRY 104 __field(unsigned, pipe) __field(u8, req) __field(u8, req_type) 105 __field(u16, val) __field(u16, offset) __field(void*, buf) 106 __field(int, buflen) __field(int, ret) 107 ), 108 TP_fast_assign( 109 DEV_ASSIGN; 110 __entry->pipe = pipe; 111 __entry->req = req; 112 __entry->req_type = req_type; 113 __entry->val = val; 114 __entry->offset = offset; 115 __entry->buf = buf; 116 __entry->buflen = buflen; 117 __entry->ret = ret; 118 ), 119 TP_printk(DEV_PR_FMT 120 "%d p:%08x req:%02hhx %02hhx val:%04hx %04hx buf:%d %d", 121 DEV_PR_ARG, __entry->ret, __entry->pipe, __entry->req, 122 __entry->req_type, __entry->val, __entry->offset, 123 !!__entry->buf, __entry->buflen) 124 ); 125 126 TRACE_EVENT(ee_read, 127 TP_PROTO(struct mt7601u_dev *dev, int offset, u16 val), 128 TP_ARGS(dev, offset, val), 129 TP_STRUCT__entry( 130 DEV_ENTRY 131 __field(int, o) __field(u16, v) 132 ), 133 TP_fast_assign( 134 DEV_ASSIGN; 135 __entry->o = offset; 136 __entry->v = val; 137 ), 138 TP_printk(DEV_PR_FMT "%04x=%04x", DEV_PR_ARG, __entry->o, __entry->v) 139 ); 140 141 DECLARE_EVENT_CLASS(dev_rf_reg_evt, 142 TP_PROTO(struct mt7601u_dev *dev, u8 bank, u8 reg, u8 val), 143 TP_ARGS(dev, bank, reg, val), 144 TP_STRUCT__entry( 145 DEV_ENTRY 146 __field(u8, bank) 147 __field(u8, reg) 148 __field(u8, val) 149 ), 150 TP_fast_assign( 151 DEV_ASSIGN; 152 REG_ASSIGN; 153 __entry->bank = bank; 154 ), 155 TP_printk( 156 DEV_PR_FMT "%02hhx:%02hhx=%02hhx", 157 DEV_PR_ARG, __entry->bank, __entry->reg, __entry->val 158 ) 159 ); 160 161 DEFINE_EVENT(dev_rf_reg_evt, rf_read, 162 TP_PROTO(struct mt7601u_dev *dev, u8 bank, u8 reg, u8 val), 163 TP_ARGS(dev, bank, reg, val) 164 ); 165 166 DEFINE_EVENT(dev_rf_reg_evt, rf_write, 167 TP_PROTO(struct mt7601u_dev *dev, u8 bank, u8 reg, u8 val), 168 TP_ARGS(dev, bank, reg, val) 169 ); 170 171 DECLARE_EVENT_CLASS(dev_bbp_reg_evt, 172 TP_PROTO(struct mt7601u_dev *dev, u8 reg, u8 val), 173 TP_ARGS(dev, reg, val), 174 TP_STRUCT__entry( 175 DEV_ENTRY 176 __field(u8, reg) 177 __field(u8, val) 178 ), 179 TP_fast_assign( 180 DEV_ASSIGN; 181 REG_ASSIGN; 182 ), 183 TP_printk( 184 DEV_PR_FMT "%02hhx=%02hhx", 185 DEV_PR_ARG, __entry->reg, __entry->val 186 ) 187 ); 188 189 DEFINE_EVENT(dev_bbp_reg_evt, bbp_read, 190 TP_PROTO(struct mt7601u_dev *dev, u8 reg, u8 val), 191 TP_ARGS(dev, reg, val) 192 ); 193 194 DEFINE_EVENT(dev_bbp_reg_evt, bbp_write, 195 TP_PROTO(struct mt7601u_dev *dev, u8 reg, u8 val), 196 TP_ARGS(dev, reg, val) 197 ); 198 199 DECLARE_EVENT_CLASS(dev_simple_evt, 200 TP_PROTO(struct mt7601u_dev *dev, u8 val), 201 TP_ARGS(dev, val), 202 TP_STRUCT__entry( 203 DEV_ENTRY 204 __field(u8, val) 205 ), 206 TP_fast_assign( 207 DEV_ASSIGN; 208 __entry->val = val; 209 ), 210 TP_printk( 211 DEV_PR_FMT "%02hhx", DEV_PR_ARG, __entry->val 212 ) 213 ); 214 215 DEFINE_EVENT(dev_simple_evt, temp_mode, 216 TP_PROTO(struct mt7601u_dev *dev, u8 val), 217 TP_ARGS(dev, val) 218 ); 219 220 DEFINE_EVENT(dev_simple_evt, read_temp, 221 TP_PROTO(struct mt7601u_dev *dev, u8 val), 222 TP_ARGS(dev, val) 223 ); 224 225 DEFINE_EVENT(dev_simple_evt, freq_cal_adjust, 226 TP_PROTO(struct mt7601u_dev *dev, u8 val), 227 TP_ARGS(dev, val) 228 ); 229 230 TRACE_EVENT(freq_cal_offset, 231 TP_PROTO(struct mt7601u_dev *dev, u8 phy_mode, s8 freq_off), 232 TP_ARGS(dev, phy_mode, freq_off), 233 TP_STRUCT__entry( 234 DEV_ENTRY 235 __field(u8, phy_mode) 236 __field(s8, freq_off) 237 ), 238 TP_fast_assign( 239 DEV_ASSIGN; 240 __entry->phy_mode = phy_mode; 241 __entry->freq_off = freq_off; 242 ), 243 TP_printk(DEV_PR_FMT "phy:%02hhx off:%02hhx", 244 DEV_PR_ARG, __entry->phy_mode, __entry->freq_off) 245 ); 246 247 TRACE_EVENT(mt_rx, 248 TP_PROTO(struct mt7601u_dev *dev, struct mt7601u_rxwi *rxwi, u32 f), 249 TP_ARGS(dev, rxwi, f), 250 TP_STRUCT__entry( 251 DEV_ENTRY 252 __field_struct(struct mt7601u_rxwi, rxwi) 253 __field(u32, fce_info) 254 ), 255 TP_fast_assign( 256 DEV_ASSIGN; 257 __entry->rxwi = *rxwi; 258 __entry->fce_info = f; 259 ), 260 TP_printk(DEV_PR_FMT "rxi:%08x ctl:%08x frag_sn:%04hx rate:%04hx " 261 "uknw:%02hhx z:%02hhx%02hhx%02hhx snr:%02hhx " 262 "ant:%02hhx gain:%02hhx freq_o:%02hhx " 263 "r:%08x ea:%08x fce:%08x", DEV_PR_ARG, 264 le32_to_cpu(__entry->rxwi.rxinfo), 265 le32_to_cpu(__entry->rxwi.ctl), 266 le16_to_cpu(__entry->rxwi.frag_sn), 267 le16_to_cpu(__entry->rxwi.rate), 268 __entry->rxwi.unknown, 269 __entry->rxwi.zero[0], __entry->rxwi.zero[1], 270 __entry->rxwi.zero[2], 271 __entry->rxwi.snr, __entry->rxwi.ant, 272 __entry->rxwi.gain, __entry->rxwi.freq_off, 273 __entry->rxwi.resv2, __entry->rxwi.expert_ant, 274 __entry->fce_info) 275 ); 276 277 TRACE_EVENT(mt_tx, 278 TP_PROTO(struct mt7601u_dev *dev, struct sk_buff *skb, 279 struct mt76_sta *sta, struct mt76_txwi *h), 280 TP_ARGS(dev, skb, sta, h), 281 TP_STRUCT__entry( 282 DEV_ENTRY 283 __field_struct(struct mt76_txwi, h) 284 __field(struct sk_buff *, skb) 285 __field(struct mt76_sta *, sta) 286 ), 287 TP_fast_assign( 288 DEV_ASSIGN; 289 __entry->h = *h; 290 __entry->skb = skb; 291 __entry->sta = sta; 292 ), 293 TP_printk(DEV_PR_FMT "skb:%p sta:%p flg:%04hx rate_ctl:%04hx " 294 "ack:%02hhx wcid:%02hhx len_ctl:%05hx", DEV_PR_ARG, 295 __entry->skb, __entry->sta, 296 le16_to_cpu(__entry->h.flags), 297 le16_to_cpu(__entry->h.rate_ctl), 298 __entry->h.ack_ctl, __entry->h.wcid, 299 le16_to_cpu(__entry->h.len_ctl)) 300 ); 301 302 TRACE_EVENT(mt_tx_dma_done, 303 TP_PROTO(struct mt7601u_dev *dev, struct sk_buff *skb), 304 TP_ARGS(dev, skb), 305 TP_STRUCT__entry( 306 DEV_ENTRY 307 __field(struct sk_buff *, skb) 308 ), 309 TP_fast_assign( 310 DEV_ASSIGN; 311 __entry->skb = skb; 312 ), 313 TP_printk(DEV_PR_FMT "%p", DEV_PR_ARG, __entry->skb) 314 ); 315 316 TRACE_EVENT(mt_tx_status_cleaned, 317 TP_PROTO(struct mt7601u_dev *dev, int cleaned), 318 TP_ARGS(dev, cleaned), 319 TP_STRUCT__entry( 320 DEV_ENTRY 321 __field(int, cleaned) 322 ), 323 TP_fast_assign( 324 DEV_ASSIGN; 325 __entry->cleaned = cleaned; 326 ), 327 TP_printk(DEV_PR_FMT "%d", DEV_PR_ARG, __entry->cleaned) 328 ); 329 330 TRACE_EVENT(mt_tx_status, 331 TP_PROTO(struct mt7601u_dev *dev, u32 stat1, u32 stat2), 332 TP_ARGS(dev, stat1, stat2), 333 TP_STRUCT__entry( 334 DEV_ENTRY 335 __field(u32, stat1) __field(u32, stat2) 336 ), 337 TP_fast_assign( 338 DEV_ASSIGN; 339 __entry->stat1 = stat1; 340 __entry->stat2 = stat2; 341 ), 342 TP_printk(DEV_PR_FMT "%08x %08x", 343 DEV_PR_ARG, __entry->stat1, __entry->stat2) 344 ); 345 346 TRACE_EVENT(mt_rx_dma_aggr, 347 TP_PROTO(struct mt7601u_dev *dev, int cnt, bool paged), 348 TP_ARGS(dev, cnt, paged), 349 TP_STRUCT__entry( 350 DEV_ENTRY 351 __field(u8, cnt) 352 __field(bool, paged) 353 ), 354 TP_fast_assign( 355 DEV_ASSIGN; 356 __entry->cnt = cnt; 357 __entry->paged = paged; 358 ), 359 TP_printk(DEV_PR_FMT "cnt:%d paged:%d", 360 DEV_PR_ARG, __entry->cnt, __entry->paged) 361 ); 362 363 DEFINE_EVENT(dev_simple_evt, set_key, 364 TP_PROTO(struct mt7601u_dev *dev, u8 val), 365 TP_ARGS(dev, val) 366 ); 367 368 TRACE_EVENT(set_shared_key, 369 TP_PROTO(struct mt7601u_dev *dev, u8 vid, u8 key), 370 TP_ARGS(dev, vid, key), 371 TP_STRUCT__entry( 372 DEV_ENTRY 373 __field(u8, vid) 374 __field(u8, key) 375 ), 376 TP_fast_assign( 377 DEV_ASSIGN; 378 __entry->vid = vid; 379 __entry->key = key; 380 ), 381 TP_printk(DEV_PR_FMT "phy:%02hhx off:%02hhx", 382 DEV_PR_ARG, __entry->vid, __entry->key) 383 ); 384 385 #endif 386 387 #undef TRACE_INCLUDE_PATH 388 #define TRACE_INCLUDE_PATH . 389 #undef TRACE_INCLUDE_FILE 390 #define TRACE_INCLUDE_FILE trace 391 392 #include <trace/define_trace.h> 393