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 235e3dd157SKalle Valo #define _TRACE_H_ 245e3dd157SKalle Valo 255e3dd157SKalle Valo /* create empty functions when tracing is disabled */ 265e3dd157SKalle Valo #if !defined(CONFIG_ATH10K_TRACING) 275e3dd157SKalle Valo #undef TRACE_EVENT 285e3dd157SKalle Valo #define TRACE_EVENT(name, proto, ...) \ 295e3dd157SKalle Valo static inline void trace_ ## name(proto) {} 305e3dd157SKalle Valo #undef DECLARE_EVENT_CLASS 315e3dd157SKalle Valo #define DECLARE_EVENT_CLASS(...) 325e3dd157SKalle Valo #undef DEFINE_EVENT 335e3dd157SKalle Valo #define DEFINE_EVENT(evt_class, name, proto, ...) \ 345e3dd157SKalle Valo static inline void trace_ ## name(proto) {} 355e3dd157SKalle Valo #endif /* !CONFIG_ATH10K_TRACING || __CHECKER__ */ 365e3dd157SKalle Valo 375e3dd157SKalle Valo #undef TRACE_SYSTEM 385e3dd157SKalle Valo #define TRACE_SYSTEM ath10k 395e3dd157SKalle Valo 405e3dd157SKalle Valo #define ATH10K_MSG_MAX 200 415e3dd157SKalle Valo 425e3dd157SKalle Valo DECLARE_EVENT_CLASS(ath10k_log_event, 43d35a6c18SMichal Kazior TP_PROTO(struct ath10k *ar, struct va_format *vaf), 44d35a6c18SMichal Kazior TP_ARGS(ar, vaf), 455e3dd157SKalle Valo TP_STRUCT__entry( 46d35a6c18SMichal Kazior __string(device, dev_name(ar->dev)) 47d35a6c18SMichal Kazior __string(driver, dev_driver_string(ar->dev)) 485e3dd157SKalle Valo __dynamic_array(char, msg, ATH10K_MSG_MAX) 495e3dd157SKalle Valo ), 505e3dd157SKalle Valo TP_fast_assign( 51d35a6c18SMichal Kazior __assign_str(device, dev_name(ar->dev)); 52d35a6c18SMichal Kazior __assign_str(driver, dev_driver_string(ar->dev)); 535e3dd157SKalle Valo WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg), 545e3dd157SKalle Valo ATH10K_MSG_MAX, 555e3dd157SKalle Valo vaf->fmt, 565e3dd157SKalle Valo *vaf->va) >= ATH10K_MSG_MAX); 575e3dd157SKalle Valo ), 58d35a6c18SMichal Kazior TP_printk( 59d35a6c18SMichal Kazior "%s %s %s", 60d35a6c18SMichal Kazior __get_str(driver), 61d35a6c18SMichal Kazior __get_str(device), 62d35a6c18SMichal Kazior __get_str(msg) 63d35a6c18SMichal Kazior ) 645e3dd157SKalle Valo ); 655e3dd157SKalle Valo 665e3dd157SKalle Valo DEFINE_EVENT(ath10k_log_event, ath10k_log_err, 67d35a6c18SMichal Kazior TP_PROTO(struct ath10k *ar, struct va_format *vaf), 68d35a6c18SMichal Kazior TP_ARGS(ar, vaf) 695e3dd157SKalle Valo ); 705e3dd157SKalle Valo 715e3dd157SKalle Valo DEFINE_EVENT(ath10k_log_event, ath10k_log_warn, 72d35a6c18SMichal Kazior TP_PROTO(struct ath10k *ar, struct va_format *vaf), 73d35a6c18SMichal Kazior TP_ARGS(ar, vaf) 745e3dd157SKalle Valo ); 755e3dd157SKalle Valo 765e3dd157SKalle Valo DEFINE_EVENT(ath10k_log_event, ath10k_log_info, 77d35a6c18SMichal Kazior TP_PROTO(struct ath10k *ar, struct va_format *vaf), 78d35a6c18SMichal Kazior TP_ARGS(ar, vaf) 795e3dd157SKalle Valo ); 805e3dd157SKalle Valo 815e3dd157SKalle Valo TRACE_EVENT(ath10k_log_dbg, 82d35a6c18SMichal Kazior TP_PROTO(struct ath10k *ar, unsigned int level, struct va_format *vaf), 83d35a6c18SMichal Kazior TP_ARGS(ar, level, vaf), 845e3dd157SKalle Valo TP_STRUCT__entry( 85d35a6c18SMichal Kazior __string(device, dev_name(ar->dev)) 86d35a6c18SMichal Kazior __string(driver, dev_driver_string(ar->dev)) 875e3dd157SKalle Valo __field(unsigned int, level) 885e3dd157SKalle Valo __dynamic_array(char, msg, ATH10K_MSG_MAX) 895e3dd157SKalle Valo ), 905e3dd157SKalle Valo TP_fast_assign( 91d35a6c18SMichal Kazior __assign_str(device, dev_name(ar->dev)); 92d35a6c18SMichal Kazior __assign_str(driver, dev_driver_string(ar->dev)); 935e3dd157SKalle Valo __entry->level = level; 945e3dd157SKalle Valo WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg), 955e3dd157SKalle Valo ATH10K_MSG_MAX, 965e3dd157SKalle Valo vaf->fmt, 975e3dd157SKalle Valo *vaf->va) >= ATH10K_MSG_MAX); 985e3dd157SKalle Valo ), 99d35a6c18SMichal Kazior TP_printk( 100d35a6c18SMichal Kazior "%s %s %s", 101d35a6c18SMichal Kazior __get_str(driver), 102d35a6c18SMichal Kazior __get_str(device), 103d35a6c18SMichal Kazior __get_str(msg) 104d35a6c18SMichal Kazior ) 1055e3dd157SKalle Valo ); 1065e3dd157SKalle Valo 1075e3dd157SKalle Valo TRACE_EVENT(ath10k_log_dbg_dump, 108d35a6c18SMichal Kazior TP_PROTO(struct ath10k *ar, const char *msg, const char *prefix, 1095e3dd157SKalle Valo const void *buf, size_t buf_len), 1105e3dd157SKalle Valo 111d35a6c18SMichal Kazior TP_ARGS(ar, msg, prefix, buf, buf_len), 1125e3dd157SKalle Valo 1135e3dd157SKalle Valo TP_STRUCT__entry( 114d35a6c18SMichal Kazior __string(device, dev_name(ar->dev)) 115d35a6c18SMichal Kazior __string(driver, dev_driver_string(ar->dev)) 1165e3dd157SKalle Valo __string(msg, msg) 1175e3dd157SKalle Valo __string(prefix, prefix) 1185e3dd157SKalle Valo __field(size_t, buf_len) 1195e3dd157SKalle Valo __dynamic_array(u8, buf, buf_len) 1205e3dd157SKalle Valo ), 1215e3dd157SKalle Valo 1225e3dd157SKalle Valo TP_fast_assign( 123d35a6c18SMichal Kazior __assign_str(device, dev_name(ar->dev)); 124d35a6c18SMichal Kazior __assign_str(driver, dev_driver_string(ar->dev)); 1255e3dd157SKalle Valo __assign_str(msg, msg); 1265e3dd157SKalle Valo __assign_str(prefix, prefix); 1275e3dd157SKalle Valo __entry->buf_len = buf_len; 1285e3dd157SKalle Valo memcpy(__get_dynamic_array(buf), buf, buf_len); 1295e3dd157SKalle Valo ), 1305e3dd157SKalle Valo 1315e3dd157SKalle Valo TP_printk( 132d35a6c18SMichal Kazior "%s %s %s/%s\n", 133d35a6c18SMichal Kazior __get_str(driver), 134d35a6c18SMichal Kazior __get_str(device), 135d35a6c18SMichal Kazior __get_str(prefix), 136d35a6c18SMichal Kazior __get_str(msg) 1375e3dd157SKalle Valo ) 1385e3dd157SKalle Valo ); 1395e3dd157SKalle Valo 1405e3dd157SKalle Valo TRACE_EVENT(ath10k_wmi_cmd, 141d35a6c18SMichal Kazior TP_PROTO(struct ath10k *ar, int id, void *buf, size_t buf_len, int ret), 1425e3dd157SKalle Valo 143d35a6c18SMichal Kazior TP_ARGS(ar, id, buf, buf_len, ret), 1445e3dd157SKalle Valo 1455e3dd157SKalle Valo TP_STRUCT__entry( 146d35a6c18SMichal Kazior __string(device, dev_name(ar->dev)) 147d35a6c18SMichal Kazior __string(driver, dev_driver_string(ar->dev)) 1485e3dd157SKalle Valo __field(unsigned int, id) 1495e3dd157SKalle Valo __field(size_t, buf_len) 1505e3dd157SKalle Valo __dynamic_array(u8, buf, buf_len) 1519e84f653SMichal Kazior __field(int, ret) 1525e3dd157SKalle Valo ), 1535e3dd157SKalle Valo 1545e3dd157SKalle Valo TP_fast_assign( 155d35a6c18SMichal Kazior __assign_str(device, dev_name(ar->dev)); 156d35a6c18SMichal Kazior __assign_str(driver, dev_driver_string(ar->dev)); 1575e3dd157SKalle Valo __entry->id = id; 1585e3dd157SKalle Valo __entry->buf_len = buf_len; 159be8b3943SMichal Kazior __entry->ret = ret; 1605e3dd157SKalle Valo memcpy(__get_dynamic_array(buf), buf, buf_len); 1615e3dd157SKalle Valo ), 1625e3dd157SKalle Valo 1635e3dd157SKalle Valo TP_printk( 164d35a6c18SMichal Kazior "%s %s id %d len %zu ret %d", 165d35a6c18SMichal Kazior __get_str(driver), 166d35a6c18SMichal Kazior __get_str(device), 1675e3dd157SKalle Valo __entry->id, 168be8b3943SMichal Kazior __entry->buf_len, 169be8b3943SMichal Kazior __entry->ret 1705e3dd157SKalle Valo ) 1715e3dd157SKalle Valo ); 1725e3dd157SKalle Valo 1735e3dd157SKalle Valo TRACE_EVENT(ath10k_wmi_event, 174d35a6c18SMichal Kazior TP_PROTO(struct ath10k *ar, int id, void *buf, size_t buf_len), 1755e3dd157SKalle Valo 176d35a6c18SMichal Kazior TP_ARGS(ar, id, buf, buf_len), 1775e3dd157SKalle Valo 1785e3dd157SKalle Valo TP_STRUCT__entry( 179d35a6c18SMichal Kazior __string(device, dev_name(ar->dev)) 180d35a6c18SMichal Kazior __string(driver, dev_driver_string(ar->dev)) 1815e3dd157SKalle Valo __field(unsigned int, id) 1825e3dd157SKalle Valo __field(size_t, buf_len) 1835e3dd157SKalle Valo __dynamic_array(u8, buf, buf_len) 1845e3dd157SKalle Valo ), 1855e3dd157SKalle Valo 1865e3dd157SKalle Valo TP_fast_assign( 187d35a6c18SMichal Kazior __assign_str(device, dev_name(ar->dev)); 188d35a6c18SMichal Kazior __assign_str(driver, dev_driver_string(ar->dev)); 1895e3dd157SKalle Valo __entry->id = id; 1905e3dd157SKalle Valo __entry->buf_len = buf_len; 1915e3dd157SKalle Valo memcpy(__get_dynamic_array(buf), buf, buf_len); 1925e3dd157SKalle Valo ), 1935e3dd157SKalle Valo 1945e3dd157SKalle Valo TP_printk( 195d35a6c18SMichal Kazior "%s %s id %d len %zu", 196d35a6c18SMichal Kazior __get_str(driver), 197d35a6c18SMichal Kazior __get_str(device), 1985e3dd157SKalle Valo __entry->id, 1995e3dd157SKalle Valo __entry->buf_len 2005e3dd157SKalle Valo ) 2015e3dd157SKalle Valo ); 2025e3dd157SKalle Valo 203a9bf0506SKalle Valo TRACE_EVENT(ath10k_htt_stats, 204d35a6c18SMichal Kazior TP_PROTO(struct ath10k *ar, void *buf, size_t buf_len), 205a9bf0506SKalle Valo 206d35a6c18SMichal Kazior TP_ARGS(ar, buf, buf_len), 207a9bf0506SKalle Valo 208a9bf0506SKalle Valo TP_STRUCT__entry( 209d35a6c18SMichal Kazior __string(device, dev_name(ar->dev)) 210d35a6c18SMichal Kazior __string(driver, dev_driver_string(ar->dev)) 211a9bf0506SKalle Valo __field(size_t, buf_len) 212a9bf0506SKalle Valo __dynamic_array(u8, buf, buf_len) 213a9bf0506SKalle Valo ), 214a9bf0506SKalle Valo 215a9bf0506SKalle Valo TP_fast_assign( 216d35a6c18SMichal Kazior __assign_str(device, dev_name(ar->dev)); 217d35a6c18SMichal Kazior __assign_str(driver, dev_driver_string(ar->dev)); 218a9bf0506SKalle Valo __entry->buf_len = buf_len; 219a9bf0506SKalle Valo memcpy(__get_dynamic_array(buf), buf, buf_len); 220a9bf0506SKalle Valo ), 221a9bf0506SKalle Valo 222a9bf0506SKalle Valo TP_printk( 223d35a6c18SMichal Kazior "%s %s len %zu", 224d35a6c18SMichal Kazior __get_str(driver), 225d35a6c18SMichal Kazior __get_str(device), 226a9bf0506SKalle Valo __entry->buf_len 227a9bf0506SKalle Valo ) 228a9bf0506SKalle Valo ); 229a9bf0506SKalle Valo 230869526b9SKalle Valo TRACE_EVENT(ath10k_wmi_dbglog, 231d35a6c18SMichal Kazior TP_PROTO(struct ath10k *ar, void *buf, size_t buf_len), 232869526b9SKalle Valo 233d35a6c18SMichal Kazior TP_ARGS(ar, buf, buf_len), 234869526b9SKalle Valo 235869526b9SKalle Valo TP_STRUCT__entry( 236d35a6c18SMichal Kazior __string(device, dev_name(ar->dev)) 237d35a6c18SMichal Kazior __string(driver, dev_driver_string(ar->dev)) 238869526b9SKalle Valo __field(size_t, buf_len) 239869526b9SKalle Valo __dynamic_array(u8, buf, buf_len) 240869526b9SKalle Valo ), 241869526b9SKalle Valo 242869526b9SKalle Valo TP_fast_assign( 243d35a6c18SMichal Kazior __assign_str(device, dev_name(ar->dev)); 244d35a6c18SMichal Kazior __assign_str(driver, dev_driver_string(ar->dev)); 245869526b9SKalle Valo __entry->buf_len = buf_len; 246869526b9SKalle Valo memcpy(__get_dynamic_array(buf), buf, buf_len); 247869526b9SKalle Valo ), 248869526b9SKalle Valo 249869526b9SKalle Valo TP_printk( 250d35a6c18SMichal Kazior "%s %s len %zu", 251d35a6c18SMichal Kazior __get_str(driver), 252d35a6c18SMichal Kazior __get_str(device), 253869526b9SKalle Valo __entry->buf_len 254869526b9SKalle Valo ) 255869526b9SKalle Valo ); 256869526b9SKalle Valo 2575e3dd157SKalle Valo #endif /* _TRACE_H_ || TRACE_HEADER_MULTI_READ*/ 2585e3dd157SKalle Valo 2595e3dd157SKalle Valo /* we don't want to use include/trace/events */ 2605e3dd157SKalle Valo #undef TRACE_INCLUDE_PATH 2615e3dd157SKalle Valo #define TRACE_INCLUDE_PATH . 2625e3dd157SKalle Valo #undef TRACE_INCLUDE_FILE 2635e3dd157SKalle Valo #define TRACE_INCLUDE_FILE trace 2645e3dd157SKalle Valo 2655e3dd157SKalle Valo /* This part must be outside protection */ 2665e3dd157SKalle Valo #include <trace/define_trace.h> 267