0001
0002
0003
0004
0005
0006
0007 #if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
0008
0009 #include <linux/tracepoint.h>
0010 #include "core.h"
0011
0012 #if !defined(_TRACE_H_)
0013 static inline u32 ath10k_frm_hdr_len(const void *buf, size_t len)
0014 {
0015 const struct ieee80211_hdr *hdr = buf;
0016
0017
0018
0019
0020
0021
0022 return min_t(u32, len, ieee80211_hdrlen(hdr->frame_control));
0023 }
0024 #endif
0025
0026 #define _TRACE_H_
0027
0028
0029 #if !defined(CONFIG_ATH10K_TRACING)
0030 #undef TRACE_EVENT
0031 #define TRACE_EVENT(name, proto, ...) \
0032 static inline void trace_ ## name(proto) {} \
0033 static inline bool trace_##name##_enabled(void) \
0034 { \
0035 return false; \
0036 }
0037 #undef DECLARE_EVENT_CLASS
0038 #define DECLARE_EVENT_CLASS(...)
0039 #undef DEFINE_EVENT
0040 #define DEFINE_EVENT(evt_class, name, proto, ...) \
0041 static inline void trace_ ## name(proto) {}
0042 #endif
0043
0044 #undef TRACE_SYSTEM
0045 #define TRACE_SYSTEM ath10k
0046
0047 #define ATH10K_MSG_MAX 400
0048
0049 DECLARE_EVENT_CLASS(ath10k_log_event,
0050 TP_PROTO(struct ath10k *ar, struct va_format *vaf),
0051 TP_ARGS(ar, vaf),
0052 TP_STRUCT__entry(
0053 __string(device, dev_name(ar->dev))
0054 __string(driver, dev_driver_string(ar->dev))
0055 __vstring(msg, vaf->fmt, vaf->va)
0056 ),
0057 TP_fast_assign(
0058 __assign_str(device, dev_name(ar->dev));
0059 __assign_str(driver, dev_driver_string(ar->dev));
0060 __assign_vstr(msg, vaf->fmt, vaf->va);
0061 ),
0062 TP_printk(
0063 "%s %s %s",
0064 __get_str(driver),
0065 __get_str(device),
0066 __get_str(msg)
0067 )
0068 );
0069
0070 DEFINE_EVENT(ath10k_log_event, ath10k_log_err,
0071 TP_PROTO(struct ath10k *ar, struct va_format *vaf),
0072 TP_ARGS(ar, vaf)
0073 );
0074
0075 DEFINE_EVENT(ath10k_log_event, ath10k_log_warn,
0076 TP_PROTO(struct ath10k *ar, struct va_format *vaf),
0077 TP_ARGS(ar, vaf)
0078 );
0079
0080 DEFINE_EVENT(ath10k_log_event, ath10k_log_info,
0081 TP_PROTO(struct ath10k *ar, struct va_format *vaf),
0082 TP_ARGS(ar, vaf)
0083 );
0084
0085 TRACE_EVENT(ath10k_log_dbg,
0086 TP_PROTO(struct ath10k *ar, unsigned int level, struct va_format *vaf),
0087 TP_ARGS(ar, level, vaf),
0088 TP_STRUCT__entry(
0089 __string(device, dev_name(ar->dev))
0090 __string(driver, dev_driver_string(ar->dev))
0091 __field(unsigned int, level)
0092 __vstring(msg, vaf->fmt, vaf->va)
0093 ),
0094 TP_fast_assign(
0095 __assign_str(device, dev_name(ar->dev));
0096 __assign_str(driver, dev_driver_string(ar->dev));
0097 __entry->level = level;
0098 __assign_vstr(msg, vaf->fmt, vaf->va);
0099 ),
0100 TP_printk(
0101 "%s %s %s",
0102 __get_str(driver),
0103 __get_str(device),
0104 __get_str(msg)
0105 )
0106 );
0107
0108 TRACE_EVENT(ath10k_log_dbg_dump,
0109 TP_PROTO(struct ath10k *ar, const char *msg, const char *prefix,
0110 const void *buf, size_t buf_len),
0111
0112 TP_ARGS(ar, msg, prefix, buf, buf_len),
0113
0114 TP_STRUCT__entry(
0115 __string(device, dev_name(ar->dev))
0116 __string(driver, dev_driver_string(ar->dev))
0117 __string(msg, msg)
0118 __string(prefix, prefix)
0119 __field(size_t, buf_len)
0120 __dynamic_array(u8, buf, buf_len)
0121 ),
0122
0123 TP_fast_assign(
0124 __assign_str(device, dev_name(ar->dev));
0125 __assign_str(driver, dev_driver_string(ar->dev));
0126 __assign_str(msg, msg);
0127 __assign_str(prefix, prefix);
0128 __entry->buf_len = buf_len;
0129 memcpy(__get_dynamic_array(buf), buf, buf_len);
0130 ),
0131
0132 TP_printk(
0133 "%s %s %s/%s\n",
0134 __get_str(driver),
0135 __get_str(device),
0136 __get_str(prefix),
0137 __get_str(msg)
0138 )
0139 );
0140
0141 TRACE_EVENT(ath10k_wmi_cmd,
0142 TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len),
0143
0144 TP_ARGS(ar, id, buf, buf_len),
0145
0146 TP_STRUCT__entry(
0147 __string(device, dev_name(ar->dev))
0148 __string(driver, dev_driver_string(ar->dev))
0149 __field(unsigned int, id)
0150 __field(size_t, buf_len)
0151 __dynamic_array(u8, buf, buf_len)
0152 ),
0153
0154 TP_fast_assign(
0155 __assign_str(device, dev_name(ar->dev));
0156 __assign_str(driver, dev_driver_string(ar->dev));
0157 __entry->id = id;
0158 __entry->buf_len = buf_len;
0159 memcpy(__get_dynamic_array(buf), buf, buf_len);
0160 ),
0161
0162 TP_printk(
0163 "%s %s id %d len %zu",
0164 __get_str(driver),
0165 __get_str(device),
0166 __entry->id,
0167 __entry->buf_len
0168 )
0169 );
0170
0171 TRACE_EVENT(ath10k_wmi_event,
0172 TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len),
0173
0174 TP_ARGS(ar, id, buf, buf_len),
0175
0176 TP_STRUCT__entry(
0177 __string(device, dev_name(ar->dev))
0178 __string(driver, dev_driver_string(ar->dev))
0179 __field(unsigned int, id)
0180 __field(size_t, buf_len)
0181 __dynamic_array(u8, buf, buf_len)
0182 ),
0183
0184 TP_fast_assign(
0185 __assign_str(device, dev_name(ar->dev));
0186 __assign_str(driver, dev_driver_string(ar->dev));
0187 __entry->id = id;
0188 __entry->buf_len = buf_len;
0189 memcpy(__get_dynamic_array(buf), buf, buf_len);
0190 ),
0191
0192 TP_printk(
0193 "%s %s id %d len %zu",
0194 __get_str(driver),
0195 __get_str(device),
0196 __entry->id,
0197 __entry->buf_len
0198 )
0199 );
0200
0201 TRACE_EVENT(ath10k_htt_stats,
0202 TP_PROTO(struct ath10k *ar, const void *buf, size_t buf_len),
0203
0204 TP_ARGS(ar, buf, buf_len),
0205
0206 TP_STRUCT__entry(
0207 __string(device, dev_name(ar->dev))
0208 __string(driver, dev_driver_string(ar->dev))
0209 __field(size_t, buf_len)
0210 __dynamic_array(u8, buf, buf_len)
0211 ),
0212
0213 TP_fast_assign(
0214 __assign_str(device, dev_name(ar->dev));
0215 __assign_str(driver, dev_driver_string(ar->dev));
0216 __entry->buf_len = buf_len;
0217 memcpy(__get_dynamic_array(buf), buf, buf_len);
0218 ),
0219
0220 TP_printk(
0221 "%s %s len %zu",
0222 __get_str(driver),
0223 __get_str(device),
0224 __entry->buf_len
0225 )
0226 );
0227
0228 TRACE_EVENT(ath10k_wmi_dbglog,
0229 TP_PROTO(struct ath10k *ar, const void *buf, size_t buf_len),
0230
0231 TP_ARGS(ar, buf, buf_len),
0232
0233 TP_STRUCT__entry(
0234 __string(device, dev_name(ar->dev))
0235 __string(driver, dev_driver_string(ar->dev))
0236 __field(u8, hw_type)
0237 __field(size_t, buf_len)
0238 __dynamic_array(u8, buf, buf_len)
0239 ),
0240
0241 TP_fast_assign(
0242 __assign_str(device, dev_name(ar->dev));
0243 __assign_str(driver, dev_driver_string(ar->dev));
0244 __entry->hw_type = ar->hw_rev;
0245 __entry->buf_len = buf_len;
0246 memcpy(__get_dynamic_array(buf), buf, buf_len);
0247 ),
0248
0249 TP_printk(
0250 "%s %s %d len %zu",
0251 __get_str(driver),
0252 __get_str(device),
0253 __entry->hw_type,
0254 __entry->buf_len
0255 )
0256 );
0257
0258 TRACE_EVENT(ath10k_htt_pktlog,
0259 TP_PROTO(struct ath10k *ar, const void *buf, u16 buf_len),
0260
0261 TP_ARGS(ar, buf, buf_len),
0262
0263 TP_STRUCT__entry(
0264 __string(device, dev_name(ar->dev))
0265 __string(driver, dev_driver_string(ar->dev))
0266 __field(u8, hw_type)
0267 __field(u16, buf_len)
0268 __dynamic_array(u8, pktlog, buf_len)
0269 ),
0270
0271 TP_fast_assign(
0272 __assign_str(device, dev_name(ar->dev));
0273 __assign_str(driver, dev_driver_string(ar->dev));
0274 __entry->hw_type = ar->hw_rev;
0275 __entry->buf_len = buf_len;
0276 memcpy(__get_dynamic_array(pktlog), buf, buf_len);
0277 ),
0278
0279 TP_printk(
0280 "%s %s %d size %u",
0281 __get_str(driver),
0282 __get_str(device),
0283 __entry->hw_type,
0284 __entry->buf_len
0285 )
0286 );
0287
0288 TRACE_EVENT(ath10k_htt_tx,
0289 TP_PROTO(struct ath10k *ar, u16 msdu_id, u16 msdu_len,
0290 u8 vdev_id, u8 tid),
0291
0292 TP_ARGS(ar, msdu_id, msdu_len, vdev_id, tid),
0293
0294 TP_STRUCT__entry(
0295 __string(device, dev_name(ar->dev))
0296 __string(driver, dev_driver_string(ar->dev))
0297 __field(u16, msdu_id)
0298 __field(u16, msdu_len)
0299 __field(u8, vdev_id)
0300 __field(u8, tid)
0301 ),
0302
0303 TP_fast_assign(
0304 __assign_str(device, dev_name(ar->dev));
0305 __assign_str(driver, dev_driver_string(ar->dev));
0306 __entry->msdu_id = msdu_id;
0307 __entry->msdu_len = msdu_len;
0308 __entry->vdev_id = vdev_id;
0309 __entry->tid = tid;
0310 ),
0311
0312 TP_printk(
0313 "%s %s msdu_id %d msdu_len %d vdev_id %d tid %d",
0314 __get_str(driver),
0315 __get_str(device),
0316 __entry->msdu_id,
0317 __entry->msdu_len,
0318 __entry->vdev_id,
0319 __entry->tid
0320 )
0321 );
0322
0323 TRACE_EVENT(ath10k_txrx_tx_unref,
0324 TP_PROTO(struct ath10k *ar, u16 msdu_id),
0325
0326 TP_ARGS(ar, msdu_id),
0327
0328 TP_STRUCT__entry(
0329 __string(device, dev_name(ar->dev))
0330 __string(driver, dev_driver_string(ar->dev))
0331 __field(u16, msdu_id)
0332 ),
0333
0334 TP_fast_assign(
0335 __assign_str(device, dev_name(ar->dev));
0336 __assign_str(driver, dev_driver_string(ar->dev));
0337 __entry->msdu_id = msdu_id;
0338 ),
0339
0340 TP_printk(
0341 "%s %s msdu_id %d",
0342 __get_str(driver),
0343 __get_str(device),
0344 __entry->msdu_id
0345 )
0346 );
0347
0348 DECLARE_EVENT_CLASS(ath10k_hdr_event,
0349 TP_PROTO(struct ath10k *ar, const void *data, size_t len),
0350
0351 TP_ARGS(ar, data, len),
0352
0353 TP_STRUCT__entry(
0354 __string(device, dev_name(ar->dev))
0355 __string(driver, dev_driver_string(ar->dev))
0356 __field(size_t, len)
0357 __dynamic_array(u8, data, ath10k_frm_hdr_len(data, len))
0358 ),
0359
0360 TP_fast_assign(
0361 __assign_str(device, dev_name(ar->dev));
0362 __assign_str(driver, dev_driver_string(ar->dev));
0363 __entry->len = ath10k_frm_hdr_len(data, len);
0364 memcpy(__get_dynamic_array(data), data, __entry->len);
0365 ),
0366
0367 TP_printk(
0368 "%s %s len %zu\n",
0369 __get_str(driver),
0370 __get_str(device),
0371 __entry->len
0372 )
0373 );
0374
0375 DECLARE_EVENT_CLASS(ath10k_payload_event,
0376 TP_PROTO(struct ath10k *ar, const void *data, size_t len),
0377
0378 TP_ARGS(ar, data, len),
0379
0380 TP_STRUCT__entry(
0381 __string(device, dev_name(ar->dev))
0382 __string(driver, dev_driver_string(ar->dev))
0383 __field(size_t, len)
0384 __dynamic_array(u8, payload, (len -
0385 ath10k_frm_hdr_len(data, len)))
0386 ),
0387
0388 TP_fast_assign(
0389 __assign_str(device, dev_name(ar->dev));
0390 __assign_str(driver, dev_driver_string(ar->dev));
0391 __entry->len = len - ath10k_frm_hdr_len(data, len);
0392 memcpy(__get_dynamic_array(payload),
0393 data + ath10k_frm_hdr_len(data, len), __entry->len);
0394 ),
0395
0396 TP_printk(
0397 "%s %s len %zu\n",
0398 __get_str(driver),
0399 __get_str(device),
0400 __entry->len
0401 )
0402 );
0403
0404 DEFINE_EVENT(ath10k_hdr_event, ath10k_tx_hdr,
0405 TP_PROTO(struct ath10k *ar, const void *data, size_t len),
0406 TP_ARGS(ar, data, len)
0407 );
0408
0409 DEFINE_EVENT(ath10k_payload_event, ath10k_tx_payload,
0410 TP_PROTO(struct ath10k *ar, const void *data, size_t len),
0411 TP_ARGS(ar, data, len)
0412 );
0413
0414 DEFINE_EVENT(ath10k_hdr_event, ath10k_rx_hdr,
0415 TP_PROTO(struct ath10k *ar, const void *data, size_t len),
0416 TP_ARGS(ar, data, len)
0417 );
0418
0419 DEFINE_EVENT(ath10k_payload_event, ath10k_rx_payload,
0420 TP_PROTO(struct ath10k *ar, const void *data, size_t len),
0421 TP_ARGS(ar, data, len)
0422 );
0423
0424 TRACE_EVENT(ath10k_htt_rx_desc,
0425 TP_PROTO(struct ath10k *ar, const void *data, size_t len),
0426
0427 TP_ARGS(ar, data, len),
0428
0429 TP_STRUCT__entry(
0430 __string(device, dev_name(ar->dev))
0431 __string(driver, dev_driver_string(ar->dev))
0432 __field(u8, hw_type)
0433 __field(u16, len)
0434 __dynamic_array(u8, rxdesc, len)
0435 ),
0436
0437 TP_fast_assign(
0438 __assign_str(device, dev_name(ar->dev));
0439 __assign_str(driver, dev_driver_string(ar->dev));
0440 __entry->hw_type = ar->hw_rev;
0441 __entry->len = len;
0442 memcpy(__get_dynamic_array(rxdesc), data, len);
0443 ),
0444
0445 TP_printk(
0446 "%s %s %d rxdesc len %d",
0447 __get_str(driver),
0448 __get_str(device),
0449 __entry->hw_type,
0450 __entry->len
0451 )
0452 );
0453
0454 TRACE_EVENT(ath10k_wmi_diag_container,
0455 TP_PROTO(struct ath10k *ar,
0456 u8 type,
0457 u32 timestamp,
0458 u32 code,
0459 u16 len,
0460 const void *data),
0461
0462 TP_ARGS(ar, type, timestamp, code, len, data),
0463
0464 TP_STRUCT__entry(
0465 __string(device, dev_name(ar->dev))
0466 __string(driver, dev_driver_string(ar->dev))
0467 __field(u8, type)
0468 __field(u32, timestamp)
0469 __field(u32, code)
0470 __field(u16, len)
0471 __dynamic_array(u8, data, len)
0472 ),
0473
0474 TP_fast_assign(
0475 __assign_str(device, dev_name(ar->dev));
0476 __assign_str(driver, dev_driver_string(ar->dev));
0477 __entry->type = type;
0478 __entry->timestamp = timestamp;
0479 __entry->code = code;
0480 __entry->len = len;
0481 memcpy(__get_dynamic_array(data), data, len);
0482 ),
0483
0484 TP_printk(
0485 "%s %s diag container type %u timestamp %u code %u len %d",
0486 __get_str(driver),
0487 __get_str(device),
0488 __entry->type,
0489 __entry->timestamp,
0490 __entry->code,
0491 __entry->len
0492 )
0493 );
0494
0495 TRACE_EVENT(ath10k_wmi_diag,
0496 TP_PROTO(struct ath10k *ar, const void *data, size_t len),
0497
0498 TP_ARGS(ar, data, len),
0499
0500 TP_STRUCT__entry(
0501 __string(device, dev_name(ar->dev))
0502 __string(driver, dev_driver_string(ar->dev))
0503 __field(u16, len)
0504 __dynamic_array(u8, data, len)
0505 ),
0506
0507 TP_fast_assign(
0508 __assign_str(device, dev_name(ar->dev));
0509 __assign_str(driver, dev_driver_string(ar->dev));
0510 __entry->len = len;
0511 memcpy(__get_dynamic_array(data), data, len);
0512 ),
0513
0514 TP_printk(
0515 "%s %s tlv diag len %d",
0516 __get_str(driver),
0517 __get_str(device),
0518 __entry->len
0519 )
0520 );
0521
0522 #endif
0523
0524
0525 #undef TRACE_INCLUDE_PATH
0526 #define TRACE_INCLUDE_PATH .
0527 #undef TRACE_INCLUDE_FILE
0528 #define TRACE_INCLUDE_FILE trace
0529
0530
0531 #include <trace/define_trace.h>