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(__MT7601U_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) 16 #define __MT7601U_TRACE_H 17 18 #include <linux/tracepoint.h> 19 #include "mt7601u.h" 20 #include "mac.h" 21 22 #undef TRACE_SYSTEM 23 #define TRACE_SYSTEM mt7601u 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 mt7601u_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, reg_read, 55 TP_PROTO(struct mt7601u_dev *dev, u32 reg, u32 val), 56 TP_ARGS(dev, reg, val) 57 ); 58 59 DEFINE_EVENT(dev_reg_evt, reg_write, 60 TP_PROTO(struct mt7601u_dev *dev, u32 reg, u32 val), 61 TP_ARGS(dev, reg, val) 62 ); 63 64 TRACE_EVENT(mt_submit_urb, 65 TP_PROTO(struct mt7601u_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_mt_submit_urb_sync(__dev, __pipe, __len) ({ \ 80 struct urb u; \ 81 u.pipe = __pipe; \ 82 u.transfer_buffer_length = __len; \ 83 trace_mt_submit_urb(__dev, &u); \ 84 }) 85 86 TRACE_EVENT(mt_mcu_msg_send, 87 TP_PROTO(struct mt7601u_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(mt_vend_req, 107 TP_PROTO(struct mt7601u_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 TRACE_EVENT(ee_read, 135 TP_PROTO(struct mt7601u_dev *dev, int offset, u16 val), 136 TP_ARGS(dev, offset, val), 137 TP_STRUCT__entry( 138 DEV_ENTRY 139 __field(int, o) __field(u16, v) 140 ), 141 TP_fast_assign( 142 DEV_ASSIGN; 143 __entry->o = offset; 144 __entry->v = val; 145 ), 146 TP_printk(DEV_PR_FMT "%04x=%04x", DEV_PR_ARG, __entry->o, __entry->v) 147 ); 148 149 DECLARE_EVENT_CLASS(dev_rf_reg_evt, 150 TP_PROTO(struct mt7601u_dev *dev, u8 bank, u8 reg, u8 val), 151 TP_ARGS(dev, bank, reg, val), 152 TP_STRUCT__entry( 153 DEV_ENTRY 154 __field(u8, bank) 155 __field(u8, reg) 156 __field(u8, val) 157 ), 158 TP_fast_assign( 159 DEV_ASSIGN; 160 REG_ASSIGN; 161 __entry->bank = bank; 162 ), 163 TP_printk( 164 DEV_PR_FMT "%02hhx:%02hhx=%02hhx", 165 DEV_PR_ARG, __entry->bank, __entry->reg, __entry->val 166 ) 167 ); 168 169 DEFINE_EVENT(dev_rf_reg_evt, rf_read, 170 TP_PROTO(struct mt7601u_dev *dev, u8 bank, u8 reg, u8 val), 171 TP_ARGS(dev, bank, reg, val) 172 ); 173 174 DEFINE_EVENT(dev_rf_reg_evt, rf_write, 175 TP_PROTO(struct mt7601u_dev *dev, u8 bank, u8 reg, u8 val), 176 TP_ARGS(dev, bank, reg, val) 177 ); 178 179 DECLARE_EVENT_CLASS(dev_bbp_reg_evt, 180 TP_PROTO(struct mt7601u_dev *dev, u8 reg, u8 val), 181 TP_ARGS(dev, reg, val), 182 TP_STRUCT__entry( 183 DEV_ENTRY 184 __field(u8, reg) 185 __field(u8, val) 186 ), 187 TP_fast_assign( 188 DEV_ASSIGN; 189 REG_ASSIGN; 190 ), 191 TP_printk( 192 DEV_PR_FMT "%02hhx=%02hhx", 193 DEV_PR_ARG, __entry->reg, __entry->val 194 ) 195 ); 196 197 DEFINE_EVENT(dev_bbp_reg_evt, bbp_read, 198 TP_PROTO(struct mt7601u_dev *dev, u8 reg, u8 val), 199 TP_ARGS(dev, reg, val) 200 ); 201 202 DEFINE_EVENT(dev_bbp_reg_evt, bbp_write, 203 TP_PROTO(struct mt7601u_dev *dev, u8 reg, u8 val), 204 TP_ARGS(dev, reg, val) 205 ); 206 207 DECLARE_EVENT_CLASS(dev_simple_evt, 208 TP_PROTO(struct mt7601u_dev *dev, u8 val), 209 TP_ARGS(dev, val), 210 TP_STRUCT__entry( 211 DEV_ENTRY 212 __field(u8, val) 213 ), 214 TP_fast_assign( 215 DEV_ASSIGN; 216 __entry->val = val; 217 ), 218 TP_printk( 219 DEV_PR_FMT "%02hhx", DEV_PR_ARG, __entry->val 220 ) 221 ); 222 223 DEFINE_EVENT(dev_simple_evt, temp_mode, 224 TP_PROTO(struct mt7601u_dev *dev, u8 val), 225 TP_ARGS(dev, val) 226 ); 227 228 DEFINE_EVENT(dev_simple_evt, read_temp, 229 TP_PROTO(struct mt7601u_dev *dev, u8 val), 230 TP_ARGS(dev, val) 231 ); 232 233 DEFINE_EVENT(dev_simple_evt, freq_cal_adjust, 234 TP_PROTO(struct mt7601u_dev *dev, u8 val), 235 TP_ARGS(dev, val) 236 ); 237 238 TRACE_EVENT(freq_cal_offset, 239 TP_PROTO(struct mt7601u_dev *dev, u8 phy_mode, s8 freq_off), 240 TP_ARGS(dev, phy_mode, freq_off), 241 TP_STRUCT__entry( 242 DEV_ENTRY 243 __field(u8, phy_mode) 244 __field(s8, freq_off) 245 ), 246 TP_fast_assign( 247 DEV_ASSIGN; 248 __entry->phy_mode = phy_mode; 249 __entry->freq_off = freq_off; 250 ), 251 TP_printk(DEV_PR_FMT "phy:%02hhx off:%02hhx", 252 DEV_PR_ARG, __entry->phy_mode, __entry->freq_off) 253 ); 254 255 TRACE_EVENT(mt_rx, 256 TP_PROTO(struct mt7601u_dev *dev, struct mt7601u_rxwi *rxwi, u32 f), 257 TP_ARGS(dev, rxwi, f), 258 TP_STRUCT__entry( 259 DEV_ENTRY 260 __field_struct(struct mt7601u_rxwi, rxwi) 261 __field(u32, fce_info) 262 ), 263 TP_fast_assign( 264 DEV_ASSIGN; 265 __entry->rxwi = *rxwi; 266 __entry->fce_info = f; 267 ), 268 TP_printk(DEV_PR_FMT "rxi:%08x ctl:%08x frag_sn:%04hx rate:%04hx " 269 "uknw:%02hhx z:%02hhx%02hhx%02hhx snr:%02hhx " 270 "ant:%02hhx gain:%02hhx freq_o:%02hhx " 271 "r:%08x ea:%08x fce:%08x", DEV_PR_ARG, 272 le32_to_cpu(__entry->rxwi.rxinfo), 273 le32_to_cpu(__entry->rxwi.ctl), 274 le16_to_cpu(__entry->rxwi.frag_sn), 275 le16_to_cpu(__entry->rxwi.rate), 276 __entry->rxwi.unknown, 277 __entry->rxwi.zero[0], __entry->rxwi.zero[1], 278 __entry->rxwi.zero[2], 279 __entry->rxwi.snr, __entry->rxwi.ant, 280 __entry->rxwi.gain, __entry->rxwi.freq_off, 281 __entry->rxwi.resv2, __entry->rxwi.expert_ant, 282 __entry->fce_info) 283 ); 284 285 TRACE_EVENT(mt_tx, 286 TP_PROTO(struct mt7601u_dev *dev, struct sk_buff *skb, 287 struct mt76_sta *sta, struct mt76_txwi *h), 288 TP_ARGS(dev, skb, sta, h), 289 TP_STRUCT__entry( 290 DEV_ENTRY 291 __field_struct(struct mt76_txwi, h) 292 __field(struct sk_buff *, skb) 293 __field(struct mt76_sta *, sta) 294 ), 295 TP_fast_assign( 296 DEV_ASSIGN; 297 __entry->h = *h; 298 __entry->skb = skb; 299 __entry->sta = sta; 300 ), 301 TP_printk(DEV_PR_FMT "skb:%p sta:%p flg:%04hx rate_ctl:%04hx " 302 "ack:%02hhx wcid:%02hhx len_ctl:%05hx", DEV_PR_ARG, 303 __entry->skb, __entry->sta, 304 le16_to_cpu(__entry->h.flags), 305 le16_to_cpu(__entry->h.rate_ctl), 306 __entry->h.ack_ctl, __entry->h.wcid, 307 le16_to_cpu(__entry->h.len_ctl)) 308 ); 309 310 TRACE_EVENT(mt_tx_dma_done, 311 TP_PROTO(struct mt7601u_dev *dev, struct sk_buff *skb), 312 TP_ARGS(dev, skb), 313 TP_STRUCT__entry( 314 DEV_ENTRY 315 __field(struct sk_buff *, skb) 316 ), 317 TP_fast_assign( 318 DEV_ASSIGN; 319 __entry->skb = skb; 320 ), 321 TP_printk(DEV_PR_FMT "%p", DEV_PR_ARG, __entry->skb) 322 ); 323 324 TRACE_EVENT(mt_tx_status_cleaned, 325 TP_PROTO(struct mt7601u_dev *dev, int cleaned), 326 TP_ARGS(dev, cleaned), 327 TP_STRUCT__entry( 328 DEV_ENTRY 329 __field(int, cleaned) 330 ), 331 TP_fast_assign( 332 DEV_ASSIGN; 333 __entry->cleaned = cleaned; 334 ), 335 TP_printk(DEV_PR_FMT "%d", DEV_PR_ARG, __entry->cleaned) 336 ); 337 338 TRACE_EVENT(mt_tx_status, 339 TP_PROTO(struct mt7601u_dev *dev, u32 stat1, u32 stat2), 340 TP_ARGS(dev, stat1, stat2), 341 TP_STRUCT__entry( 342 DEV_ENTRY 343 __field(u32, stat1) __field(u32, stat2) 344 ), 345 TP_fast_assign( 346 DEV_ASSIGN; 347 __entry->stat1 = stat1; 348 __entry->stat2 = stat2; 349 ), 350 TP_printk(DEV_PR_FMT "%08x %08x", 351 DEV_PR_ARG, __entry->stat1, __entry->stat2) 352 ); 353 354 TRACE_EVENT(mt_rx_dma_aggr, 355 TP_PROTO(struct mt7601u_dev *dev, int cnt, bool paged), 356 TP_ARGS(dev, cnt, paged), 357 TP_STRUCT__entry( 358 DEV_ENTRY 359 __field(u8, cnt) 360 __field(bool, paged) 361 ), 362 TP_fast_assign( 363 DEV_ASSIGN; 364 __entry->cnt = cnt; 365 __entry->paged = paged; 366 ), 367 TP_printk(DEV_PR_FMT "cnt:%d paged:%d", 368 DEV_PR_ARG, __entry->cnt, __entry->paged) 369 ); 370 371 DEFINE_EVENT(dev_simple_evt, set_key, 372 TP_PROTO(struct mt7601u_dev *dev, u8 val), 373 TP_ARGS(dev, val) 374 ); 375 376 TRACE_EVENT(set_shared_key, 377 TP_PROTO(struct mt7601u_dev *dev, u8 vid, u8 key), 378 TP_ARGS(dev, vid, key), 379 TP_STRUCT__entry( 380 DEV_ENTRY 381 __field(u8, vid) 382 __field(u8, key) 383 ), 384 TP_fast_assign( 385 DEV_ASSIGN; 386 __entry->vid = vid; 387 __entry->key = key; 388 ), 389 TP_printk(DEV_PR_FMT "phy:%02hhx off:%02hhx", 390 DEV_PR_ARG, __entry->vid, __entry->key) 391 ); 392 393 #endif 394 395 #undef TRACE_INCLUDE_PATH 396 #define TRACE_INCLUDE_PATH . 397 #undef TRACE_INCLUDE_FILE 398 #define TRACE_INCLUDE_FILE trace 399 400 #include <trace/define_trace.h> 401