15e3dd157SKalle Valo /* 25e3dd157SKalle Valo * Copyright (c) 2005-2011 Atheros Communications Inc. 35e3dd157SKalle Valo * Copyright (c) 2011-2013 Qualcomm Atheros, Inc. 45e3dd157SKalle Valo * 55e3dd157SKalle Valo * Permission to use, copy, modify, and/or distribute this software for any 65e3dd157SKalle Valo * purpose with or without fee is hereby granted, provided that the above 75e3dd157SKalle Valo * copyright notice and this permission notice appear in all copies. 85e3dd157SKalle Valo * 95e3dd157SKalle Valo * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 105e3dd157SKalle Valo * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 115e3dd157SKalle Valo * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 125e3dd157SKalle Valo * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 135e3dd157SKalle Valo * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 145e3dd157SKalle Valo * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 155e3dd157SKalle Valo * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 165e3dd157SKalle Valo */ 175e3dd157SKalle Valo 185e3dd157SKalle Valo #if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) 195e3dd157SKalle Valo 205e3dd157SKalle Valo #include <linux/tracepoint.h> 21d35a6c18SMichal Kazior #include "core.h" 225e3dd157SKalle Valo 235ce8e7fdSRajkumar Manoharan #if !defined(_TRACE_H_) 24b22a8f49SMichal Kazior static inline u32 ath10k_frm_hdr_len(const void *buf) 255ce8e7fdSRajkumar Manoharan { 26b22a8f49SMichal Kazior const struct ieee80211_hdr *hdr = buf; 27b22a8f49SMichal Kazior 28b22a8f49SMichal Kazior return ieee80211_hdrlen(hdr->frame_control); 295ce8e7fdSRajkumar Manoharan } 305ce8e7fdSRajkumar Manoharan #endif 315ce8e7fdSRajkumar Manoharan 325e3dd157SKalle Valo #define _TRACE_H_ 335e3dd157SKalle Valo 345e3dd157SKalle Valo /* create empty functions when tracing is disabled */ 355e3dd157SKalle Valo #if !defined(CONFIG_ATH10K_TRACING) 365e3dd157SKalle Valo #undef TRACE_EVENT 375e3dd157SKalle Valo #define TRACE_EVENT(name, proto, ...) \ 385e3dd157SKalle Valo static inline void trace_ ## name(proto) {} 395e3dd157SKalle Valo #undef DECLARE_EVENT_CLASS 405e3dd157SKalle Valo #define DECLARE_EVENT_CLASS(...) 415e3dd157SKalle Valo #undef DEFINE_EVENT 425e3dd157SKalle Valo #define DEFINE_EVENT(evt_class, name, proto, ...) \ 435e3dd157SKalle Valo static inline void trace_ ## name(proto) {} 445e3dd157SKalle Valo #endif /* !CONFIG_ATH10K_TRACING || __CHECKER__ */ 455e3dd157SKalle Valo 465e3dd157SKalle Valo #undef TRACE_SYSTEM 475e3dd157SKalle Valo #define TRACE_SYSTEM ath10k 485e3dd157SKalle Valo 495e3dd157SKalle Valo #define ATH10K_MSG_MAX 200 505e3dd157SKalle Valo 515e3dd157SKalle Valo DECLARE_EVENT_CLASS(ath10k_log_event, 52d35a6c18SMichal Kazior TP_PROTO(struct ath10k *ar, struct va_format *vaf), 53d35a6c18SMichal Kazior TP_ARGS(ar, vaf), 545e3dd157SKalle Valo TP_STRUCT__entry( 55d35a6c18SMichal Kazior __string(device, dev_name(ar->dev)) 56d35a6c18SMichal Kazior __string(driver, dev_driver_string(ar->dev)) 575e3dd157SKalle Valo __dynamic_array(char, msg, ATH10K_MSG_MAX) 585e3dd157SKalle Valo ), 595e3dd157SKalle Valo TP_fast_assign( 60d35a6c18SMichal Kazior __assign_str(device, dev_name(ar->dev)); 61d35a6c18SMichal Kazior __assign_str(driver, dev_driver_string(ar->dev)); 625e3dd157SKalle Valo WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg), 635e3dd157SKalle Valo ATH10K_MSG_MAX, 645e3dd157SKalle Valo vaf->fmt, 655e3dd157SKalle Valo *vaf->va) >= ATH10K_MSG_MAX); 665e3dd157SKalle Valo ), 67d35a6c18SMichal Kazior TP_printk( 68d35a6c18SMichal Kazior "%s %s %s", 69d35a6c18SMichal Kazior __get_str(driver), 70d35a6c18SMichal Kazior __get_str(device), 71d35a6c18SMichal Kazior __get_str(msg) 72d35a6c18SMichal Kazior ) 735e3dd157SKalle Valo ); 745e3dd157SKalle Valo 755e3dd157SKalle Valo DEFINE_EVENT(ath10k_log_event, ath10k_log_err, 76d35a6c18SMichal Kazior TP_PROTO(struct ath10k *ar, struct va_format *vaf), 77d35a6c18SMichal Kazior TP_ARGS(ar, vaf) 785e3dd157SKalle Valo ); 795e3dd157SKalle Valo 805e3dd157SKalle Valo DEFINE_EVENT(ath10k_log_event, ath10k_log_warn, 81d35a6c18SMichal Kazior TP_PROTO(struct ath10k *ar, struct va_format *vaf), 82d35a6c18SMichal Kazior TP_ARGS(ar, vaf) 835e3dd157SKalle Valo ); 845e3dd157SKalle Valo 855e3dd157SKalle Valo DEFINE_EVENT(ath10k_log_event, ath10k_log_info, 86d35a6c18SMichal Kazior TP_PROTO(struct ath10k *ar, struct va_format *vaf), 87d35a6c18SMichal Kazior TP_ARGS(ar, vaf) 885e3dd157SKalle Valo ); 895e3dd157SKalle Valo 905e3dd157SKalle Valo TRACE_EVENT(ath10k_log_dbg, 91d35a6c18SMichal Kazior TP_PROTO(struct ath10k *ar, unsigned int level, struct va_format *vaf), 92d35a6c18SMichal Kazior TP_ARGS(ar, level, vaf), 935e3dd157SKalle Valo TP_STRUCT__entry( 94d35a6c18SMichal Kazior __string(device, dev_name(ar->dev)) 95d35a6c18SMichal Kazior __string(driver, dev_driver_string(ar->dev)) 965e3dd157SKalle Valo __field(unsigned int, level) 975e3dd157SKalle Valo __dynamic_array(char, msg, ATH10K_MSG_MAX) 985e3dd157SKalle Valo ), 995e3dd157SKalle Valo TP_fast_assign( 100d35a6c18SMichal Kazior __assign_str(device, dev_name(ar->dev)); 101d35a6c18SMichal Kazior __assign_str(driver, dev_driver_string(ar->dev)); 1025e3dd157SKalle Valo __entry->level = level; 1035e3dd157SKalle Valo WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg), 1045e3dd157SKalle Valo ATH10K_MSG_MAX, 1055e3dd157SKalle Valo vaf->fmt, 1065e3dd157SKalle Valo *vaf->va) >= ATH10K_MSG_MAX); 1075e3dd157SKalle Valo ), 108d35a6c18SMichal Kazior TP_printk( 109d35a6c18SMichal Kazior "%s %s %s", 110d35a6c18SMichal Kazior __get_str(driver), 111d35a6c18SMichal Kazior __get_str(device), 112d35a6c18SMichal Kazior __get_str(msg) 113d35a6c18SMichal Kazior ) 1145e3dd157SKalle Valo ); 1155e3dd157SKalle Valo 1165e3dd157SKalle Valo TRACE_EVENT(ath10k_log_dbg_dump, 117d35a6c18SMichal Kazior TP_PROTO(struct ath10k *ar, const char *msg, const char *prefix, 1185e3dd157SKalle Valo const void *buf, size_t buf_len), 1195e3dd157SKalle Valo 120d35a6c18SMichal Kazior TP_ARGS(ar, msg, prefix, buf, buf_len), 1215e3dd157SKalle Valo 1225e3dd157SKalle Valo TP_STRUCT__entry( 123d35a6c18SMichal Kazior __string(device, dev_name(ar->dev)) 124d35a6c18SMichal Kazior __string(driver, dev_driver_string(ar->dev)) 1255e3dd157SKalle Valo __string(msg, msg) 1265e3dd157SKalle Valo __string(prefix, prefix) 1275e3dd157SKalle Valo __field(size_t, buf_len) 1285e3dd157SKalle Valo __dynamic_array(u8, buf, buf_len) 1295e3dd157SKalle Valo ), 1305e3dd157SKalle Valo 1315e3dd157SKalle Valo TP_fast_assign( 132d35a6c18SMichal Kazior __assign_str(device, dev_name(ar->dev)); 133d35a6c18SMichal Kazior __assign_str(driver, dev_driver_string(ar->dev)); 1345e3dd157SKalle Valo __assign_str(msg, msg); 1355e3dd157SKalle Valo __assign_str(prefix, prefix); 1365e3dd157SKalle Valo __entry->buf_len = buf_len; 1375e3dd157SKalle Valo memcpy(__get_dynamic_array(buf), buf, buf_len); 1385e3dd157SKalle Valo ), 1395e3dd157SKalle Valo 1405e3dd157SKalle Valo TP_printk( 141d35a6c18SMichal Kazior "%s %s %s/%s\n", 142d35a6c18SMichal Kazior __get_str(driver), 143d35a6c18SMichal Kazior __get_str(device), 144d35a6c18SMichal Kazior __get_str(prefix), 145d35a6c18SMichal Kazior __get_str(msg) 1465e3dd157SKalle Valo ) 1475e3dd157SKalle Valo ); 1485e3dd157SKalle Valo 1495e3dd157SKalle Valo TRACE_EVENT(ath10k_wmi_cmd, 150b22a8f49SMichal Kazior TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len, 151b22a8f49SMichal Kazior int ret), 1525e3dd157SKalle Valo 153d35a6c18SMichal Kazior TP_ARGS(ar, id, buf, buf_len, ret), 1545e3dd157SKalle Valo 1555e3dd157SKalle Valo TP_STRUCT__entry( 156d35a6c18SMichal Kazior __string(device, dev_name(ar->dev)) 157d35a6c18SMichal Kazior __string(driver, dev_driver_string(ar->dev)) 1585e3dd157SKalle Valo __field(unsigned int, id) 1595e3dd157SKalle Valo __field(size_t, buf_len) 1605e3dd157SKalle Valo __dynamic_array(u8, buf, buf_len) 1619e84f653SMichal Kazior __field(int, ret) 1625e3dd157SKalle Valo ), 1635e3dd157SKalle Valo 1645e3dd157SKalle Valo TP_fast_assign( 165d35a6c18SMichal Kazior __assign_str(device, dev_name(ar->dev)); 166d35a6c18SMichal Kazior __assign_str(driver, dev_driver_string(ar->dev)); 1675e3dd157SKalle Valo __entry->id = id; 1685e3dd157SKalle Valo __entry->buf_len = buf_len; 169be8b3943SMichal Kazior __entry->ret = ret; 1705e3dd157SKalle Valo memcpy(__get_dynamic_array(buf), buf, buf_len); 1715e3dd157SKalle Valo ), 1725e3dd157SKalle Valo 1735e3dd157SKalle Valo TP_printk( 174d35a6c18SMichal Kazior "%s %s id %d len %zu ret %d", 175d35a6c18SMichal Kazior __get_str(driver), 176d35a6c18SMichal Kazior __get_str(device), 1775e3dd157SKalle Valo __entry->id, 178be8b3943SMichal Kazior __entry->buf_len, 179be8b3943SMichal Kazior __entry->ret 1805e3dd157SKalle Valo ) 1815e3dd157SKalle Valo ); 1825e3dd157SKalle Valo 1835e3dd157SKalle Valo TRACE_EVENT(ath10k_wmi_event, 184b22a8f49SMichal Kazior TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len), 1855e3dd157SKalle Valo 186d35a6c18SMichal Kazior TP_ARGS(ar, id, buf, buf_len), 1875e3dd157SKalle Valo 1885e3dd157SKalle Valo TP_STRUCT__entry( 189d35a6c18SMichal Kazior __string(device, dev_name(ar->dev)) 190d35a6c18SMichal Kazior __string(driver, dev_driver_string(ar->dev)) 1915e3dd157SKalle Valo __field(unsigned int, id) 1925e3dd157SKalle Valo __field(size_t, buf_len) 1935e3dd157SKalle Valo __dynamic_array(u8, buf, buf_len) 1945e3dd157SKalle Valo ), 1955e3dd157SKalle Valo 1965e3dd157SKalle Valo TP_fast_assign( 197d35a6c18SMichal Kazior __assign_str(device, dev_name(ar->dev)); 198d35a6c18SMichal Kazior __assign_str(driver, dev_driver_string(ar->dev)); 1995e3dd157SKalle Valo __entry->id = id; 2005e3dd157SKalle Valo __entry->buf_len = buf_len; 2015e3dd157SKalle Valo memcpy(__get_dynamic_array(buf), buf, buf_len); 2025e3dd157SKalle Valo ), 2035e3dd157SKalle Valo 2045e3dd157SKalle Valo TP_printk( 205d35a6c18SMichal Kazior "%s %s id %d len %zu", 206d35a6c18SMichal Kazior __get_str(driver), 207d35a6c18SMichal Kazior __get_str(device), 2085e3dd157SKalle Valo __entry->id, 2095e3dd157SKalle Valo __entry->buf_len 2105e3dd157SKalle Valo ) 2115e3dd157SKalle Valo ); 2125e3dd157SKalle Valo 213a9bf0506SKalle Valo TRACE_EVENT(ath10k_htt_stats, 214b22a8f49SMichal Kazior TP_PROTO(struct ath10k *ar, const void *buf, size_t buf_len), 215a9bf0506SKalle Valo 216d35a6c18SMichal Kazior TP_ARGS(ar, buf, buf_len), 217a9bf0506SKalle Valo 218a9bf0506SKalle Valo TP_STRUCT__entry( 219d35a6c18SMichal Kazior __string(device, dev_name(ar->dev)) 220d35a6c18SMichal Kazior __string(driver, dev_driver_string(ar->dev)) 221a9bf0506SKalle Valo __field(size_t, buf_len) 222a9bf0506SKalle Valo __dynamic_array(u8, buf, buf_len) 223a9bf0506SKalle Valo ), 224a9bf0506SKalle Valo 225a9bf0506SKalle Valo TP_fast_assign( 226d35a6c18SMichal Kazior __assign_str(device, dev_name(ar->dev)); 227d35a6c18SMichal Kazior __assign_str(driver, dev_driver_string(ar->dev)); 228a9bf0506SKalle Valo __entry->buf_len = buf_len; 229a9bf0506SKalle Valo memcpy(__get_dynamic_array(buf), buf, buf_len); 230a9bf0506SKalle Valo ), 231a9bf0506SKalle Valo 232a9bf0506SKalle Valo TP_printk( 233d35a6c18SMichal Kazior "%s %s len %zu", 234d35a6c18SMichal Kazior __get_str(driver), 235d35a6c18SMichal Kazior __get_str(device), 236a9bf0506SKalle Valo __entry->buf_len 237a9bf0506SKalle Valo ) 238a9bf0506SKalle Valo ); 239a9bf0506SKalle Valo 240869526b9SKalle Valo TRACE_EVENT(ath10k_wmi_dbglog, 241b22a8f49SMichal Kazior TP_PROTO(struct ath10k *ar, const void *buf, size_t buf_len), 242869526b9SKalle Valo 243d35a6c18SMichal Kazior TP_ARGS(ar, buf, buf_len), 244869526b9SKalle Valo 245869526b9SKalle Valo TP_STRUCT__entry( 246d35a6c18SMichal Kazior __string(device, dev_name(ar->dev)) 247d35a6c18SMichal Kazior __string(driver, dev_driver_string(ar->dev)) 248869526b9SKalle Valo __field(size_t, buf_len) 249869526b9SKalle Valo __dynamic_array(u8, buf, buf_len) 250869526b9SKalle Valo ), 251869526b9SKalle Valo 252869526b9SKalle Valo TP_fast_assign( 253d35a6c18SMichal Kazior __assign_str(device, dev_name(ar->dev)); 254d35a6c18SMichal Kazior __assign_str(driver, dev_driver_string(ar->dev)); 255869526b9SKalle Valo __entry->buf_len = buf_len; 256869526b9SKalle Valo memcpy(__get_dynamic_array(buf), buf, buf_len); 257869526b9SKalle Valo ), 258869526b9SKalle Valo 259869526b9SKalle Valo TP_printk( 260d35a6c18SMichal Kazior "%s %s len %zu", 261d35a6c18SMichal Kazior __get_str(driver), 262d35a6c18SMichal Kazior __get_str(device), 263869526b9SKalle Valo __entry->buf_len 264869526b9SKalle Valo ) 265869526b9SKalle Valo ); 266869526b9SKalle Valo 267bfdd7937SRajkumar Manoharan TRACE_EVENT(ath10k_htt_pktlog, 268b22a8f49SMichal Kazior TP_PROTO(struct ath10k *ar, const void *buf, u16 buf_len), 269bfdd7937SRajkumar Manoharan 270bfdd7937SRajkumar Manoharan TP_ARGS(ar, buf, buf_len), 271bfdd7937SRajkumar Manoharan 272bfdd7937SRajkumar Manoharan TP_STRUCT__entry( 273bfdd7937SRajkumar Manoharan __string(device, dev_name(ar->dev)) 274bfdd7937SRajkumar Manoharan __string(driver, dev_driver_string(ar->dev)) 275bfdd7937SRajkumar Manoharan __field(u16, buf_len) 276bfdd7937SRajkumar Manoharan __dynamic_array(u8, pktlog, buf_len) 277bfdd7937SRajkumar Manoharan ), 278bfdd7937SRajkumar Manoharan 279bfdd7937SRajkumar Manoharan TP_fast_assign( 280bfdd7937SRajkumar Manoharan __assign_str(device, dev_name(ar->dev)); 281bfdd7937SRajkumar Manoharan __assign_str(driver, dev_driver_string(ar->dev)); 282bfdd7937SRajkumar Manoharan __entry->buf_len = buf_len; 283bfdd7937SRajkumar Manoharan memcpy(__get_dynamic_array(pktlog), buf, buf_len); 284bfdd7937SRajkumar Manoharan ), 285bfdd7937SRajkumar Manoharan 286bfdd7937SRajkumar Manoharan TP_printk( 287bfdd7937SRajkumar Manoharan "%s %s size %hu", 288bfdd7937SRajkumar Manoharan __get_str(driver), 289bfdd7937SRajkumar Manoharan __get_str(device), 290bfdd7937SRajkumar Manoharan __entry->buf_len 291bfdd7937SRajkumar Manoharan ) 292bfdd7937SRajkumar Manoharan ); 293bfdd7937SRajkumar Manoharan 294d1e50f47SRajkumar Manoharan TRACE_EVENT(ath10k_htt_tx, 295d1e50f47SRajkumar Manoharan TP_PROTO(struct ath10k *ar, u16 msdu_id, u16 msdu_len, 296d1e50f47SRajkumar Manoharan u8 vdev_id, u8 tid), 297d1e50f47SRajkumar Manoharan 298d1e50f47SRajkumar Manoharan TP_ARGS(ar, msdu_id, msdu_len, vdev_id, tid), 299d1e50f47SRajkumar Manoharan 300d1e50f47SRajkumar Manoharan TP_STRUCT__entry( 301d1e50f47SRajkumar Manoharan __string(device, dev_name(ar->dev)) 302d1e50f47SRajkumar Manoharan __string(driver, dev_driver_string(ar->dev)) 303d1e50f47SRajkumar Manoharan __field(u16, msdu_id) 304d1e50f47SRajkumar Manoharan __field(u16, msdu_len) 305d1e50f47SRajkumar Manoharan __field(u8, vdev_id) 306d1e50f47SRajkumar Manoharan __field(u8, tid) 307d1e50f47SRajkumar Manoharan ), 308d1e50f47SRajkumar Manoharan 309d1e50f47SRajkumar Manoharan TP_fast_assign( 310d1e50f47SRajkumar Manoharan __assign_str(device, dev_name(ar->dev)); 311d1e50f47SRajkumar Manoharan __assign_str(driver, dev_driver_string(ar->dev)); 312d1e50f47SRajkumar Manoharan __entry->msdu_id = msdu_id; 313d1e50f47SRajkumar Manoharan __entry->msdu_len = msdu_len; 314d1e50f47SRajkumar Manoharan __entry->vdev_id = vdev_id; 315d1e50f47SRajkumar Manoharan __entry->tid = tid; 316d1e50f47SRajkumar Manoharan ), 317d1e50f47SRajkumar Manoharan 318d1e50f47SRajkumar Manoharan TP_printk( 319d1e50f47SRajkumar Manoharan "%s %s msdu_id %d msdu_len %d vdev_id %d tid %d", 320d1e50f47SRajkumar Manoharan __get_str(driver), 321d1e50f47SRajkumar Manoharan __get_str(device), 322d1e50f47SRajkumar Manoharan __entry->msdu_id, 323d1e50f47SRajkumar Manoharan __entry->msdu_len, 324d1e50f47SRajkumar Manoharan __entry->vdev_id, 325d1e50f47SRajkumar Manoharan __entry->tid 326d1e50f47SRajkumar Manoharan ) 327d1e50f47SRajkumar Manoharan ); 328d1e50f47SRajkumar Manoharan 329d1e50f47SRajkumar Manoharan TRACE_EVENT(ath10k_txrx_tx_unref, 330d1e50f47SRajkumar Manoharan TP_PROTO(struct ath10k *ar, u16 msdu_id), 331d1e50f47SRajkumar Manoharan 332d1e50f47SRajkumar Manoharan TP_ARGS(ar, msdu_id), 333d1e50f47SRajkumar Manoharan 334d1e50f47SRajkumar Manoharan TP_STRUCT__entry( 335d1e50f47SRajkumar Manoharan __string(device, dev_name(ar->dev)) 336d1e50f47SRajkumar Manoharan __string(driver, dev_driver_string(ar->dev)) 337d1e50f47SRajkumar Manoharan __field(u16, msdu_id) 338d1e50f47SRajkumar Manoharan ), 339d1e50f47SRajkumar Manoharan 340d1e50f47SRajkumar Manoharan TP_fast_assign( 341d1e50f47SRajkumar Manoharan __assign_str(device, dev_name(ar->dev)); 342d1e50f47SRajkumar Manoharan __assign_str(driver, dev_driver_string(ar->dev)); 343d1e50f47SRajkumar Manoharan __entry->msdu_id = msdu_id; 344d1e50f47SRajkumar Manoharan ), 345d1e50f47SRajkumar Manoharan 346d1e50f47SRajkumar Manoharan TP_printk( 347d1e50f47SRajkumar Manoharan "%s %s msdu_id %d", 348d1e50f47SRajkumar Manoharan __get_str(driver), 349d1e50f47SRajkumar Manoharan __get_str(device), 350d1e50f47SRajkumar Manoharan __entry->msdu_id 351d1e50f47SRajkumar Manoharan ) 352d1e50f47SRajkumar Manoharan ); 3539b57f88fSRajkumar Manoharan 3545ce8e7fdSRajkumar Manoharan DECLARE_EVENT_CLASS(ath10k_hdr_event, 355b22a8f49SMichal Kazior TP_PROTO(struct ath10k *ar, const void *data, size_t len), 3569b57f88fSRajkumar Manoharan 3579b57f88fSRajkumar Manoharan TP_ARGS(ar, data, len), 3589b57f88fSRajkumar Manoharan 3599b57f88fSRajkumar Manoharan TP_STRUCT__entry( 3609b57f88fSRajkumar Manoharan __string(device, dev_name(ar->dev)) 3619b57f88fSRajkumar Manoharan __string(driver, dev_driver_string(ar->dev)) 3629b57f88fSRajkumar Manoharan __field(size_t, len) 3635ce8e7fdSRajkumar Manoharan __dynamic_array(u8, data, ath10k_frm_hdr_len(data)) 3649b57f88fSRajkumar Manoharan ), 3659b57f88fSRajkumar Manoharan 3669b57f88fSRajkumar Manoharan TP_fast_assign( 3679b57f88fSRajkumar Manoharan __assign_str(device, dev_name(ar->dev)); 3689b57f88fSRajkumar Manoharan __assign_str(driver, dev_driver_string(ar->dev)); 3695ce8e7fdSRajkumar Manoharan __entry->len = ath10k_frm_hdr_len(data); 3705ce8e7fdSRajkumar Manoharan memcpy(__get_dynamic_array(data), data, __entry->len); 3719b57f88fSRajkumar Manoharan ), 3729b57f88fSRajkumar Manoharan 3739b57f88fSRajkumar Manoharan TP_printk( 3749b57f88fSRajkumar Manoharan "%s %s len %zu\n", 3759b57f88fSRajkumar Manoharan __get_str(driver), 3769b57f88fSRajkumar Manoharan __get_str(device), 3779b57f88fSRajkumar Manoharan __entry->len 3789b57f88fSRajkumar Manoharan ) 3799b57f88fSRajkumar Manoharan ); 3809b57f88fSRajkumar Manoharan 3815ce8e7fdSRajkumar Manoharan DECLARE_EVENT_CLASS(ath10k_payload_event, 382b22a8f49SMichal Kazior TP_PROTO(struct ath10k *ar, const void *data, size_t len), 3835ce8e7fdSRajkumar Manoharan 3845ce8e7fdSRajkumar Manoharan TP_ARGS(ar, data, len), 3855ce8e7fdSRajkumar Manoharan 3865ce8e7fdSRajkumar Manoharan TP_STRUCT__entry( 3875ce8e7fdSRajkumar Manoharan __string(device, dev_name(ar->dev)) 3885ce8e7fdSRajkumar Manoharan __string(driver, dev_driver_string(ar->dev)) 3895ce8e7fdSRajkumar Manoharan __field(size_t, len) 3905ce8e7fdSRajkumar Manoharan __dynamic_array(u8, payload, (len - ath10k_frm_hdr_len(data))) 3915ce8e7fdSRajkumar Manoharan ), 3925ce8e7fdSRajkumar Manoharan 3935ce8e7fdSRajkumar Manoharan TP_fast_assign( 3945ce8e7fdSRajkumar Manoharan __assign_str(device, dev_name(ar->dev)); 3955ce8e7fdSRajkumar Manoharan __assign_str(driver, dev_driver_string(ar->dev)); 3965ce8e7fdSRajkumar Manoharan __entry->len = len - ath10k_frm_hdr_len(data); 3975ce8e7fdSRajkumar Manoharan memcpy(__get_dynamic_array(payload), 3985ce8e7fdSRajkumar Manoharan data + ath10k_frm_hdr_len(data), __entry->len); 3995ce8e7fdSRajkumar Manoharan ), 4005ce8e7fdSRajkumar Manoharan 4015ce8e7fdSRajkumar Manoharan TP_printk( 4025ce8e7fdSRajkumar Manoharan "%s %s len %zu\n", 4035ce8e7fdSRajkumar Manoharan __get_str(driver), 4045ce8e7fdSRajkumar Manoharan __get_str(device), 4055ce8e7fdSRajkumar Manoharan __entry->len 4065ce8e7fdSRajkumar Manoharan ) 4075ce8e7fdSRajkumar Manoharan ); 4085ce8e7fdSRajkumar Manoharan 4095ce8e7fdSRajkumar Manoharan DEFINE_EVENT(ath10k_hdr_event, ath10k_tx_hdr, 410b22a8f49SMichal Kazior TP_PROTO(struct ath10k *ar, const void *data, size_t len), 4119b57f88fSRajkumar Manoharan TP_ARGS(ar, data, len) 4129b57f88fSRajkumar Manoharan ); 4139b57f88fSRajkumar Manoharan 4145ce8e7fdSRajkumar Manoharan DEFINE_EVENT(ath10k_payload_event, ath10k_tx_payload, 415b22a8f49SMichal Kazior TP_PROTO(struct ath10k *ar, const void *data, size_t len), 4169b57f88fSRajkumar Manoharan TP_ARGS(ar, data, len) 4179b57f88fSRajkumar Manoharan ); 4189b57f88fSRajkumar Manoharan 4195ce8e7fdSRajkumar Manoharan DEFINE_EVENT(ath10k_hdr_event, ath10k_rx_hdr, 420b22a8f49SMichal Kazior TP_PROTO(struct ath10k *ar, const void *data, size_t len), 4219b57f88fSRajkumar Manoharan TP_ARGS(ar, data, len) 4229b57f88fSRajkumar Manoharan ); 4239b57f88fSRajkumar Manoharan 4245ce8e7fdSRajkumar Manoharan DEFINE_EVENT(ath10k_payload_event, ath10k_rx_payload, 425b22a8f49SMichal Kazior TP_PROTO(struct ath10k *ar, const void *data, size_t len), 4269b57f88fSRajkumar Manoharan TP_ARGS(ar, data, len) 4279b57f88fSRajkumar Manoharan ); 428a5d85f60SMichal Kazior 4295ce8e7fdSRajkumar Manoharan TRACE_EVENT(ath10k_htt_rx_desc, 430b22a8f49SMichal Kazior TP_PROTO(struct ath10k *ar, const void *data, size_t len), 4315ce8e7fdSRajkumar Manoharan 4325ce8e7fdSRajkumar Manoharan TP_ARGS(ar, data, len), 4335ce8e7fdSRajkumar Manoharan 4345ce8e7fdSRajkumar Manoharan TP_STRUCT__entry( 4355ce8e7fdSRajkumar Manoharan __string(device, dev_name(ar->dev)) 4365ce8e7fdSRajkumar Manoharan __string(driver, dev_driver_string(ar->dev)) 4375ce8e7fdSRajkumar Manoharan __field(u16, len) 4385ce8e7fdSRajkumar Manoharan __dynamic_array(u8, rxdesc, len) 4395ce8e7fdSRajkumar Manoharan ), 4405ce8e7fdSRajkumar Manoharan 4415ce8e7fdSRajkumar Manoharan TP_fast_assign( 4425ce8e7fdSRajkumar Manoharan __assign_str(device, dev_name(ar->dev)); 4435ce8e7fdSRajkumar Manoharan __assign_str(driver, dev_driver_string(ar->dev)); 4445ce8e7fdSRajkumar Manoharan __entry->len = len; 4455ce8e7fdSRajkumar Manoharan memcpy(__get_dynamic_array(rxdesc), data, len); 4465ce8e7fdSRajkumar Manoharan ), 4475ce8e7fdSRajkumar Manoharan 4485ce8e7fdSRajkumar Manoharan TP_printk( 4495ce8e7fdSRajkumar Manoharan "%s %s rxdesc len %d", 4505ce8e7fdSRajkumar Manoharan __get_str(driver), 4515ce8e7fdSRajkumar Manoharan __get_str(device), 4525ce8e7fdSRajkumar Manoharan __entry->len 4535ce8e7fdSRajkumar Manoharan ) 454a5d85f60SMichal Kazior ); 4555ce8e7fdSRajkumar Manoharan 45604de6c6cSMichal Kazior TRACE_EVENT(ath10k_wmi_diag_container, 45704de6c6cSMichal Kazior TP_PROTO(struct ath10k *ar, 45804de6c6cSMichal Kazior u8 type, 45904de6c6cSMichal Kazior u32 timestamp, 46004de6c6cSMichal Kazior u32 code, 46104de6c6cSMichal Kazior u16 len, 46204de6c6cSMichal Kazior const void *data), 46304de6c6cSMichal Kazior 46404de6c6cSMichal Kazior TP_ARGS(ar, type, timestamp, code, len, data), 46504de6c6cSMichal Kazior 46604de6c6cSMichal Kazior TP_STRUCT__entry( 46704de6c6cSMichal Kazior __string(device, dev_name(ar->dev)) 46804de6c6cSMichal Kazior __string(driver, dev_driver_string(ar->dev)) 46904de6c6cSMichal Kazior __field(u8, type) 47004de6c6cSMichal Kazior __field(u32, timestamp) 47104de6c6cSMichal Kazior __field(u32, code) 47204de6c6cSMichal Kazior __field(u16, len) 47304de6c6cSMichal Kazior __dynamic_array(u8, data, len) 47404de6c6cSMichal Kazior ), 47504de6c6cSMichal Kazior 47604de6c6cSMichal Kazior TP_fast_assign( 47704de6c6cSMichal Kazior __assign_str(device, dev_name(ar->dev)); 47804de6c6cSMichal Kazior __assign_str(driver, dev_driver_string(ar->dev)); 47904de6c6cSMichal Kazior __entry->type = type; 48004de6c6cSMichal Kazior __entry->timestamp = timestamp; 48104de6c6cSMichal Kazior __entry->code = code; 48204de6c6cSMichal Kazior __entry->len = len; 48304de6c6cSMichal Kazior memcpy(__get_dynamic_array(data), data, len); 48404de6c6cSMichal Kazior ), 48504de6c6cSMichal Kazior 48604de6c6cSMichal Kazior TP_printk( 48704de6c6cSMichal Kazior "%s %s diag container type %hhu timestamp %u code %u len %d", 48804de6c6cSMichal Kazior __get_str(driver), 48904de6c6cSMichal Kazior __get_str(device), 49004de6c6cSMichal Kazior __entry->type, 49104de6c6cSMichal Kazior __entry->timestamp, 49204de6c6cSMichal Kazior __entry->code, 49304de6c6cSMichal Kazior __entry->len 49404de6c6cSMichal Kazior ) 49504de6c6cSMichal Kazior ); 49604de6c6cSMichal Kazior 4975e3dd157SKalle Valo #endif /* _TRACE_H_ || TRACE_HEADER_MULTI_READ*/ 4985e3dd157SKalle Valo 4995e3dd157SKalle Valo /* we don't want to use include/trace/events */ 5005e3dd157SKalle Valo #undef TRACE_INCLUDE_PATH 5015e3dd157SKalle Valo #define TRACE_INCLUDE_PATH . 5025e3dd157SKalle Valo #undef TRACE_INCLUDE_FILE 5035e3dd157SKalle Valo #define TRACE_INCLUDE_FILE trace 5045e3dd157SKalle Valo 5055e3dd157SKalle Valo /* This part must be outside protection */ 5065e3dd157SKalle Valo #include <trace/define_trace.h> 507