18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: ISC */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (c) 2005-2011 Atheros Communications Inc. 48c2ecf20Sopenharmony_ci * Copyright (c) 2011-2016 Qualcomm Atheros, Inc. 58c2ecf20Sopenharmony_ci */ 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include <linux/tracepoint.h> 108c2ecf20Sopenharmony_ci#include "core.h" 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#if !defined(_TRACE_H_) 138c2ecf20Sopenharmony_cistatic inline u32 ath10k_frm_hdr_len(const void *buf, size_t len) 148c2ecf20Sopenharmony_ci{ 158c2ecf20Sopenharmony_ci const struct ieee80211_hdr *hdr = buf; 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci /* In some rare cases (e.g. fcs error) device reports frame buffer 188c2ecf20Sopenharmony_ci * shorter than what frame header implies (e.g. len = 0). The buffer 198c2ecf20Sopenharmony_ci * can still be accessed so do a simple min() to guarantee caller 208c2ecf20Sopenharmony_ci * doesn't get value greater than len. 218c2ecf20Sopenharmony_ci */ 228c2ecf20Sopenharmony_ci return min_t(u32, len, ieee80211_hdrlen(hdr->frame_control)); 238c2ecf20Sopenharmony_ci} 248c2ecf20Sopenharmony_ci#endif 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci#define _TRACE_H_ 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci/* create empty functions when tracing is disabled */ 298c2ecf20Sopenharmony_ci#if !defined(CONFIG_ATH10K_TRACING) 308c2ecf20Sopenharmony_ci#undef TRACE_EVENT 318c2ecf20Sopenharmony_ci#define TRACE_EVENT(name, proto, ...) \ 328c2ecf20Sopenharmony_cistatic inline void trace_ ## name(proto) {} \ 338c2ecf20Sopenharmony_cistatic inline bool trace_##name##_enabled(void) \ 348c2ecf20Sopenharmony_ci{ \ 358c2ecf20Sopenharmony_ci return false; \ 368c2ecf20Sopenharmony_ci} 378c2ecf20Sopenharmony_ci#undef DECLARE_EVENT_CLASS 388c2ecf20Sopenharmony_ci#define DECLARE_EVENT_CLASS(...) 398c2ecf20Sopenharmony_ci#undef DEFINE_EVENT 408c2ecf20Sopenharmony_ci#define DEFINE_EVENT(evt_class, name, proto, ...) \ 418c2ecf20Sopenharmony_cistatic inline void trace_ ## name(proto) {} 428c2ecf20Sopenharmony_ci#endif /* !CONFIG_ATH10K_TRACING || __CHECKER__ */ 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_ci#undef TRACE_SYSTEM 458c2ecf20Sopenharmony_ci#define TRACE_SYSTEM ath10k 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci#define ATH10K_MSG_MAX 400 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(ath10k_log_event, 508c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, struct va_format *vaf), 518c2ecf20Sopenharmony_ci TP_ARGS(ar, vaf), 528c2ecf20Sopenharmony_ci TP_STRUCT__entry( 538c2ecf20Sopenharmony_ci __string(device, dev_name(ar->dev)) 548c2ecf20Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 558c2ecf20Sopenharmony_ci __dynamic_array(char, msg, ATH10K_MSG_MAX) 568c2ecf20Sopenharmony_ci ), 578c2ecf20Sopenharmony_ci TP_fast_assign( 588c2ecf20Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 598c2ecf20Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 608c2ecf20Sopenharmony_ci WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg), 618c2ecf20Sopenharmony_ci ATH10K_MSG_MAX, 628c2ecf20Sopenharmony_ci vaf->fmt, 638c2ecf20Sopenharmony_ci *vaf->va) >= ATH10K_MSG_MAX); 648c2ecf20Sopenharmony_ci ), 658c2ecf20Sopenharmony_ci TP_printk( 668c2ecf20Sopenharmony_ci "%s %s %s", 678c2ecf20Sopenharmony_ci __get_str(driver), 688c2ecf20Sopenharmony_ci __get_str(device), 698c2ecf20Sopenharmony_ci __get_str(msg) 708c2ecf20Sopenharmony_ci ) 718c2ecf20Sopenharmony_ci); 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_ciDEFINE_EVENT(ath10k_log_event, ath10k_log_err, 748c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, struct va_format *vaf), 758c2ecf20Sopenharmony_ci TP_ARGS(ar, vaf) 768c2ecf20Sopenharmony_ci); 778c2ecf20Sopenharmony_ci 788c2ecf20Sopenharmony_ciDEFINE_EVENT(ath10k_log_event, ath10k_log_warn, 798c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, struct va_format *vaf), 808c2ecf20Sopenharmony_ci TP_ARGS(ar, vaf) 818c2ecf20Sopenharmony_ci); 828c2ecf20Sopenharmony_ci 838c2ecf20Sopenharmony_ciDEFINE_EVENT(ath10k_log_event, ath10k_log_info, 848c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, struct va_format *vaf), 858c2ecf20Sopenharmony_ci TP_ARGS(ar, vaf) 868c2ecf20Sopenharmony_ci); 878c2ecf20Sopenharmony_ci 888c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_log_dbg, 898c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, unsigned int level, struct va_format *vaf), 908c2ecf20Sopenharmony_ci TP_ARGS(ar, level, vaf), 918c2ecf20Sopenharmony_ci TP_STRUCT__entry( 928c2ecf20Sopenharmony_ci __string(device, dev_name(ar->dev)) 938c2ecf20Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 948c2ecf20Sopenharmony_ci __field(unsigned int, level) 958c2ecf20Sopenharmony_ci __dynamic_array(char, msg, ATH10K_MSG_MAX) 968c2ecf20Sopenharmony_ci ), 978c2ecf20Sopenharmony_ci TP_fast_assign( 988c2ecf20Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 998c2ecf20Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 1008c2ecf20Sopenharmony_ci __entry->level = level; 1018c2ecf20Sopenharmony_ci WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg), 1028c2ecf20Sopenharmony_ci ATH10K_MSG_MAX, 1038c2ecf20Sopenharmony_ci vaf->fmt, 1048c2ecf20Sopenharmony_ci *vaf->va) >= ATH10K_MSG_MAX); 1058c2ecf20Sopenharmony_ci ), 1068c2ecf20Sopenharmony_ci TP_printk( 1078c2ecf20Sopenharmony_ci "%s %s %s", 1088c2ecf20Sopenharmony_ci __get_str(driver), 1098c2ecf20Sopenharmony_ci __get_str(device), 1108c2ecf20Sopenharmony_ci __get_str(msg) 1118c2ecf20Sopenharmony_ci ) 1128c2ecf20Sopenharmony_ci); 1138c2ecf20Sopenharmony_ci 1148c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_log_dbg_dump, 1158c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, const char *msg, const char *prefix, 1168c2ecf20Sopenharmony_ci const void *buf, size_t buf_len), 1178c2ecf20Sopenharmony_ci 1188c2ecf20Sopenharmony_ci TP_ARGS(ar, msg, prefix, buf, buf_len), 1198c2ecf20Sopenharmony_ci 1208c2ecf20Sopenharmony_ci TP_STRUCT__entry( 1218c2ecf20Sopenharmony_ci __string(device, dev_name(ar->dev)) 1228c2ecf20Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 1238c2ecf20Sopenharmony_ci __string(msg, msg) 1248c2ecf20Sopenharmony_ci __string(prefix, prefix) 1258c2ecf20Sopenharmony_ci __field(size_t, buf_len) 1268c2ecf20Sopenharmony_ci __dynamic_array(u8, buf, buf_len) 1278c2ecf20Sopenharmony_ci ), 1288c2ecf20Sopenharmony_ci 1298c2ecf20Sopenharmony_ci TP_fast_assign( 1308c2ecf20Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 1318c2ecf20Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 1328c2ecf20Sopenharmony_ci __assign_str(msg, msg); 1338c2ecf20Sopenharmony_ci __assign_str(prefix, prefix); 1348c2ecf20Sopenharmony_ci __entry->buf_len = buf_len; 1358c2ecf20Sopenharmony_ci memcpy(__get_dynamic_array(buf), buf, buf_len); 1368c2ecf20Sopenharmony_ci ), 1378c2ecf20Sopenharmony_ci 1388c2ecf20Sopenharmony_ci TP_printk( 1398c2ecf20Sopenharmony_ci "%s %s %s/%s\n", 1408c2ecf20Sopenharmony_ci __get_str(driver), 1418c2ecf20Sopenharmony_ci __get_str(device), 1428c2ecf20Sopenharmony_ci __get_str(prefix), 1438c2ecf20Sopenharmony_ci __get_str(msg) 1448c2ecf20Sopenharmony_ci ) 1458c2ecf20Sopenharmony_ci); 1468c2ecf20Sopenharmony_ci 1478c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_wmi_cmd, 1488c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len), 1498c2ecf20Sopenharmony_ci 1508c2ecf20Sopenharmony_ci TP_ARGS(ar, id, buf, buf_len), 1518c2ecf20Sopenharmony_ci 1528c2ecf20Sopenharmony_ci TP_STRUCT__entry( 1538c2ecf20Sopenharmony_ci __string(device, dev_name(ar->dev)) 1548c2ecf20Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 1558c2ecf20Sopenharmony_ci __field(unsigned int, id) 1568c2ecf20Sopenharmony_ci __field(size_t, buf_len) 1578c2ecf20Sopenharmony_ci __dynamic_array(u8, buf, buf_len) 1588c2ecf20Sopenharmony_ci ), 1598c2ecf20Sopenharmony_ci 1608c2ecf20Sopenharmony_ci TP_fast_assign( 1618c2ecf20Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 1628c2ecf20Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 1638c2ecf20Sopenharmony_ci __entry->id = id; 1648c2ecf20Sopenharmony_ci __entry->buf_len = buf_len; 1658c2ecf20Sopenharmony_ci memcpy(__get_dynamic_array(buf), buf, buf_len); 1668c2ecf20Sopenharmony_ci ), 1678c2ecf20Sopenharmony_ci 1688c2ecf20Sopenharmony_ci TP_printk( 1698c2ecf20Sopenharmony_ci "%s %s id %d len %zu", 1708c2ecf20Sopenharmony_ci __get_str(driver), 1718c2ecf20Sopenharmony_ci __get_str(device), 1728c2ecf20Sopenharmony_ci __entry->id, 1738c2ecf20Sopenharmony_ci __entry->buf_len 1748c2ecf20Sopenharmony_ci ) 1758c2ecf20Sopenharmony_ci); 1768c2ecf20Sopenharmony_ci 1778c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_wmi_event, 1788c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len), 1798c2ecf20Sopenharmony_ci 1808c2ecf20Sopenharmony_ci TP_ARGS(ar, id, buf, buf_len), 1818c2ecf20Sopenharmony_ci 1828c2ecf20Sopenharmony_ci TP_STRUCT__entry( 1838c2ecf20Sopenharmony_ci __string(device, dev_name(ar->dev)) 1848c2ecf20Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 1858c2ecf20Sopenharmony_ci __field(unsigned int, id) 1868c2ecf20Sopenharmony_ci __field(size_t, buf_len) 1878c2ecf20Sopenharmony_ci __dynamic_array(u8, buf, buf_len) 1888c2ecf20Sopenharmony_ci ), 1898c2ecf20Sopenharmony_ci 1908c2ecf20Sopenharmony_ci TP_fast_assign( 1918c2ecf20Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 1928c2ecf20Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 1938c2ecf20Sopenharmony_ci __entry->id = id; 1948c2ecf20Sopenharmony_ci __entry->buf_len = buf_len; 1958c2ecf20Sopenharmony_ci memcpy(__get_dynamic_array(buf), buf, buf_len); 1968c2ecf20Sopenharmony_ci ), 1978c2ecf20Sopenharmony_ci 1988c2ecf20Sopenharmony_ci TP_printk( 1998c2ecf20Sopenharmony_ci "%s %s id %d len %zu", 2008c2ecf20Sopenharmony_ci __get_str(driver), 2018c2ecf20Sopenharmony_ci __get_str(device), 2028c2ecf20Sopenharmony_ci __entry->id, 2038c2ecf20Sopenharmony_ci __entry->buf_len 2048c2ecf20Sopenharmony_ci ) 2058c2ecf20Sopenharmony_ci); 2068c2ecf20Sopenharmony_ci 2078c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_htt_stats, 2088c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *buf, size_t buf_len), 2098c2ecf20Sopenharmony_ci 2108c2ecf20Sopenharmony_ci TP_ARGS(ar, buf, buf_len), 2118c2ecf20Sopenharmony_ci 2128c2ecf20Sopenharmony_ci TP_STRUCT__entry( 2138c2ecf20Sopenharmony_ci __string(device, dev_name(ar->dev)) 2148c2ecf20Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 2158c2ecf20Sopenharmony_ci __field(size_t, buf_len) 2168c2ecf20Sopenharmony_ci __dynamic_array(u8, buf, buf_len) 2178c2ecf20Sopenharmony_ci ), 2188c2ecf20Sopenharmony_ci 2198c2ecf20Sopenharmony_ci TP_fast_assign( 2208c2ecf20Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 2218c2ecf20Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 2228c2ecf20Sopenharmony_ci __entry->buf_len = buf_len; 2238c2ecf20Sopenharmony_ci memcpy(__get_dynamic_array(buf), buf, buf_len); 2248c2ecf20Sopenharmony_ci ), 2258c2ecf20Sopenharmony_ci 2268c2ecf20Sopenharmony_ci TP_printk( 2278c2ecf20Sopenharmony_ci "%s %s len %zu", 2288c2ecf20Sopenharmony_ci __get_str(driver), 2298c2ecf20Sopenharmony_ci __get_str(device), 2308c2ecf20Sopenharmony_ci __entry->buf_len 2318c2ecf20Sopenharmony_ci ) 2328c2ecf20Sopenharmony_ci); 2338c2ecf20Sopenharmony_ci 2348c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_wmi_dbglog, 2358c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *buf, size_t buf_len), 2368c2ecf20Sopenharmony_ci 2378c2ecf20Sopenharmony_ci TP_ARGS(ar, buf, buf_len), 2388c2ecf20Sopenharmony_ci 2398c2ecf20Sopenharmony_ci TP_STRUCT__entry( 2408c2ecf20Sopenharmony_ci __string(device, dev_name(ar->dev)) 2418c2ecf20Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 2428c2ecf20Sopenharmony_ci __field(u8, hw_type) 2438c2ecf20Sopenharmony_ci __field(size_t, buf_len) 2448c2ecf20Sopenharmony_ci __dynamic_array(u8, buf, buf_len) 2458c2ecf20Sopenharmony_ci ), 2468c2ecf20Sopenharmony_ci 2478c2ecf20Sopenharmony_ci TP_fast_assign( 2488c2ecf20Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 2498c2ecf20Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 2508c2ecf20Sopenharmony_ci __entry->hw_type = ar->hw_rev; 2518c2ecf20Sopenharmony_ci __entry->buf_len = buf_len; 2528c2ecf20Sopenharmony_ci memcpy(__get_dynamic_array(buf), buf, buf_len); 2538c2ecf20Sopenharmony_ci ), 2548c2ecf20Sopenharmony_ci 2558c2ecf20Sopenharmony_ci TP_printk( 2568c2ecf20Sopenharmony_ci "%s %s %d len %zu", 2578c2ecf20Sopenharmony_ci __get_str(driver), 2588c2ecf20Sopenharmony_ci __get_str(device), 2598c2ecf20Sopenharmony_ci __entry->hw_type, 2608c2ecf20Sopenharmony_ci __entry->buf_len 2618c2ecf20Sopenharmony_ci ) 2628c2ecf20Sopenharmony_ci); 2638c2ecf20Sopenharmony_ci 2648c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_htt_pktlog, 2658c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *buf, u16 buf_len), 2668c2ecf20Sopenharmony_ci 2678c2ecf20Sopenharmony_ci TP_ARGS(ar, buf, buf_len), 2688c2ecf20Sopenharmony_ci 2698c2ecf20Sopenharmony_ci TP_STRUCT__entry( 2708c2ecf20Sopenharmony_ci __string(device, dev_name(ar->dev)) 2718c2ecf20Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 2728c2ecf20Sopenharmony_ci __field(u8, hw_type) 2738c2ecf20Sopenharmony_ci __field(u16, buf_len) 2748c2ecf20Sopenharmony_ci __dynamic_array(u8, pktlog, buf_len) 2758c2ecf20Sopenharmony_ci ), 2768c2ecf20Sopenharmony_ci 2778c2ecf20Sopenharmony_ci TP_fast_assign( 2788c2ecf20Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 2798c2ecf20Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 2808c2ecf20Sopenharmony_ci __entry->hw_type = ar->hw_rev; 2818c2ecf20Sopenharmony_ci __entry->buf_len = buf_len; 2828c2ecf20Sopenharmony_ci memcpy(__get_dynamic_array(pktlog), buf, buf_len); 2838c2ecf20Sopenharmony_ci ), 2848c2ecf20Sopenharmony_ci 2858c2ecf20Sopenharmony_ci TP_printk( 2868c2ecf20Sopenharmony_ci "%s %s %d size %hu", 2878c2ecf20Sopenharmony_ci __get_str(driver), 2888c2ecf20Sopenharmony_ci __get_str(device), 2898c2ecf20Sopenharmony_ci __entry->hw_type, 2908c2ecf20Sopenharmony_ci __entry->buf_len 2918c2ecf20Sopenharmony_ci ) 2928c2ecf20Sopenharmony_ci); 2938c2ecf20Sopenharmony_ci 2948c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_htt_tx, 2958c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, u16 msdu_id, u16 msdu_len, 2968c2ecf20Sopenharmony_ci u8 vdev_id, u8 tid), 2978c2ecf20Sopenharmony_ci 2988c2ecf20Sopenharmony_ci TP_ARGS(ar, msdu_id, msdu_len, vdev_id, tid), 2998c2ecf20Sopenharmony_ci 3008c2ecf20Sopenharmony_ci TP_STRUCT__entry( 3018c2ecf20Sopenharmony_ci __string(device, dev_name(ar->dev)) 3028c2ecf20Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 3038c2ecf20Sopenharmony_ci __field(u16, msdu_id) 3048c2ecf20Sopenharmony_ci __field(u16, msdu_len) 3058c2ecf20Sopenharmony_ci __field(u8, vdev_id) 3068c2ecf20Sopenharmony_ci __field(u8, tid) 3078c2ecf20Sopenharmony_ci ), 3088c2ecf20Sopenharmony_ci 3098c2ecf20Sopenharmony_ci TP_fast_assign( 3108c2ecf20Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 3118c2ecf20Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 3128c2ecf20Sopenharmony_ci __entry->msdu_id = msdu_id; 3138c2ecf20Sopenharmony_ci __entry->msdu_len = msdu_len; 3148c2ecf20Sopenharmony_ci __entry->vdev_id = vdev_id; 3158c2ecf20Sopenharmony_ci __entry->tid = tid; 3168c2ecf20Sopenharmony_ci ), 3178c2ecf20Sopenharmony_ci 3188c2ecf20Sopenharmony_ci TP_printk( 3198c2ecf20Sopenharmony_ci "%s %s msdu_id %d msdu_len %d vdev_id %d tid %d", 3208c2ecf20Sopenharmony_ci __get_str(driver), 3218c2ecf20Sopenharmony_ci __get_str(device), 3228c2ecf20Sopenharmony_ci __entry->msdu_id, 3238c2ecf20Sopenharmony_ci __entry->msdu_len, 3248c2ecf20Sopenharmony_ci __entry->vdev_id, 3258c2ecf20Sopenharmony_ci __entry->tid 3268c2ecf20Sopenharmony_ci ) 3278c2ecf20Sopenharmony_ci); 3288c2ecf20Sopenharmony_ci 3298c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_txrx_tx_unref, 3308c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, u16 msdu_id), 3318c2ecf20Sopenharmony_ci 3328c2ecf20Sopenharmony_ci TP_ARGS(ar, msdu_id), 3338c2ecf20Sopenharmony_ci 3348c2ecf20Sopenharmony_ci TP_STRUCT__entry( 3358c2ecf20Sopenharmony_ci __string(device, dev_name(ar->dev)) 3368c2ecf20Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 3378c2ecf20Sopenharmony_ci __field(u16, msdu_id) 3388c2ecf20Sopenharmony_ci ), 3398c2ecf20Sopenharmony_ci 3408c2ecf20Sopenharmony_ci TP_fast_assign( 3418c2ecf20Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 3428c2ecf20Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 3438c2ecf20Sopenharmony_ci __entry->msdu_id = msdu_id; 3448c2ecf20Sopenharmony_ci ), 3458c2ecf20Sopenharmony_ci 3468c2ecf20Sopenharmony_ci TP_printk( 3478c2ecf20Sopenharmony_ci "%s %s msdu_id %d", 3488c2ecf20Sopenharmony_ci __get_str(driver), 3498c2ecf20Sopenharmony_ci __get_str(device), 3508c2ecf20Sopenharmony_ci __entry->msdu_id 3518c2ecf20Sopenharmony_ci ) 3528c2ecf20Sopenharmony_ci); 3538c2ecf20Sopenharmony_ci 3548c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(ath10k_hdr_event, 3558c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *data, size_t len), 3568c2ecf20Sopenharmony_ci 3578c2ecf20Sopenharmony_ci TP_ARGS(ar, data, len), 3588c2ecf20Sopenharmony_ci 3598c2ecf20Sopenharmony_ci TP_STRUCT__entry( 3608c2ecf20Sopenharmony_ci __string(device, dev_name(ar->dev)) 3618c2ecf20Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 3628c2ecf20Sopenharmony_ci __field(size_t, len) 3638c2ecf20Sopenharmony_ci __dynamic_array(u8, data, ath10k_frm_hdr_len(data, len)) 3648c2ecf20Sopenharmony_ci ), 3658c2ecf20Sopenharmony_ci 3668c2ecf20Sopenharmony_ci TP_fast_assign( 3678c2ecf20Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 3688c2ecf20Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 3698c2ecf20Sopenharmony_ci __entry->len = ath10k_frm_hdr_len(data, len); 3708c2ecf20Sopenharmony_ci memcpy(__get_dynamic_array(data), data, __entry->len); 3718c2ecf20Sopenharmony_ci ), 3728c2ecf20Sopenharmony_ci 3738c2ecf20Sopenharmony_ci TP_printk( 3748c2ecf20Sopenharmony_ci "%s %s len %zu\n", 3758c2ecf20Sopenharmony_ci __get_str(driver), 3768c2ecf20Sopenharmony_ci __get_str(device), 3778c2ecf20Sopenharmony_ci __entry->len 3788c2ecf20Sopenharmony_ci ) 3798c2ecf20Sopenharmony_ci); 3808c2ecf20Sopenharmony_ci 3818c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(ath10k_payload_event, 3828c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *data, size_t len), 3838c2ecf20Sopenharmony_ci 3848c2ecf20Sopenharmony_ci TP_ARGS(ar, data, len), 3858c2ecf20Sopenharmony_ci 3868c2ecf20Sopenharmony_ci TP_STRUCT__entry( 3878c2ecf20Sopenharmony_ci __string(device, dev_name(ar->dev)) 3888c2ecf20Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 3898c2ecf20Sopenharmony_ci __field(size_t, len) 3908c2ecf20Sopenharmony_ci __dynamic_array(u8, payload, (len - 3918c2ecf20Sopenharmony_ci ath10k_frm_hdr_len(data, len))) 3928c2ecf20Sopenharmony_ci ), 3938c2ecf20Sopenharmony_ci 3948c2ecf20Sopenharmony_ci TP_fast_assign( 3958c2ecf20Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 3968c2ecf20Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 3978c2ecf20Sopenharmony_ci __entry->len = len - ath10k_frm_hdr_len(data, len); 3988c2ecf20Sopenharmony_ci memcpy(__get_dynamic_array(payload), 3998c2ecf20Sopenharmony_ci data + ath10k_frm_hdr_len(data, len), __entry->len); 4008c2ecf20Sopenharmony_ci ), 4018c2ecf20Sopenharmony_ci 4028c2ecf20Sopenharmony_ci TP_printk( 4038c2ecf20Sopenharmony_ci "%s %s len %zu\n", 4048c2ecf20Sopenharmony_ci __get_str(driver), 4058c2ecf20Sopenharmony_ci __get_str(device), 4068c2ecf20Sopenharmony_ci __entry->len 4078c2ecf20Sopenharmony_ci ) 4088c2ecf20Sopenharmony_ci); 4098c2ecf20Sopenharmony_ci 4108c2ecf20Sopenharmony_ciDEFINE_EVENT(ath10k_hdr_event, ath10k_tx_hdr, 4118c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *data, size_t len), 4128c2ecf20Sopenharmony_ci TP_ARGS(ar, data, len) 4138c2ecf20Sopenharmony_ci); 4148c2ecf20Sopenharmony_ci 4158c2ecf20Sopenharmony_ciDEFINE_EVENT(ath10k_payload_event, ath10k_tx_payload, 4168c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *data, size_t len), 4178c2ecf20Sopenharmony_ci TP_ARGS(ar, data, len) 4188c2ecf20Sopenharmony_ci); 4198c2ecf20Sopenharmony_ci 4208c2ecf20Sopenharmony_ciDEFINE_EVENT(ath10k_hdr_event, ath10k_rx_hdr, 4218c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *data, size_t len), 4228c2ecf20Sopenharmony_ci TP_ARGS(ar, data, len) 4238c2ecf20Sopenharmony_ci); 4248c2ecf20Sopenharmony_ci 4258c2ecf20Sopenharmony_ciDEFINE_EVENT(ath10k_payload_event, ath10k_rx_payload, 4268c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *data, size_t len), 4278c2ecf20Sopenharmony_ci TP_ARGS(ar, data, len) 4288c2ecf20Sopenharmony_ci); 4298c2ecf20Sopenharmony_ci 4308c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_htt_rx_desc, 4318c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *data, size_t len), 4328c2ecf20Sopenharmony_ci 4338c2ecf20Sopenharmony_ci TP_ARGS(ar, data, len), 4348c2ecf20Sopenharmony_ci 4358c2ecf20Sopenharmony_ci TP_STRUCT__entry( 4368c2ecf20Sopenharmony_ci __string(device, dev_name(ar->dev)) 4378c2ecf20Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 4388c2ecf20Sopenharmony_ci __field(u8, hw_type) 4398c2ecf20Sopenharmony_ci __field(u16, len) 4408c2ecf20Sopenharmony_ci __dynamic_array(u8, rxdesc, len) 4418c2ecf20Sopenharmony_ci ), 4428c2ecf20Sopenharmony_ci 4438c2ecf20Sopenharmony_ci TP_fast_assign( 4448c2ecf20Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 4458c2ecf20Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 4468c2ecf20Sopenharmony_ci __entry->hw_type = ar->hw_rev; 4478c2ecf20Sopenharmony_ci __entry->len = len; 4488c2ecf20Sopenharmony_ci memcpy(__get_dynamic_array(rxdesc), data, len); 4498c2ecf20Sopenharmony_ci ), 4508c2ecf20Sopenharmony_ci 4518c2ecf20Sopenharmony_ci TP_printk( 4528c2ecf20Sopenharmony_ci "%s %s %d rxdesc len %d", 4538c2ecf20Sopenharmony_ci __get_str(driver), 4548c2ecf20Sopenharmony_ci __get_str(device), 4558c2ecf20Sopenharmony_ci __entry->hw_type, 4568c2ecf20Sopenharmony_ci __entry->len 4578c2ecf20Sopenharmony_ci ) 4588c2ecf20Sopenharmony_ci); 4598c2ecf20Sopenharmony_ci 4608c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_wmi_diag_container, 4618c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, 4628c2ecf20Sopenharmony_ci u8 type, 4638c2ecf20Sopenharmony_ci u32 timestamp, 4648c2ecf20Sopenharmony_ci u32 code, 4658c2ecf20Sopenharmony_ci u16 len, 4668c2ecf20Sopenharmony_ci const void *data), 4678c2ecf20Sopenharmony_ci 4688c2ecf20Sopenharmony_ci TP_ARGS(ar, type, timestamp, code, len, data), 4698c2ecf20Sopenharmony_ci 4708c2ecf20Sopenharmony_ci TP_STRUCT__entry( 4718c2ecf20Sopenharmony_ci __string(device, dev_name(ar->dev)) 4728c2ecf20Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 4738c2ecf20Sopenharmony_ci __field(u8, type) 4748c2ecf20Sopenharmony_ci __field(u32, timestamp) 4758c2ecf20Sopenharmony_ci __field(u32, code) 4768c2ecf20Sopenharmony_ci __field(u16, len) 4778c2ecf20Sopenharmony_ci __dynamic_array(u8, data, len) 4788c2ecf20Sopenharmony_ci ), 4798c2ecf20Sopenharmony_ci 4808c2ecf20Sopenharmony_ci TP_fast_assign( 4818c2ecf20Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 4828c2ecf20Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 4838c2ecf20Sopenharmony_ci __entry->type = type; 4848c2ecf20Sopenharmony_ci __entry->timestamp = timestamp; 4858c2ecf20Sopenharmony_ci __entry->code = code; 4868c2ecf20Sopenharmony_ci __entry->len = len; 4878c2ecf20Sopenharmony_ci memcpy(__get_dynamic_array(data), data, len); 4888c2ecf20Sopenharmony_ci ), 4898c2ecf20Sopenharmony_ci 4908c2ecf20Sopenharmony_ci TP_printk( 4918c2ecf20Sopenharmony_ci "%s %s diag container type %hhu timestamp %u code %u len %d", 4928c2ecf20Sopenharmony_ci __get_str(driver), 4938c2ecf20Sopenharmony_ci __get_str(device), 4948c2ecf20Sopenharmony_ci __entry->type, 4958c2ecf20Sopenharmony_ci __entry->timestamp, 4968c2ecf20Sopenharmony_ci __entry->code, 4978c2ecf20Sopenharmony_ci __entry->len 4988c2ecf20Sopenharmony_ci ) 4998c2ecf20Sopenharmony_ci); 5008c2ecf20Sopenharmony_ci 5018c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_wmi_diag, 5028c2ecf20Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *data, size_t len), 5038c2ecf20Sopenharmony_ci 5048c2ecf20Sopenharmony_ci TP_ARGS(ar, data, len), 5058c2ecf20Sopenharmony_ci 5068c2ecf20Sopenharmony_ci TP_STRUCT__entry( 5078c2ecf20Sopenharmony_ci __string(device, dev_name(ar->dev)) 5088c2ecf20Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 5098c2ecf20Sopenharmony_ci __field(u16, len) 5108c2ecf20Sopenharmony_ci __dynamic_array(u8, data, len) 5118c2ecf20Sopenharmony_ci ), 5128c2ecf20Sopenharmony_ci 5138c2ecf20Sopenharmony_ci TP_fast_assign( 5148c2ecf20Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 5158c2ecf20Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 5168c2ecf20Sopenharmony_ci __entry->len = len; 5178c2ecf20Sopenharmony_ci memcpy(__get_dynamic_array(data), data, len); 5188c2ecf20Sopenharmony_ci ), 5198c2ecf20Sopenharmony_ci 5208c2ecf20Sopenharmony_ci TP_printk( 5218c2ecf20Sopenharmony_ci "%s %s tlv diag len %d", 5228c2ecf20Sopenharmony_ci __get_str(driver), 5238c2ecf20Sopenharmony_ci __get_str(device), 5248c2ecf20Sopenharmony_ci __entry->len 5258c2ecf20Sopenharmony_ci ) 5268c2ecf20Sopenharmony_ci); 5278c2ecf20Sopenharmony_ci 5288c2ecf20Sopenharmony_ci#endif /* _TRACE_H_ || TRACE_HEADER_MULTI_READ*/ 5298c2ecf20Sopenharmony_ci 5308c2ecf20Sopenharmony_ci/* we don't want to use include/trace/events */ 5318c2ecf20Sopenharmony_ci#undef TRACE_INCLUDE_PATH 5328c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_PATH . 5338c2ecf20Sopenharmony_ci#undef TRACE_INCLUDE_FILE 5348c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_FILE trace 5358c2ecf20Sopenharmony_ci 5368c2ecf20Sopenharmony_ci/* This part must be outside protection */ 5378c2ecf20Sopenharmony_ci#include <trace/define_trace.h> 538