1dd4f32aeSBjoern A. Zeeb /* SPDX-License-Identifier: BSD-3-Clause-Clear */ 2dd4f32aeSBjoern A. Zeeb /* 3dd4f32aeSBjoern A. Zeeb * Copyright (c) 2019 The Linux Foundation. All rights reserved. 4dd4f32aeSBjoern A. Zeeb */ 5dd4f32aeSBjoern A. Zeeb 6dd4f32aeSBjoern A. Zeeb #if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) 7dd4f32aeSBjoern A. Zeeb 8dd4f32aeSBjoern A. Zeeb #include <linux/tracepoint.h> 9dd4f32aeSBjoern A. Zeeb #include "core.h" 10dd4f32aeSBjoern A. Zeeb 11dd4f32aeSBjoern A. Zeeb #define _TRACE_H_ 12dd4f32aeSBjoern A. Zeeb 13dd4f32aeSBjoern A. Zeeb /* create empty functions when tracing is disabled */ 14dd4f32aeSBjoern A. Zeeb #if !defined(CONFIG_ATH11K_TRACING) 15dd4f32aeSBjoern A. Zeeb #undef TRACE_EVENT 16dd4f32aeSBjoern A. Zeeb #define TRACE_EVENT(name, proto, ...) \ 17dd4f32aeSBjoern A. Zeeb static inline void trace_ ## name(proto) {} \ 18dd4f32aeSBjoern A. Zeeb static inline bool trace_##name##_enabled(void) \ 19dd4f32aeSBjoern A. Zeeb { \ 20dd4f32aeSBjoern A. Zeeb return false; \ 21dd4f32aeSBjoern A. Zeeb } 22dd4f32aeSBjoern A. Zeeb 23dd4f32aeSBjoern A. Zeeb #undef DECLARE_EVENT_CLASS 24dd4f32aeSBjoern A. Zeeb #define DECLARE_EVENT_CLASS(...) 25dd4f32aeSBjoern A. Zeeb #undef DEFINE_EVENT 26dd4f32aeSBjoern A. Zeeb #define DEFINE_EVENT(evt_class, name, proto, ...) \ 27dd4f32aeSBjoern A. Zeeb static inline void trace_ ## name(proto) {} 28dd4f32aeSBjoern A. Zeeb #endif /* !CONFIG_ATH11K_TRACING || __CHECKER__ */ 29dd4f32aeSBjoern A. Zeeb 30dd4f32aeSBjoern A. Zeeb #undef TRACE_SYSTEM 31dd4f32aeSBjoern A. Zeeb #define TRACE_SYSTEM ath11k 32dd4f32aeSBjoern A. Zeeb 33dd4f32aeSBjoern A. Zeeb #define ATH11K_MSG_MAX 400 34dd4f32aeSBjoern A. Zeeb 35dd4f32aeSBjoern A. Zeeb TRACE_EVENT(ath11k_htt_pktlog, 36dd4f32aeSBjoern A. Zeeb TP_PROTO(struct ath11k *ar, const void *buf, u16 buf_len, 37dd4f32aeSBjoern A. Zeeb u32 pktlog_checksum), 38dd4f32aeSBjoern A. Zeeb 39dd4f32aeSBjoern A. Zeeb TP_ARGS(ar, buf, buf_len, pktlog_checksum), 40dd4f32aeSBjoern A. Zeeb 41dd4f32aeSBjoern A. Zeeb TP_STRUCT__entry( 42dd4f32aeSBjoern A. Zeeb __string(device, dev_name(ar->ab->dev)) 43dd4f32aeSBjoern A. Zeeb __string(driver, dev_driver_string(ar->ab->dev)) 44dd4f32aeSBjoern A. Zeeb __field(u16, buf_len) 45dd4f32aeSBjoern A. Zeeb __field(u32, pktlog_checksum) 46dd4f32aeSBjoern A. Zeeb __dynamic_array(u8, pktlog, buf_len) 47dd4f32aeSBjoern A. Zeeb ), 48dd4f32aeSBjoern A. Zeeb 49dd4f32aeSBjoern A. Zeeb TP_fast_assign( 50dd4f32aeSBjoern A. Zeeb __assign_str(device, dev_name(ar->ab->dev)); 51dd4f32aeSBjoern A. Zeeb __assign_str(driver, dev_driver_string(ar->ab->dev)); 52dd4f32aeSBjoern A. Zeeb __entry->buf_len = buf_len; 53dd4f32aeSBjoern A. Zeeb __entry->pktlog_checksum = pktlog_checksum; 54dd4f32aeSBjoern A. Zeeb memcpy(__get_dynamic_array(pktlog), buf, buf_len); 55dd4f32aeSBjoern A. Zeeb ), 56dd4f32aeSBjoern A. Zeeb 57dd4f32aeSBjoern A. Zeeb TP_printk( 58dd4f32aeSBjoern A. Zeeb "%s %s size %u pktlog_checksum %d", 59dd4f32aeSBjoern A. Zeeb __get_str(driver), 60dd4f32aeSBjoern A. Zeeb __get_str(device), 61dd4f32aeSBjoern A. Zeeb __entry->buf_len, 62dd4f32aeSBjoern A. Zeeb __entry->pktlog_checksum 63dd4f32aeSBjoern A. Zeeb ) 64dd4f32aeSBjoern A. Zeeb ); 65dd4f32aeSBjoern A. Zeeb 66dd4f32aeSBjoern A. Zeeb TRACE_EVENT(ath11k_htt_ppdu_stats, 67dd4f32aeSBjoern A. Zeeb TP_PROTO(struct ath11k *ar, const void *data, size_t len), 68dd4f32aeSBjoern A. Zeeb 69dd4f32aeSBjoern A. Zeeb TP_ARGS(ar, data, len), 70dd4f32aeSBjoern A. Zeeb 71dd4f32aeSBjoern A. Zeeb TP_STRUCT__entry( 72dd4f32aeSBjoern A. Zeeb __string(device, dev_name(ar->ab->dev)) 73dd4f32aeSBjoern A. Zeeb __string(driver, dev_driver_string(ar->ab->dev)) 74dd4f32aeSBjoern A. Zeeb __field(u16, len) 75dd4f32aeSBjoern A. Zeeb __dynamic_array(u8, ppdu, len) 76dd4f32aeSBjoern A. Zeeb ), 77dd4f32aeSBjoern A. Zeeb 78dd4f32aeSBjoern A. Zeeb TP_fast_assign( 79dd4f32aeSBjoern A. Zeeb __assign_str(device, dev_name(ar->ab->dev)); 80dd4f32aeSBjoern A. Zeeb __assign_str(driver, dev_driver_string(ar->ab->dev)); 81dd4f32aeSBjoern A. Zeeb __entry->len = len; 82dd4f32aeSBjoern A. Zeeb memcpy(__get_dynamic_array(ppdu), data, len); 83dd4f32aeSBjoern A. Zeeb ), 84dd4f32aeSBjoern A. Zeeb 85dd4f32aeSBjoern A. Zeeb TP_printk( 86dd4f32aeSBjoern A. Zeeb "%s %s ppdu len %d", 87dd4f32aeSBjoern A. Zeeb __get_str(driver), 88dd4f32aeSBjoern A. Zeeb __get_str(device), 89dd4f32aeSBjoern A. Zeeb __entry->len 90dd4f32aeSBjoern A. Zeeb ) 91dd4f32aeSBjoern A. Zeeb ); 92dd4f32aeSBjoern A. Zeeb 93dd4f32aeSBjoern A. Zeeb TRACE_EVENT(ath11k_htt_rxdesc, 94dd4f32aeSBjoern A. Zeeb TP_PROTO(struct ath11k *ar, const void *data, size_t log_type, size_t len), 95dd4f32aeSBjoern A. Zeeb 96dd4f32aeSBjoern A. Zeeb TP_ARGS(ar, data, log_type, len), 97dd4f32aeSBjoern A. Zeeb 98dd4f32aeSBjoern A. Zeeb TP_STRUCT__entry( 99dd4f32aeSBjoern A. Zeeb __string(device, dev_name(ar->ab->dev)) 100dd4f32aeSBjoern A. Zeeb __string(driver, dev_driver_string(ar->ab->dev)) 101dd4f32aeSBjoern A. Zeeb __field(u16, len) 102dd4f32aeSBjoern A. Zeeb __field(u16, log_type) 103dd4f32aeSBjoern A. Zeeb __dynamic_array(u8, rxdesc, len) 104dd4f32aeSBjoern A. Zeeb ), 105dd4f32aeSBjoern A. Zeeb 106dd4f32aeSBjoern A. Zeeb TP_fast_assign( 107dd4f32aeSBjoern A. Zeeb __assign_str(device, dev_name(ar->ab->dev)); 108dd4f32aeSBjoern A. Zeeb __assign_str(driver, dev_driver_string(ar->ab->dev)); 109dd4f32aeSBjoern A. Zeeb __entry->len = len; 110dd4f32aeSBjoern A. Zeeb __entry->log_type = log_type; 111dd4f32aeSBjoern A. Zeeb memcpy(__get_dynamic_array(rxdesc), data, len); 112dd4f32aeSBjoern A. Zeeb ), 113dd4f32aeSBjoern A. Zeeb 114dd4f32aeSBjoern A. Zeeb TP_printk( 115dd4f32aeSBjoern A. Zeeb "%s %s rxdesc len %d type %d", 116dd4f32aeSBjoern A. Zeeb __get_str(driver), 117dd4f32aeSBjoern A. Zeeb __get_str(device), 118dd4f32aeSBjoern A. Zeeb __entry->len, 119dd4f32aeSBjoern A. Zeeb __entry->log_type 120dd4f32aeSBjoern A. Zeeb ) 121dd4f32aeSBjoern A. Zeeb ); 122dd4f32aeSBjoern A. Zeeb 123dd4f32aeSBjoern A. Zeeb DECLARE_EVENT_CLASS(ath11k_log_event, 124dd4f32aeSBjoern A. Zeeb TP_PROTO(struct ath11k_base *ab, struct va_format *vaf), 125dd4f32aeSBjoern A. Zeeb TP_ARGS(ab, vaf), 126dd4f32aeSBjoern A. Zeeb TP_STRUCT__entry( 127dd4f32aeSBjoern A. Zeeb __string(device, dev_name(ab->dev)) 128dd4f32aeSBjoern A. Zeeb __string(driver, dev_driver_string(ab->dev)) 129*28348caeSBjoern A. Zeeb __vstring(msg, vaf->fmt, vaf->va) 130dd4f32aeSBjoern A. Zeeb ), 131dd4f32aeSBjoern A. Zeeb TP_fast_assign( 132dd4f32aeSBjoern A. Zeeb __assign_str(device, dev_name(ab->dev)); 133dd4f32aeSBjoern A. Zeeb __assign_str(driver, dev_driver_string(ab->dev)); 134*28348caeSBjoern A. Zeeb __assign_vstr(msg, vaf->fmt, vaf->va); 135dd4f32aeSBjoern A. Zeeb ), 136dd4f32aeSBjoern A. Zeeb TP_printk( 137dd4f32aeSBjoern A. Zeeb "%s %s %s", 138dd4f32aeSBjoern A. Zeeb __get_str(driver), 139dd4f32aeSBjoern A. Zeeb __get_str(device), 140dd4f32aeSBjoern A. Zeeb __get_str(msg) 141dd4f32aeSBjoern A. Zeeb ) 142dd4f32aeSBjoern A. Zeeb ); 143dd4f32aeSBjoern A. Zeeb 144dd4f32aeSBjoern A. Zeeb DEFINE_EVENT(ath11k_log_event, ath11k_log_err, 145dd4f32aeSBjoern A. Zeeb TP_PROTO(struct ath11k_base *ab, struct va_format *vaf), 146dd4f32aeSBjoern A. Zeeb TP_ARGS(ab, vaf) 147dd4f32aeSBjoern A. Zeeb ); 148dd4f32aeSBjoern A. Zeeb 149dd4f32aeSBjoern A. Zeeb DEFINE_EVENT(ath11k_log_event, ath11k_log_warn, 150dd4f32aeSBjoern A. Zeeb TP_PROTO(struct ath11k_base *ab, struct va_format *vaf), 151dd4f32aeSBjoern A. Zeeb TP_ARGS(ab, vaf) 152dd4f32aeSBjoern A. Zeeb ); 153dd4f32aeSBjoern A. Zeeb 154dd4f32aeSBjoern A. Zeeb DEFINE_EVENT(ath11k_log_event, ath11k_log_info, 155dd4f32aeSBjoern A. Zeeb TP_PROTO(struct ath11k_base *ab, struct va_format *vaf), 156dd4f32aeSBjoern A. Zeeb TP_ARGS(ab, vaf) 157dd4f32aeSBjoern A. Zeeb ); 158dd4f32aeSBjoern A. Zeeb 159dd4f32aeSBjoern A. Zeeb TRACE_EVENT(ath11k_wmi_cmd, 160dd4f32aeSBjoern A. Zeeb TP_PROTO(struct ath11k_base *ab, int id, const void *buf, size_t buf_len), 161dd4f32aeSBjoern A. Zeeb 162dd4f32aeSBjoern A. Zeeb TP_ARGS(ab, id, buf, buf_len), 163dd4f32aeSBjoern A. Zeeb 164dd4f32aeSBjoern A. Zeeb TP_STRUCT__entry( 165dd4f32aeSBjoern A. Zeeb __string(device, dev_name(ab->dev)) 166dd4f32aeSBjoern A. Zeeb __string(driver, dev_driver_string(ab->dev)) 167dd4f32aeSBjoern A. Zeeb __field(unsigned int, id) 168dd4f32aeSBjoern A. Zeeb __field(size_t, buf_len) 169dd4f32aeSBjoern A. Zeeb __dynamic_array(u8, buf, buf_len) 170dd4f32aeSBjoern A. Zeeb ), 171dd4f32aeSBjoern A. Zeeb 172dd4f32aeSBjoern A. Zeeb TP_fast_assign( 173dd4f32aeSBjoern A. Zeeb __assign_str(device, dev_name(ab->dev)); 174dd4f32aeSBjoern A. Zeeb __assign_str(driver, dev_driver_string(ab->dev)); 175dd4f32aeSBjoern A. Zeeb __entry->id = id; 176dd4f32aeSBjoern A. Zeeb __entry->buf_len = buf_len; 177dd4f32aeSBjoern A. Zeeb memcpy(__get_dynamic_array(buf), buf, buf_len); 178dd4f32aeSBjoern A. Zeeb ), 179dd4f32aeSBjoern A. Zeeb 180dd4f32aeSBjoern A. Zeeb TP_printk( 181dd4f32aeSBjoern A. Zeeb "%s %s id %d len %zu", 182dd4f32aeSBjoern A. Zeeb __get_str(driver), 183dd4f32aeSBjoern A. Zeeb __get_str(device), 184dd4f32aeSBjoern A. Zeeb __entry->id, 185dd4f32aeSBjoern A. Zeeb __entry->buf_len 186dd4f32aeSBjoern A. Zeeb ) 187dd4f32aeSBjoern A. Zeeb ); 188dd4f32aeSBjoern A. Zeeb 189dd4f32aeSBjoern A. Zeeb TRACE_EVENT(ath11k_wmi_event, 190dd4f32aeSBjoern A. Zeeb TP_PROTO(struct ath11k_base *ab, int id, const void *buf, size_t buf_len), 191dd4f32aeSBjoern A. Zeeb 192dd4f32aeSBjoern A. Zeeb TP_ARGS(ab, id, buf, buf_len), 193dd4f32aeSBjoern A. Zeeb 194dd4f32aeSBjoern A. Zeeb TP_STRUCT__entry( 195dd4f32aeSBjoern A. Zeeb __string(device, dev_name(ab->dev)) 196dd4f32aeSBjoern A. Zeeb __string(driver, dev_driver_string(ab->dev)) 197dd4f32aeSBjoern A. Zeeb __field(unsigned int, id) 198dd4f32aeSBjoern A. Zeeb __field(size_t, buf_len) 199dd4f32aeSBjoern A. Zeeb __dynamic_array(u8, buf, buf_len) 200dd4f32aeSBjoern A. Zeeb ), 201dd4f32aeSBjoern A. Zeeb 202dd4f32aeSBjoern A. Zeeb TP_fast_assign( 203dd4f32aeSBjoern A. Zeeb __assign_str(device, dev_name(ab->dev)); 204dd4f32aeSBjoern A. Zeeb __assign_str(driver, dev_driver_string(ab->dev)); 205dd4f32aeSBjoern A. Zeeb __entry->id = id; 206dd4f32aeSBjoern A. Zeeb __entry->buf_len = buf_len; 207dd4f32aeSBjoern A. Zeeb memcpy(__get_dynamic_array(buf), buf, buf_len); 208dd4f32aeSBjoern A. Zeeb ), 209dd4f32aeSBjoern A. Zeeb 210dd4f32aeSBjoern A. Zeeb TP_printk( 211dd4f32aeSBjoern A. Zeeb "%s %s id %d len %zu", 212dd4f32aeSBjoern A. Zeeb __get_str(driver), 213dd4f32aeSBjoern A. Zeeb __get_str(device), 214dd4f32aeSBjoern A. Zeeb __entry->id, 215dd4f32aeSBjoern A. Zeeb __entry->buf_len 216dd4f32aeSBjoern A. Zeeb ) 217dd4f32aeSBjoern A. Zeeb ); 218dd4f32aeSBjoern A. Zeeb 219dd4f32aeSBjoern A. Zeeb TRACE_EVENT(ath11k_log_dbg, 220dd4f32aeSBjoern A. Zeeb TP_PROTO(struct ath11k_base *ab, unsigned int level, struct va_format *vaf), 221dd4f32aeSBjoern A. Zeeb 222dd4f32aeSBjoern A. Zeeb TP_ARGS(ab, level, vaf), 223dd4f32aeSBjoern A. Zeeb 224dd4f32aeSBjoern A. Zeeb TP_STRUCT__entry( 225dd4f32aeSBjoern A. Zeeb __string(device, dev_name(ab->dev)) 226dd4f32aeSBjoern A. Zeeb __string(driver, dev_driver_string(ab->dev)) 227dd4f32aeSBjoern A. Zeeb __field(unsigned int, level) 228dd4f32aeSBjoern A. Zeeb __dynamic_array(char, msg, ATH11K_MSG_MAX) 229dd4f32aeSBjoern A. Zeeb ), 230dd4f32aeSBjoern A. Zeeb 231dd4f32aeSBjoern A. Zeeb TP_fast_assign( 232dd4f32aeSBjoern A. Zeeb __assign_str(device, dev_name(ab->dev)); 233dd4f32aeSBjoern A. Zeeb __assign_str(driver, dev_driver_string(ab->dev)); 234dd4f32aeSBjoern A. Zeeb __entry->level = level; 235dd4f32aeSBjoern A. Zeeb WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg), 236dd4f32aeSBjoern A. Zeeb ATH11K_MSG_MAX, vaf->fmt, 237dd4f32aeSBjoern A. Zeeb *vaf->va) >= ATH11K_MSG_MAX); 238dd4f32aeSBjoern A. Zeeb ), 239dd4f32aeSBjoern A. Zeeb 240dd4f32aeSBjoern A. Zeeb TP_printk( 241dd4f32aeSBjoern A. Zeeb "%s %s %s", 242dd4f32aeSBjoern A. Zeeb __get_str(driver), 243dd4f32aeSBjoern A. Zeeb __get_str(device), 244dd4f32aeSBjoern A. Zeeb __get_str(msg) 245dd4f32aeSBjoern A. Zeeb ) 246dd4f32aeSBjoern A. Zeeb ); 247dd4f32aeSBjoern A. Zeeb 248dd4f32aeSBjoern A. Zeeb TRACE_EVENT(ath11k_log_dbg_dump, 249dd4f32aeSBjoern A. Zeeb TP_PROTO(struct ath11k_base *ab, const char *msg, const char *prefix, 250dd4f32aeSBjoern A. Zeeb const void *buf, size_t buf_len), 251dd4f32aeSBjoern A. Zeeb 252dd4f32aeSBjoern A. Zeeb TP_ARGS(ab, msg, prefix, buf, buf_len), 253dd4f32aeSBjoern A. Zeeb 254dd4f32aeSBjoern A. Zeeb TP_STRUCT__entry( 255dd4f32aeSBjoern A. Zeeb __string(device, dev_name(ab->dev)) 256dd4f32aeSBjoern A. Zeeb __string(driver, dev_driver_string(ab->dev)) 257dd4f32aeSBjoern A. Zeeb __string(msg, msg) 258dd4f32aeSBjoern A. Zeeb __string(prefix, prefix) 259dd4f32aeSBjoern A. Zeeb __field(size_t, buf_len) 260dd4f32aeSBjoern A. Zeeb __dynamic_array(u8, buf, buf_len) 261dd4f32aeSBjoern A. Zeeb ), 262dd4f32aeSBjoern A. Zeeb 263dd4f32aeSBjoern A. Zeeb TP_fast_assign( 264dd4f32aeSBjoern A. Zeeb __assign_str(device, dev_name(ab->dev)); 265dd4f32aeSBjoern A. Zeeb __assign_str(driver, dev_driver_string(ab->dev)); 266dd4f32aeSBjoern A. Zeeb __assign_str(msg, msg); 267dd4f32aeSBjoern A. Zeeb __assign_str(prefix, prefix); 268dd4f32aeSBjoern A. Zeeb __entry->buf_len = buf_len; 269dd4f32aeSBjoern A. Zeeb memcpy(__get_dynamic_array(buf), buf, buf_len); 270dd4f32aeSBjoern A. Zeeb ), 271dd4f32aeSBjoern A. Zeeb 272dd4f32aeSBjoern A. Zeeb TP_printk( 273dd4f32aeSBjoern A. Zeeb "%s %s %s/%s\n", 274dd4f32aeSBjoern A. Zeeb __get_str(driver), 275dd4f32aeSBjoern A. Zeeb __get_str(device), 276dd4f32aeSBjoern A. Zeeb __get_str(prefix), 277dd4f32aeSBjoern A. Zeeb __get_str(msg) 278dd4f32aeSBjoern A. Zeeb ) 279dd4f32aeSBjoern A. Zeeb ); 280dd4f32aeSBjoern A. Zeeb 281dd4f32aeSBjoern A. Zeeb TRACE_EVENT(ath11k_wmi_diag, 282dd4f32aeSBjoern A. Zeeb TP_PROTO(struct ath11k_base *ab, const void *data, size_t len), 283dd4f32aeSBjoern A. Zeeb 284dd4f32aeSBjoern A. Zeeb TP_ARGS(ab, data, len), 285dd4f32aeSBjoern A. Zeeb 286dd4f32aeSBjoern A. Zeeb TP_STRUCT__entry( 287dd4f32aeSBjoern A. Zeeb __string(device, dev_name(ab->dev)) 288dd4f32aeSBjoern A. Zeeb __string(driver, dev_driver_string(ab->dev)) 289dd4f32aeSBjoern A. Zeeb __field(u16, len) 290dd4f32aeSBjoern A. Zeeb __dynamic_array(u8, data, len) 291dd4f32aeSBjoern A. Zeeb ), 292dd4f32aeSBjoern A. Zeeb 293dd4f32aeSBjoern A. Zeeb TP_fast_assign( 294dd4f32aeSBjoern A. Zeeb __assign_str(device, dev_name(ab->dev)); 295dd4f32aeSBjoern A. Zeeb __assign_str(driver, dev_driver_string(ab->dev)); 296dd4f32aeSBjoern A. Zeeb __entry->len = len; 297dd4f32aeSBjoern A. Zeeb memcpy(__get_dynamic_array(data), data, len); 298dd4f32aeSBjoern A. Zeeb ), 299dd4f32aeSBjoern A. Zeeb 300dd4f32aeSBjoern A. Zeeb TP_printk( 301dd4f32aeSBjoern A. Zeeb "%s %s tlv diag len %d", 302dd4f32aeSBjoern A. Zeeb __get_str(driver), 303dd4f32aeSBjoern A. Zeeb __get_str(device), 304dd4f32aeSBjoern A. Zeeb __entry->len 305dd4f32aeSBjoern A. Zeeb ) 306dd4f32aeSBjoern A. Zeeb ); 307dd4f32aeSBjoern A. Zeeb 308*28348caeSBjoern A. Zeeb TRACE_EVENT(ath11k_ps_timekeeper, 309*28348caeSBjoern A. Zeeb TP_PROTO(struct ath11k *ar, const void *peer_addr, 310*28348caeSBjoern A. Zeeb u32 peer_ps_timestamp, u8 peer_ps_state), 311*28348caeSBjoern A. Zeeb TP_ARGS(ar, peer_addr, peer_ps_timestamp, peer_ps_state), 312*28348caeSBjoern A. Zeeb 313*28348caeSBjoern A. Zeeb TP_STRUCT__entry(__string(device, dev_name(ar->ab->dev)) 314*28348caeSBjoern A. Zeeb __string(driver, dev_driver_string(ar->ab->dev)) 315*28348caeSBjoern A. Zeeb __dynamic_array(u8, peer_addr, ETH_ALEN) 316*28348caeSBjoern A. Zeeb __field(u8, peer_ps_state) 317*28348caeSBjoern A. Zeeb __field(u32, peer_ps_timestamp) 318*28348caeSBjoern A. Zeeb ), 319*28348caeSBjoern A. Zeeb 320*28348caeSBjoern A. Zeeb TP_fast_assign(__assign_str(device, dev_name(ar->ab->dev)); 321*28348caeSBjoern A. Zeeb __assign_str(driver, dev_driver_string(ar->ab->dev)); 322*28348caeSBjoern A. Zeeb memcpy(__get_dynamic_array(peer_addr), peer_addr, 323*28348caeSBjoern A. Zeeb ETH_ALEN); 324*28348caeSBjoern A. Zeeb __entry->peer_ps_state = peer_ps_state; 325*28348caeSBjoern A. Zeeb __entry->peer_ps_timestamp = peer_ps_timestamp; 326*28348caeSBjoern A. Zeeb ), 327*28348caeSBjoern A. Zeeb 328*28348caeSBjoern A. Zeeb TP_printk("%s %s %u %u", 329*28348caeSBjoern A. Zeeb __get_str(driver), 330*28348caeSBjoern A. Zeeb __get_str(device), 331*28348caeSBjoern A. Zeeb __entry->peer_ps_state, 332*28348caeSBjoern A. Zeeb __entry->peer_ps_timestamp 333*28348caeSBjoern A. Zeeb ) 334*28348caeSBjoern A. Zeeb ); 335*28348caeSBjoern A. Zeeb 336dd4f32aeSBjoern A. Zeeb #endif /* _TRACE_H_ || TRACE_HEADER_MULTI_READ*/ 337dd4f32aeSBjoern A. Zeeb 338dd4f32aeSBjoern A. Zeeb /* we don't want to use include/trace/events */ 339dd4f32aeSBjoern A. Zeeb #undef TRACE_INCLUDE_PATH 340dd4f32aeSBjoern A. Zeeb #define TRACE_INCLUDE_PATH . 341dd4f32aeSBjoern A. Zeeb #undef TRACE_INCLUDE_FILE 342dd4f32aeSBjoern A. Zeeb #define TRACE_INCLUDE_FILE trace 343dd4f32aeSBjoern A. Zeeb 344dd4f32aeSBjoern A. Zeeb /* This part must be outside protection */ 345dd4f32aeSBjoern A. Zeeb #include <trace/define_trace.h> 346