162306a36Sopenharmony_ci/* SPDX-License-Identifier: ISC */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (c) 2005-2011 Atheros Communications Inc. 462306a36Sopenharmony_ci * Copyright (c) 2011-2016 Qualcomm Atheros, Inc. 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include <linux/tracepoint.h> 1062306a36Sopenharmony_ci#include "core.h" 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#if !defined(_TRACE_H_) 1362306a36Sopenharmony_cistatic inline u32 ath10k_frm_hdr_len(const void *buf, size_t len) 1462306a36Sopenharmony_ci{ 1562306a36Sopenharmony_ci const struct ieee80211_hdr *hdr = buf; 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci /* In some rare cases (e.g. fcs error) device reports frame buffer 1862306a36Sopenharmony_ci * shorter than what frame header implies (e.g. len = 0). The buffer 1962306a36Sopenharmony_ci * can still be accessed so do a simple min() to guarantee caller 2062306a36Sopenharmony_ci * doesn't get value greater than len. 2162306a36Sopenharmony_ci */ 2262306a36Sopenharmony_ci return min_t(u32, len, ieee80211_hdrlen(hdr->frame_control)); 2362306a36Sopenharmony_ci} 2462306a36Sopenharmony_ci#endif 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci#define _TRACE_H_ 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci/* create empty functions when tracing is disabled */ 2962306a36Sopenharmony_ci#if !defined(CONFIG_ATH10K_TRACING) 3062306a36Sopenharmony_ci#undef TRACE_EVENT 3162306a36Sopenharmony_ci#define TRACE_EVENT(name, proto, ...) \ 3262306a36Sopenharmony_cistatic inline void trace_ ## name(proto) {} \ 3362306a36Sopenharmony_cistatic inline bool trace_##name##_enabled(void) \ 3462306a36Sopenharmony_ci{ \ 3562306a36Sopenharmony_ci return false; \ 3662306a36Sopenharmony_ci} 3762306a36Sopenharmony_ci#undef DECLARE_EVENT_CLASS 3862306a36Sopenharmony_ci#define DECLARE_EVENT_CLASS(...) 3962306a36Sopenharmony_ci#undef DEFINE_EVENT 4062306a36Sopenharmony_ci#define DEFINE_EVENT(evt_class, name, proto, ...) \ 4162306a36Sopenharmony_cistatic inline void trace_ ## name(proto) {} 4262306a36Sopenharmony_ci#endif /* !CONFIG_ATH10K_TRACING || __CHECKER__ */ 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci#undef TRACE_SYSTEM 4562306a36Sopenharmony_ci#define TRACE_SYSTEM ath10k 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci#define ATH10K_MSG_MAX 400 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ciDECLARE_EVENT_CLASS(ath10k_log_event, 5062306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, struct va_format *vaf), 5162306a36Sopenharmony_ci TP_ARGS(ar, vaf), 5262306a36Sopenharmony_ci TP_STRUCT__entry( 5362306a36Sopenharmony_ci __string(device, dev_name(ar->dev)) 5462306a36Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 5562306a36Sopenharmony_ci __vstring(msg, vaf->fmt, vaf->va) 5662306a36Sopenharmony_ci ), 5762306a36Sopenharmony_ci TP_fast_assign( 5862306a36Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 5962306a36Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 6062306a36Sopenharmony_ci __assign_vstr(msg, vaf->fmt, vaf->va); 6162306a36Sopenharmony_ci ), 6262306a36Sopenharmony_ci TP_printk( 6362306a36Sopenharmony_ci "%s %s %s", 6462306a36Sopenharmony_ci __get_str(driver), 6562306a36Sopenharmony_ci __get_str(device), 6662306a36Sopenharmony_ci __get_str(msg) 6762306a36Sopenharmony_ci ) 6862306a36Sopenharmony_ci); 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ciDEFINE_EVENT(ath10k_log_event, ath10k_log_err, 7162306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, struct va_format *vaf), 7262306a36Sopenharmony_ci TP_ARGS(ar, vaf) 7362306a36Sopenharmony_ci); 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ciDEFINE_EVENT(ath10k_log_event, ath10k_log_warn, 7662306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, struct va_format *vaf), 7762306a36Sopenharmony_ci TP_ARGS(ar, vaf) 7862306a36Sopenharmony_ci); 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ciDEFINE_EVENT(ath10k_log_event, ath10k_log_info, 8162306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, struct va_format *vaf), 8262306a36Sopenharmony_ci TP_ARGS(ar, vaf) 8362306a36Sopenharmony_ci); 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ciTRACE_EVENT(ath10k_log_dbg, 8662306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, unsigned int level, struct va_format *vaf), 8762306a36Sopenharmony_ci TP_ARGS(ar, level, vaf), 8862306a36Sopenharmony_ci TP_STRUCT__entry( 8962306a36Sopenharmony_ci __string(device, dev_name(ar->dev)) 9062306a36Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 9162306a36Sopenharmony_ci __field(unsigned int, level) 9262306a36Sopenharmony_ci __vstring(msg, vaf->fmt, vaf->va) 9362306a36Sopenharmony_ci ), 9462306a36Sopenharmony_ci TP_fast_assign( 9562306a36Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 9662306a36Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 9762306a36Sopenharmony_ci __entry->level = level; 9862306a36Sopenharmony_ci __assign_vstr(msg, vaf->fmt, vaf->va); 9962306a36Sopenharmony_ci ), 10062306a36Sopenharmony_ci TP_printk( 10162306a36Sopenharmony_ci "%s %s %s", 10262306a36Sopenharmony_ci __get_str(driver), 10362306a36Sopenharmony_ci __get_str(device), 10462306a36Sopenharmony_ci __get_str(msg) 10562306a36Sopenharmony_ci ) 10662306a36Sopenharmony_ci); 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ciTRACE_EVENT(ath10k_log_dbg_dump, 10962306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, const char *msg, const char *prefix, 11062306a36Sopenharmony_ci const void *buf, size_t buf_len), 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci TP_ARGS(ar, msg, prefix, buf, buf_len), 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci TP_STRUCT__entry( 11562306a36Sopenharmony_ci __string(device, dev_name(ar->dev)) 11662306a36Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 11762306a36Sopenharmony_ci __string(msg, msg) 11862306a36Sopenharmony_ci __string(prefix, prefix) 11962306a36Sopenharmony_ci __field(size_t, buf_len) 12062306a36Sopenharmony_ci __dynamic_array(u8, buf, buf_len) 12162306a36Sopenharmony_ci ), 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci TP_fast_assign( 12462306a36Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 12562306a36Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 12662306a36Sopenharmony_ci __assign_str(msg, msg); 12762306a36Sopenharmony_ci __assign_str(prefix, prefix); 12862306a36Sopenharmony_ci __entry->buf_len = buf_len; 12962306a36Sopenharmony_ci memcpy(__get_dynamic_array(buf), buf, buf_len); 13062306a36Sopenharmony_ci ), 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci TP_printk( 13362306a36Sopenharmony_ci "%s %s %s/%s\n", 13462306a36Sopenharmony_ci __get_str(driver), 13562306a36Sopenharmony_ci __get_str(device), 13662306a36Sopenharmony_ci __get_str(prefix), 13762306a36Sopenharmony_ci __get_str(msg) 13862306a36Sopenharmony_ci ) 13962306a36Sopenharmony_ci); 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ciTRACE_EVENT(ath10k_wmi_cmd, 14262306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len), 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci TP_ARGS(ar, id, buf, buf_len), 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ci TP_STRUCT__entry( 14762306a36Sopenharmony_ci __string(device, dev_name(ar->dev)) 14862306a36Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 14962306a36Sopenharmony_ci __field(unsigned int, id) 15062306a36Sopenharmony_ci __field(size_t, buf_len) 15162306a36Sopenharmony_ci __dynamic_array(u8, buf, buf_len) 15262306a36Sopenharmony_ci ), 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_ci TP_fast_assign( 15562306a36Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 15662306a36Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 15762306a36Sopenharmony_ci __entry->id = id; 15862306a36Sopenharmony_ci __entry->buf_len = buf_len; 15962306a36Sopenharmony_ci memcpy(__get_dynamic_array(buf), buf, buf_len); 16062306a36Sopenharmony_ci ), 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_ci TP_printk( 16362306a36Sopenharmony_ci "%s %s id %d len %zu", 16462306a36Sopenharmony_ci __get_str(driver), 16562306a36Sopenharmony_ci __get_str(device), 16662306a36Sopenharmony_ci __entry->id, 16762306a36Sopenharmony_ci __entry->buf_len 16862306a36Sopenharmony_ci ) 16962306a36Sopenharmony_ci); 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ciTRACE_EVENT(ath10k_wmi_event, 17262306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len), 17362306a36Sopenharmony_ci 17462306a36Sopenharmony_ci TP_ARGS(ar, id, buf, buf_len), 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ci TP_STRUCT__entry( 17762306a36Sopenharmony_ci __string(device, dev_name(ar->dev)) 17862306a36Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 17962306a36Sopenharmony_ci __field(unsigned int, id) 18062306a36Sopenharmony_ci __field(size_t, buf_len) 18162306a36Sopenharmony_ci __dynamic_array(u8, buf, buf_len) 18262306a36Sopenharmony_ci ), 18362306a36Sopenharmony_ci 18462306a36Sopenharmony_ci TP_fast_assign( 18562306a36Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 18662306a36Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 18762306a36Sopenharmony_ci __entry->id = id; 18862306a36Sopenharmony_ci __entry->buf_len = buf_len; 18962306a36Sopenharmony_ci memcpy(__get_dynamic_array(buf), buf, buf_len); 19062306a36Sopenharmony_ci ), 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_ci TP_printk( 19362306a36Sopenharmony_ci "%s %s id %d len %zu", 19462306a36Sopenharmony_ci __get_str(driver), 19562306a36Sopenharmony_ci __get_str(device), 19662306a36Sopenharmony_ci __entry->id, 19762306a36Sopenharmony_ci __entry->buf_len 19862306a36Sopenharmony_ci ) 19962306a36Sopenharmony_ci); 20062306a36Sopenharmony_ci 20162306a36Sopenharmony_ciTRACE_EVENT(ath10k_htt_stats, 20262306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *buf, size_t buf_len), 20362306a36Sopenharmony_ci 20462306a36Sopenharmony_ci TP_ARGS(ar, buf, buf_len), 20562306a36Sopenharmony_ci 20662306a36Sopenharmony_ci TP_STRUCT__entry( 20762306a36Sopenharmony_ci __string(device, dev_name(ar->dev)) 20862306a36Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 20962306a36Sopenharmony_ci __field(size_t, buf_len) 21062306a36Sopenharmony_ci __dynamic_array(u8, buf, buf_len) 21162306a36Sopenharmony_ci ), 21262306a36Sopenharmony_ci 21362306a36Sopenharmony_ci TP_fast_assign( 21462306a36Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 21562306a36Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 21662306a36Sopenharmony_ci __entry->buf_len = buf_len; 21762306a36Sopenharmony_ci memcpy(__get_dynamic_array(buf), buf, buf_len); 21862306a36Sopenharmony_ci ), 21962306a36Sopenharmony_ci 22062306a36Sopenharmony_ci TP_printk( 22162306a36Sopenharmony_ci "%s %s len %zu", 22262306a36Sopenharmony_ci __get_str(driver), 22362306a36Sopenharmony_ci __get_str(device), 22462306a36Sopenharmony_ci __entry->buf_len 22562306a36Sopenharmony_ci ) 22662306a36Sopenharmony_ci); 22762306a36Sopenharmony_ci 22862306a36Sopenharmony_ciTRACE_EVENT(ath10k_wmi_dbglog, 22962306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *buf, size_t buf_len), 23062306a36Sopenharmony_ci 23162306a36Sopenharmony_ci TP_ARGS(ar, buf, buf_len), 23262306a36Sopenharmony_ci 23362306a36Sopenharmony_ci TP_STRUCT__entry( 23462306a36Sopenharmony_ci __string(device, dev_name(ar->dev)) 23562306a36Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 23662306a36Sopenharmony_ci __field(u8, hw_type) 23762306a36Sopenharmony_ci __field(size_t, buf_len) 23862306a36Sopenharmony_ci __dynamic_array(u8, buf, buf_len) 23962306a36Sopenharmony_ci ), 24062306a36Sopenharmony_ci 24162306a36Sopenharmony_ci TP_fast_assign( 24262306a36Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 24362306a36Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 24462306a36Sopenharmony_ci __entry->hw_type = ar->hw_rev; 24562306a36Sopenharmony_ci __entry->buf_len = buf_len; 24662306a36Sopenharmony_ci memcpy(__get_dynamic_array(buf), buf, buf_len); 24762306a36Sopenharmony_ci ), 24862306a36Sopenharmony_ci 24962306a36Sopenharmony_ci TP_printk( 25062306a36Sopenharmony_ci "%s %s %d len %zu", 25162306a36Sopenharmony_ci __get_str(driver), 25262306a36Sopenharmony_ci __get_str(device), 25362306a36Sopenharmony_ci __entry->hw_type, 25462306a36Sopenharmony_ci __entry->buf_len 25562306a36Sopenharmony_ci ) 25662306a36Sopenharmony_ci); 25762306a36Sopenharmony_ci 25862306a36Sopenharmony_ciTRACE_EVENT(ath10k_htt_pktlog, 25962306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *buf, u16 buf_len), 26062306a36Sopenharmony_ci 26162306a36Sopenharmony_ci TP_ARGS(ar, buf, buf_len), 26262306a36Sopenharmony_ci 26362306a36Sopenharmony_ci TP_STRUCT__entry( 26462306a36Sopenharmony_ci __string(device, dev_name(ar->dev)) 26562306a36Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 26662306a36Sopenharmony_ci __field(u8, hw_type) 26762306a36Sopenharmony_ci __field(u16, buf_len) 26862306a36Sopenharmony_ci __dynamic_array(u8, pktlog, buf_len) 26962306a36Sopenharmony_ci ), 27062306a36Sopenharmony_ci 27162306a36Sopenharmony_ci TP_fast_assign( 27262306a36Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 27362306a36Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 27462306a36Sopenharmony_ci __entry->hw_type = ar->hw_rev; 27562306a36Sopenharmony_ci __entry->buf_len = buf_len; 27662306a36Sopenharmony_ci memcpy(__get_dynamic_array(pktlog), buf, buf_len); 27762306a36Sopenharmony_ci ), 27862306a36Sopenharmony_ci 27962306a36Sopenharmony_ci TP_printk( 28062306a36Sopenharmony_ci "%s %s %d size %u", 28162306a36Sopenharmony_ci __get_str(driver), 28262306a36Sopenharmony_ci __get_str(device), 28362306a36Sopenharmony_ci __entry->hw_type, 28462306a36Sopenharmony_ci __entry->buf_len 28562306a36Sopenharmony_ci ) 28662306a36Sopenharmony_ci); 28762306a36Sopenharmony_ci 28862306a36Sopenharmony_ciTRACE_EVENT(ath10k_htt_tx, 28962306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, u16 msdu_id, u16 msdu_len, 29062306a36Sopenharmony_ci u8 vdev_id, u8 tid), 29162306a36Sopenharmony_ci 29262306a36Sopenharmony_ci TP_ARGS(ar, msdu_id, msdu_len, vdev_id, tid), 29362306a36Sopenharmony_ci 29462306a36Sopenharmony_ci TP_STRUCT__entry( 29562306a36Sopenharmony_ci __string(device, dev_name(ar->dev)) 29662306a36Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 29762306a36Sopenharmony_ci __field(u16, msdu_id) 29862306a36Sopenharmony_ci __field(u16, msdu_len) 29962306a36Sopenharmony_ci __field(u8, vdev_id) 30062306a36Sopenharmony_ci __field(u8, tid) 30162306a36Sopenharmony_ci ), 30262306a36Sopenharmony_ci 30362306a36Sopenharmony_ci TP_fast_assign( 30462306a36Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 30562306a36Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 30662306a36Sopenharmony_ci __entry->msdu_id = msdu_id; 30762306a36Sopenharmony_ci __entry->msdu_len = msdu_len; 30862306a36Sopenharmony_ci __entry->vdev_id = vdev_id; 30962306a36Sopenharmony_ci __entry->tid = tid; 31062306a36Sopenharmony_ci ), 31162306a36Sopenharmony_ci 31262306a36Sopenharmony_ci TP_printk( 31362306a36Sopenharmony_ci "%s %s msdu_id %d msdu_len %d vdev_id %d tid %d", 31462306a36Sopenharmony_ci __get_str(driver), 31562306a36Sopenharmony_ci __get_str(device), 31662306a36Sopenharmony_ci __entry->msdu_id, 31762306a36Sopenharmony_ci __entry->msdu_len, 31862306a36Sopenharmony_ci __entry->vdev_id, 31962306a36Sopenharmony_ci __entry->tid 32062306a36Sopenharmony_ci ) 32162306a36Sopenharmony_ci); 32262306a36Sopenharmony_ci 32362306a36Sopenharmony_ciTRACE_EVENT(ath10k_txrx_tx_unref, 32462306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, u16 msdu_id), 32562306a36Sopenharmony_ci 32662306a36Sopenharmony_ci TP_ARGS(ar, msdu_id), 32762306a36Sopenharmony_ci 32862306a36Sopenharmony_ci TP_STRUCT__entry( 32962306a36Sopenharmony_ci __string(device, dev_name(ar->dev)) 33062306a36Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 33162306a36Sopenharmony_ci __field(u16, msdu_id) 33262306a36Sopenharmony_ci ), 33362306a36Sopenharmony_ci 33462306a36Sopenharmony_ci TP_fast_assign( 33562306a36Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 33662306a36Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 33762306a36Sopenharmony_ci __entry->msdu_id = msdu_id; 33862306a36Sopenharmony_ci ), 33962306a36Sopenharmony_ci 34062306a36Sopenharmony_ci TP_printk( 34162306a36Sopenharmony_ci "%s %s msdu_id %d", 34262306a36Sopenharmony_ci __get_str(driver), 34362306a36Sopenharmony_ci __get_str(device), 34462306a36Sopenharmony_ci __entry->msdu_id 34562306a36Sopenharmony_ci ) 34662306a36Sopenharmony_ci); 34762306a36Sopenharmony_ci 34862306a36Sopenharmony_ciDECLARE_EVENT_CLASS(ath10k_hdr_event, 34962306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *data, size_t len), 35062306a36Sopenharmony_ci 35162306a36Sopenharmony_ci TP_ARGS(ar, data, len), 35262306a36Sopenharmony_ci 35362306a36Sopenharmony_ci TP_STRUCT__entry( 35462306a36Sopenharmony_ci __string(device, dev_name(ar->dev)) 35562306a36Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 35662306a36Sopenharmony_ci __field(size_t, len) 35762306a36Sopenharmony_ci __dynamic_array(u8, data, ath10k_frm_hdr_len(data, len)) 35862306a36Sopenharmony_ci ), 35962306a36Sopenharmony_ci 36062306a36Sopenharmony_ci TP_fast_assign( 36162306a36Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 36262306a36Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 36362306a36Sopenharmony_ci __entry->len = ath10k_frm_hdr_len(data, len); 36462306a36Sopenharmony_ci memcpy(__get_dynamic_array(data), data, __entry->len); 36562306a36Sopenharmony_ci ), 36662306a36Sopenharmony_ci 36762306a36Sopenharmony_ci TP_printk( 36862306a36Sopenharmony_ci "%s %s len %zu\n", 36962306a36Sopenharmony_ci __get_str(driver), 37062306a36Sopenharmony_ci __get_str(device), 37162306a36Sopenharmony_ci __entry->len 37262306a36Sopenharmony_ci ) 37362306a36Sopenharmony_ci); 37462306a36Sopenharmony_ci 37562306a36Sopenharmony_ciDECLARE_EVENT_CLASS(ath10k_payload_event, 37662306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *data, size_t len), 37762306a36Sopenharmony_ci 37862306a36Sopenharmony_ci TP_ARGS(ar, data, len), 37962306a36Sopenharmony_ci 38062306a36Sopenharmony_ci TP_STRUCT__entry( 38162306a36Sopenharmony_ci __string(device, dev_name(ar->dev)) 38262306a36Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 38362306a36Sopenharmony_ci __field(size_t, len) 38462306a36Sopenharmony_ci __dynamic_array(u8, payload, (len - 38562306a36Sopenharmony_ci ath10k_frm_hdr_len(data, len))) 38662306a36Sopenharmony_ci ), 38762306a36Sopenharmony_ci 38862306a36Sopenharmony_ci TP_fast_assign( 38962306a36Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 39062306a36Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 39162306a36Sopenharmony_ci __entry->len = len - ath10k_frm_hdr_len(data, len); 39262306a36Sopenharmony_ci memcpy(__get_dynamic_array(payload), 39362306a36Sopenharmony_ci data + ath10k_frm_hdr_len(data, len), __entry->len); 39462306a36Sopenharmony_ci ), 39562306a36Sopenharmony_ci 39662306a36Sopenharmony_ci TP_printk( 39762306a36Sopenharmony_ci "%s %s len %zu\n", 39862306a36Sopenharmony_ci __get_str(driver), 39962306a36Sopenharmony_ci __get_str(device), 40062306a36Sopenharmony_ci __entry->len 40162306a36Sopenharmony_ci ) 40262306a36Sopenharmony_ci); 40362306a36Sopenharmony_ci 40462306a36Sopenharmony_ciDEFINE_EVENT(ath10k_hdr_event, ath10k_tx_hdr, 40562306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *data, size_t len), 40662306a36Sopenharmony_ci TP_ARGS(ar, data, len) 40762306a36Sopenharmony_ci); 40862306a36Sopenharmony_ci 40962306a36Sopenharmony_ciDEFINE_EVENT(ath10k_payload_event, ath10k_tx_payload, 41062306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *data, size_t len), 41162306a36Sopenharmony_ci TP_ARGS(ar, data, len) 41262306a36Sopenharmony_ci); 41362306a36Sopenharmony_ci 41462306a36Sopenharmony_ciDEFINE_EVENT(ath10k_hdr_event, ath10k_rx_hdr, 41562306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *data, size_t len), 41662306a36Sopenharmony_ci TP_ARGS(ar, data, len) 41762306a36Sopenharmony_ci); 41862306a36Sopenharmony_ci 41962306a36Sopenharmony_ciDEFINE_EVENT(ath10k_payload_event, ath10k_rx_payload, 42062306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *data, size_t len), 42162306a36Sopenharmony_ci TP_ARGS(ar, data, len) 42262306a36Sopenharmony_ci); 42362306a36Sopenharmony_ci 42462306a36Sopenharmony_ciTRACE_EVENT(ath10k_htt_rx_desc, 42562306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *data, size_t len), 42662306a36Sopenharmony_ci 42762306a36Sopenharmony_ci TP_ARGS(ar, data, len), 42862306a36Sopenharmony_ci 42962306a36Sopenharmony_ci TP_STRUCT__entry( 43062306a36Sopenharmony_ci __string(device, dev_name(ar->dev)) 43162306a36Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 43262306a36Sopenharmony_ci __field(u8, hw_type) 43362306a36Sopenharmony_ci __field(u16, len) 43462306a36Sopenharmony_ci __dynamic_array(u8, rxdesc, len) 43562306a36Sopenharmony_ci ), 43662306a36Sopenharmony_ci 43762306a36Sopenharmony_ci TP_fast_assign( 43862306a36Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 43962306a36Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 44062306a36Sopenharmony_ci __entry->hw_type = ar->hw_rev; 44162306a36Sopenharmony_ci __entry->len = len; 44262306a36Sopenharmony_ci memcpy(__get_dynamic_array(rxdesc), data, len); 44362306a36Sopenharmony_ci ), 44462306a36Sopenharmony_ci 44562306a36Sopenharmony_ci TP_printk( 44662306a36Sopenharmony_ci "%s %s %d rxdesc len %d", 44762306a36Sopenharmony_ci __get_str(driver), 44862306a36Sopenharmony_ci __get_str(device), 44962306a36Sopenharmony_ci __entry->hw_type, 45062306a36Sopenharmony_ci __entry->len 45162306a36Sopenharmony_ci ) 45262306a36Sopenharmony_ci); 45362306a36Sopenharmony_ci 45462306a36Sopenharmony_ciTRACE_EVENT(ath10k_wmi_diag_container, 45562306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, 45662306a36Sopenharmony_ci u8 type, 45762306a36Sopenharmony_ci u32 timestamp, 45862306a36Sopenharmony_ci u32 code, 45962306a36Sopenharmony_ci u16 len, 46062306a36Sopenharmony_ci const void *data), 46162306a36Sopenharmony_ci 46262306a36Sopenharmony_ci TP_ARGS(ar, type, timestamp, code, len, data), 46362306a36Sopenharmony_ci 46462306a36Sopenharmony_ci TP_STRUCT__entry( 46562306a36Sopenharmony_ci __string(device, dev_name(ar->dev)) 46662306a36Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 46762306a36Sopenharmony_ci __field(u8, type) 46862306a36Sopenharmony_ci __field(u32, timestamp) 46962306a36Sopenharmony_ci __field(u32, code) 47062306a36Sopenharmony_ci __field(u16, len) 47162306a36Sopenharmony_ci __dynamic_array(u8, data, len) 47262306a36Sopenharmony_ci ), 47362306a36Sopenharmony_ci 47462306a36Sopenharmony_ci TP_fast_assign( 47562306a36Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 47662306a36Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 47762306a36Sopenharmony_ci __entry->type = type; 47862306a36Sopenharmony_ci __entry->timestamp = timestamp; 47962306a36Sopenharmony_ci __entry->code = code; 48062306a36Sopenharmony_ci __entry->len = len; 48162306a36Sopenharmony_ci memcpy(__get_dynamic_array(data), data, len); 48262306a36Sopenharmony_ci ), 48362306a36Sopenharmony_ci 48462306a36Sopenharmony_ci TP_printk( 48562306a36Sopenharmony_ci "%s %s diag container type %u timestamp %u code %u len %d", 48662306a36Sopenharmony_ci __get_str(driver), 48762306a36Sopenharmony_ci __get_str(device), 48862306a36Sopenharmony_ci __entry->type, 48962306a36Sopenharmony_ci __entry->timestamp, 49062306a36Sopenharmony_ci __entry->code, 49162306a36Sopenharmony_ci __entry->len 49262306a36Sopenharmony_ci ) 49362306a36Sopenharmony_ci); 49462306a36Sopenharmony_ci 49562306a36Sopenharmony_ciTRACE_EVENT(ath10k_wmi_diag, 49662306a36Sopenharmony_ci TP_PROTO(struct ath10k *ar, const void *data, size_t len), 49762306a36Sopenharmony_ci 49862306a36Sopenharmony_ci TP_ARGS(ar, data, len), 49962306a36Sopenharmony_ci 50062306a36Sopenharmony_ci TP_STRUCT__entry( 50162306a36Sopenharmony_ci __string(device, dev_name(ar->dev)) 50262306a36Sopenharmony_ci __string(driver, dev_driver_string(ar->dev)) 50362306a36Sopenharmony_ci __field(u16, len) 50462306a36Sopenharmony_ci __dynamic_array(u8, data, len) 50562306a36Sopenharmony_ci ), 50662306a36Sopenharmony_ci 50762306a36Sopenharmony_ci TP_fast_assign( 50862306a36Sopenharmony_ci __assign_str(device, dev_name(ar->dev)); 50962306a36Sopenharmony_ci __assign_str(driver, dev_driver_string(ar->dev)); 51062306a36Sopenharmony_ci __entry->len = len; 51162306a36Sopenharmony_ci memcpy(__get_dynamic_array(data), data, len); 51262306a36Sopenharmony_ci ), 51362306a36Sopenharmony_ci 51462306a36Sopenharmony_ci TP_printk( 51562306a36Sopenharmony_ci "%s %s tlv diag len %d", 51662306a36Sopenharmony_ci __get_str(driver), 51762306a36Sopenharmony_ci __get_str(device), 51862306a36Sopenharmony_ci __entry->len 51962306a36Sopenharmony_ci ) 52062306a36Sopenharmony_ci); 52162306a36Sopenharmony_ci 52262306a36Sopenharmony_ci#endif /* _TRACE_H_ || TRACE_HEADER_MULTI_READ*/ 52362306a36Sopenharmony_ci 52462306a36Sopenharmony_ci/* we don't want to use include/trace/events */ 52562306a36Sopenharmony_ci#undef TRACE_INCLUDE_PATH 52662306a36Sopenharmony_ci#define TRACE_INCLUDE_PATH . 52762306a36Sopenharmony_ci#undef TRACE_INCLUDE_FILE 52862306a36Sopenharmony_ci#define TRACE_INCLUDE_FILE trace 52962306a36Sopenharmony_ci 53062306a36Sopenharmony_ci/* This part must be outside protection */ 53162306a36Sopenharmony_ci#include <trace/define_trace.h> 532