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> 314