1 /* SPDX-License-Identifier: BSD-3-Clause-Clear */ 2 /* 3 * Copyright (c) 2019 The Linux Foundation. All rights reserved. 4 */ 5 6 #if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) 7 8 #include <linux/tracepoint.h> 9 #include "core.h" 10 11 #define _TRACE_H_ 12 13 /* create empty functions when tracing is disabled */ 14 #if !defined(CONFIG_ATH11K_TRACING) 15 #undef TRACE_EVENT 16 #define TRACE_EVENT(name, proto, ...) \ 17 static inline void trace_ ## name(proto) {} \ 18 static inline bool trace_##name##_enabled(void) \ 19 { \ 20 return false; \ 21 } 22 23 #undef DECLARE_EVENT_CLASS 24 #define DECLARE_EVENT_CLASS(...) 25 #undef DEFINE_EVENT 26 #define DEFINE_EVENT(evt_class, name, proto, ...) \ 27 static inline void trace_ ## name(proto) {} 28 #endif /* !CONFIG_ATH11K_TRACING || __CHECKER__ */ 29 30 #undef TRACE_SYSTEM 31 #define TRACE_SYSTEM ath11k 32 33 #define ATH11K_MSG_MAX 400 34 35 TRACE_EVENT(ath11k_htt_pktlog, 36 TP_PROTO(struct ath11k *ar, const void *buf, u16 buf_len, 37 u32 pktlog_checksum), 38 39 TP_ARGS(ar, buf, buf_len, pktlog_checksum), 40 41 TP_STRUCT__entry( 42 __string(device, dev_name(ar->ab->dev)) 43 __string(driver, dev_driver_string(ar->ab->dev)) 44 __field(u16, buf_len) 45 __field(u32, pktlog_checksum) 46 __dynamic_array(u8, pktlog, buf_len) 47 ), 48 49 TP_fast_assign( 50 __assign_str(device, dev_name(ar->ab->dev)); 51 __assign_str(driver, dev_driver_string(ar->ab->dev)); 52 __entry->buf_len = buf_len; 53 __entry->pktlog_checksum = pktlog_checksum; 54 memcpy(__get_dynamic_array(pktlog), buf, buf_len); 55 ), 56 57 TP_printk( 58 "%s %s size %u pktlog_checksum %d", 59 __get_str(driver), 60 __get_str(device), 61 __entry->buf_len, 62 __entry->pktlog_checksum 63 ) 64 ); 65 66 TRACE_EVENT(ath11k_htt_ppdu_stats, 67 TP_PROTO(struct ath11k *ar, const void *data, size_t len), 68 69 TP_ARGS(ar, data, len), 70 71 TP_STRUCT__entry( 72 __string(device, dev_name(ar->ab->dev)) 73 __string(driver, dev_driver_string(ar->ab->dev)) 74 __field(u16, len) 75 __dynamic_array(u8, ppdu, len) 76 ), 77 78 TP_fast_assign( 79 __assign_str(device, dev_name(ar->ab->dev)); 80 __assign_str(driver, dev_driver_string(ar->ab->dev)); 81 __entry->len = len; 82 memcpy(__get_dynamic_array(ppdu), data, len); 83 ), 84 85 TP_printk( 86 "%s %s ppdu len %d", 87 __get_str(driver), 88 __get_str(device), 89 __entry->len 90 ) 91 ); 92 93 TRACE_EVENT(ath11k_htt_rxdesc, 94 TP_PROTO(struct ath11k *ar, const void *data, size_t log_type, size_t len), 95 96 TP_ARGS(ar, data, log_type, len), 97 98 TP_STRUCT__entry( 99 __string(device, dev_name(ar->ab->dev)) 100 __string(driver, dev_driver_string(ar->ab->dev)) 101 __field(u16, len) 102 __field(u16, log_type) 103 __dynamic_array(u8, rxdesc, len) 104 ), 105 106 TP_fast_assign( 107 __assign_str(device, dev_name(ar->ab->dev)); 108 __assign_str(driver, dev_driver_string(ar->ab->dev)); 109 __entry->len = len; 110 __entry->log_type = log_type; 111 memcpy(__get_dynamic_array(rxdesc), data, len); 112 ), 113 114 TP_printk( 115 "%s %s rxdesc len %d type %d", 116 __get_str(driver), 117 __get_str(device), 118 __entry->len, 119 __entry->log_type 120 ) 121 ); 122 123 DECLARE_EVENT_CLASS(ath11k_log_event, 124 TP_PROTO(struct ath11k_base *ab, struct va_format *vaf), 125 TP_ARGS(ab, vaf), 126 TP_STRUCT__entry( 127 __string(device, dev_name(ab->dev)) 128 __string(driver, dev_driver_string(ab->dev)) 129 __vstring(msg, vaf->fmt, vaf->va) 130 ), 131 TP_fast_assign( 132 __assign_str(device, dev_name(ab->dev)); 133 __assign_str(driver, dev_driver_string(ab->dev)); 134 __assign_vstr(msg, vaf->fmt, vaf->va); 135 ), 136 TP_printk( 137 "%s %s %s", 138 __get_str(driver), 139 __get_str(device), 140 __get_str(msg) 141 ) 142 ); 143 144 DEFINE_EVENT(ath11k_log_event, ath11k_log_err, 145 TP_PROTO(struct ath11k_base *ab, struct va_format *vaf), 146 TP_ARGS(ab, vaf) 147 ); 148 149 DEFINE_EVENT(ath11k_log_event, ath11k_log_warn, 150 TP_PROTO(struct ath11k_base *ab, struct va_format *vaf), 151 TP_ARGS(ab, vaf) 152 ); 153 154 DEFINE_EVENT(ath11k_log_event, ath11k_log_info, 155 TP_PROTO(struct ath11k_base *ab, struct va_format *vaf), 156 TP_ARGS(ab, vaf) 157 ); 158 159 TRACE_EVENT(ath11k_wmi_cmd, 160 TP_PROTO(struct ath11k_base *ab, int id, const void *buf, size_t buf_len), 161 162 TP_ARGS(ab, id, buf, buf_len), 163 164 TP_STRUCT__entry( 165 __string(device, dev_name(ab->dev)) 166 __string(driver, dev_driver_string(ab->dev)) 167 __field(unsigned int, id) 168 __field(size_t, buf_len) 169 __dynamic_array(u8, buf, buf_len) 170 ), 171 172 TP_fast_assign( 173 __assign_str(device, dev_name(ab->dev)); 174 __assign_str(driver, dev_driver_string(ab->dev)); 175 __entry->id = id; 176 __entry->buf_len = buf_len; 177 memcpy(__get_dynamic_array(buf), buf, buf_len); 178 ), 179 180 TP_printk( 181 "%s %s id %d len %zu", 182 __get_str(driver), 183 __get_str(device), 184 __entry->id, 185 __entry->buf_len 186 ) 187 ); 188 189 TRACE_EVENT(ath11k_wmi_event, 190 TP_PROTO(struct ath11k_base *ab, int id, const void *buf, size_t buf_len), 191 192 TP_ARGS(ab, id, buf, buf_len), 193 194 TP_STRUCT__entry( 195 __string(device, dev_name(ab->dev)) 196 __string(driver, dev_driver_string(ab->dev)) 197 __field(unsigned int, id) 198 __field(size_t, buf_len) 199 __dynamic_array(u8, buf, buf_len) 200 ), 201 202 TP_fast_assign( 203 __assign_str(device, dev_name(ab->dev)); 204 __assign_str(driver, dev_driver_string(ab->dev)); 205 __entry->id = id; 206 __entry->buf_len = buf_len; 207 memcpy(__get_dynamic_array(buf), buf, buf_len); 208 ), 209 210 TP_printk( 211 "%s %s id %d len %zu", 212 __get_str(driver), 213 __get_str(device), 214 __entry->id, 215 __entry->buf_len 216 ) 217 ); 218 219 TRACE_EVENT(ath11k_log_dbg, 220 TP_PROTO(struct ath11k_base *ab, unsigned int level, struct va_format *vaf), 221 222 TP_ARGS(ab, level, vaf), 223 224 TP_STRUCT__entry( 225 __string(device, dev_name(ab->dev)) 226 __string(driver, dev_driver_string(ab->dev)) 227 __field(unsigned int, level) 228 __dynamic_array(char, msg, ATH11K_MSG_MAX) 229 ), 230 231 TP_fast_assign( 232 __assign_str(device, dev_name(ab->dev)); 233 __assign_str(driver, dev_driver_string(ab->dev)); 234 __entry->level = level; 235 WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg), 236 ATH11K_MSG_MAX, vaf->fmt, 237 *vaf->va) >= ATH11K_MSG_MAX); 238 ), 239 240 TP_printk( 241 "%s %s %s", 242 __get_str(driver), 243 __get_str(device), 244 __get_str(msg) 245 ) 246 ); 247 248 TRACE_EVENT(ath11k_log_dbg_dump, 249 TP_PROTO(struct ath11k_base *ab, const char *msg, const char *prefix, 250 const void *buf, size_t buf_len), 251 252 TP_ARGS(ab, msg, prefix, buf, buf_len), 253 254 TP_STRUCT__entry( 255 __string(device, dev_name(ab->dev)) 256 __string(driver, dev_driver_string(ab->dev)) 257 __string(msg, msg) 258 __string(prefix, prefix) 259 __field(size_t, buf_len) 260 __dynamic_array(u8, buf, buf_len) 261 ), 262 263 TP_fast_assign( 264 __assign_str(device, dev_name(ab->dev)); 265 __assign_str(driver, dev_driver_string(ab->dev)); 266 __assign_str(msg, msg); 267 __assign_str(prefix, prefix); 268 __entry->buf_len = buf_len; 269 memcpy(__get_dynamic_array(buf), buf, buf_len); 270 ), 271 272 TP_printk( 273 "%s %s %s/%s\n", 274 __get_str(driver), 275 __get_str(device), 276 __get_str(prefix), 277 __get_str(msg) 278 ) 279 ); 280 281 TRACE_EVENT(ath11k_wmi_diag, 282 TP_PROTO(struct ath11k_base *ab, const void *data, size_t len), 283 284 TP_ARGS(ab, data, len), 285 286 TP_STRUCT__entry( 287 __string(device, dev_name(ab->dev)) 288 __string(driver, dev_driver_string(ab->dev)) 289 __field(u16, len) 290 __dynamic_array(u8, data, len) 291 ), 292 293 TP_fast_assign( 294 __assign_str(device, dev_name(ab->dev)); 295 __assign_str(driver, dev_driver_string(ab->dev)); 296 __entry->len = len; 297 memcpy(__get_dynamic_array(data), data, len); 298 ), 299 300 TP_printk( 301 "%s %s tlv diag len %d", 302 __get_str(driver), 303 __get_str(device), 304 __entry->len 305 ) 306 ); 307 308 TRACE_EVENT(ath11k_ps_timekeeper, 309 TP_PROTO(struct ath11k *ar, const void *peer_addr, 310 u32 peer_ps_timestamp, u8 peer_ps_state), 311 TP_ARGS(ar, peer_addr, peer_ps_timestamp, peer_ps_state), 312 313 TP_STRUCT__entry(__string(device, dev_name(ar->ab->dev)) 314 __string(driver, dev_driver_string(ar->ab->dev)) 315 __dynamic_array(u8, peer_addr, ETH_ALEN) 316 __field(u8, peer_ps_state) 317 __field(u32, peer_ps_timestamp) 318 ), 319 320 TP_fast_assign(__assign_str(device, dev_name(ar->ab->dev)); 321 __assign_str(driver, dev_driver_string(ar->ab->dev)); 322 memcpy(__get_dynamic_array(peer_addr), peer_addr, 323 ETH_ALEN); 324 __entry->peer_ps_state = peer_ps_state; 325 __entry->peer_ps_timestamp = peer_ps_timestamp; 326 ), 327 328 TP_printk("%s %s %u %u", 329 __get_str(driver), 330 __get_str(device), 331 __entry->peer_ps_state, 332 __entry->peer_ps_timestamp 333 ) 334 ); 335 336 #endif /* _TRACE_H_ || TRACE_HEADER_MULTI_READ*/ 337 338 /* we don't want to use include/trace/events */ 339 #undef TRACE_INCLUDE_PATH 340 #define TRACE_INCLUDE_PATH . 341 #undef TRACE_INCLUDE_FILE 342 #define TRACE_INCLUDE_FILE trace 343 344 /* This part must be outside protection */ 345 #include <trace/define_trace.h> 346