cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

trace.h (12710B)


      1/* SPDX-License-Identifier: ISC */
      2/*
      3 * Copyright (c) 2005-2011 Atheros Communications Inc.
      4 * Copyright (c) 2011-2016 Qualcomm Atheros, Inc.
      5 */
      6
      7#if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
      8
      9#include <linux/tracepoint.h>
     10#include "core.h"
     11
     12#if !defined(_TRACE_H_)
     13static inline u32 ath10k_frm_hdr_len(const void *buf, size_t len)
     14{
     15	const struct ieee80211_hdr *hdr = buf;
     16
     17	/* In some rare cases (e.g. fcs error) device reports frame buffer
     18	 * shorter than what frame header implies (e.g. len = 0). The buffer
     19	 * can still be accessed so do a simple min() to guarantee caller
     20	 * doesn't get value greater than len.
     21	 */
     22	return min_t(u32, len, ieee80211_hdrlen(hdr->frame_control));
     23}
     24#endif
     25
     26#define _TRACE_H_
     27
     28/* create empty functions when tracing is disabled */
     29#if !defined(CONFIG_ATH10K_TRACING)
     30#undef TRACE_EVENT
     31#define TRACE_EVENT(name, proto, ...) \
     32static inline void trace_ ## name(proto) {} \
     33static inline bool trace_##name##_enabled(void) \
     34{						\
     35	return false;				\
     36}
     37#undef DECLARE_EVENT_CLASS
     38#define DECLARE_EVENT_CLASS(...)
     39#undef DEFINE_EVENT
     40#define DEFINE_EVENT(evt_class, name, proto, ...) \
     41static inline void trace_ ## name(proto) {}
     42#endif /* !CONFIG_ATH10K_TRACING || __CHECKER__ */
     43
     44#undef TRACE_SYSTEM
     45#define TRACE_SYSTEM ath10k
     46
     47#define ATH10K_MSG_MAX 400
     48
     49DECLARE_EVENT_CLASS(ath10k_log_event,
     50	TP_PROTO(struct ath10k *ar, struct va_format *vaf),
     51	TP_ARGS(ar, vaf),
     52	TP_STRUCT__entry(
     53		__string(device, dev_name(ar->dev))
     54		__string(driver, dev_driver_string(ar->dev))
     55		__dynamic_array(char, msg, ATH10K_MSG_MAX)
     56	),
     57	TP_fast_assign(
     58		__assign_str(device, dev_name(ar->dev));
     59		__assign_str(driver, dev_driver_string(ar->dev));
     60		WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
     61				       ATH10K_MSG_MAX,
     62				       vaf->fmt,
     63				       *vaf->va) >= ATH10K_MSG_MAX);
     64	),
     65	TP_printk(
     66		"%s %s %s",
     67		__get_str(driver),
     68		__get_str(device),
     69		__get_str(msg)
     70	)
     71);
     72
     73DEFINE_EVENT(ath10k_log_event, ath10k_log_err,
     74	     TP_PROTO(struct ath10k *ar, struct va_format *vaf),
     75	     TP_ARGS(ar, vaf)
     76);
     77
     78DEFINE_EVENT(ath10k_log_event, ath10k_log_warn,
     79	     TP_PROTO(struct ath10k *ar, struct va_format *vaf),
     80	     TP_ARGS(ar, vaf)
     81);
     82
     83DEFINE_EVENT(ath10k_log_event, ath10k_log_info,
     84	     TP_PROTO(struct ath10k *ar, struct va_format *vaf),
     85	     TP_ARGS(ar, vaf)
     86);
     87
     88TRACE_EVENT(ath10k_log_dbg,
     89	TP_PROTO(struct ath10k *ar, unsigned int level, struct va_format *vaf),
     90	TP_ARGS(ar, level, vaf),
     91	TP_STRUCT__entry(
     92		__string(device, dev_name(ar->dev))
     93		__string(driver, dev_driver_string(ar->dev))
     94		__field(unsigned int, level)
     95		__dynamic_array(char, msg, ATH10K_MSG_MAX)
     96	),
     97	TP_fast_assign(
     98		__assign_str(device, dev_name(ar->dev));
     99		__assign_str(driver, dev_driver_string(ar->dev));
    100		__entry->level = level;
    101		WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
    102				       ATH10K_MSG_MAX,
    103				       vaf->fmt,
    104				       *vaf->va) >= ATH10K_MSG_MAX);
    105	),
    106	TP_printk(
    107		"%s %s %s",
    108		__get_str(driver),
    109		__get_str(device),
    110		__get_str(msg)
    111	)
    112);
    113
    114TRACE_EVENT(ath10k_log_dbg_dump,
    115	TP_PROTO(struct ath10k *ar, const char *msg, const char *prefix,
    116		 const void *buf, size_t buf_len),
    117
    118	TP_ARGS(ar, msg, prefix, buf, buf_len),
    119
    120	TP_STRUCT__entry(
    121		__string(device, dev_name(ar->dev))
    122		__string(driver, dev_driver_string(ar->dev))
    123		__string(msg, msg)
    124		__string(prefix, prefix)
    125		__field(size_t, buf_len)
    126		__dynamic_array(u8, buf, buf_len)
    127	),
    128
    129	TP_fast_assign(
    130		__assign_str(device, dev_name(ar->dev));
    131		__assign_str(driver, dev_driver_string(ar->dev));
    132		__assign_str(msg, msg);
    133		__assign_str(prefix, prefix);
    134		__entry->buf_len = buf_len;
    135		memcpy(__get_dynamic_array(buf), buf, buf_len);
    136	),
    137
    138	TP_printk(
    139		"%s %s %s/%s\n",
    140		__get_str(driver),
    141		__get_str(device),
    142		__get_str(prefix),
    143		__get_str(msg)
    144	)
    145);
    146
    147TRACE_EVENT(ath10k_wmi_cmd,
    148	TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len),
    149
    150	TP_ARGS(ar, id, buf, buf_len),
    151
    152	TP_STRUCT__entry(
    153		__string(device, dev_name(ar->dev))
    154		__string(driver, dev_driver_string(ar->dev))
    155		__field(unsigned int, id)
    156		__field(size_t, buf_len)
    157		__dynamic_array(u8, buf, buf_len)
    158	),
    159
    160	TP_fast_assign(
    161		__assign_str(device, dev_name(ar->dev));
    162		__assign_str(driver, dev_driver_string(ar->dev));
    163		__entry->id = id;
    164		__entry->buf_len = buf_len;
    165		memcpy(__get_dynamic_array(buf), buf, buf_len);
    166	),
    167
    168	TP_printk(
    169		"%s %s id %d len %zu",
    170		__get_str(driver),
    171		__get_str(device),
    172		__entry->id,
    173		__entry->buf_len
    174	)
    175);
    176
    177TRACE_EVENT(ath10k_wmi_event,
    178	TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len),
    179
    180	TP_ARGS(ar, id, buf, buf_len),
    181
    182	TP_STRUCT__entry(
    183		__string(device, dev_name(ar->dev))
    184		__string(driver, dev_driver_string(ar->dev))
    185		__field(unsigned int, id)
    186		__field(size_t, buf_len)
    187		__dynamic_array(u8, buf, buf_len)
    188	),
    189
    190	TP_fast_assign(
    191		__assign_str(device, dev_name(ar->dev));
    192		__assign_str(driver, dev_driver_string(ar->dev));
    193		__entry->id = id;
    194		__entry->buf_len = buf_len;
    195		memcpy(__get_dynamic_array(buf), buf, buf_len);
    196	),
    197
    198	TP_printk(
    199		"%s %s id %d len %zu",
    200		__get_str(driver),
    201		__get_str(device),
    202		__entry->id,
    203		__entry->buf_len
    204	)
    205);
    206
    207TRACE_EVENT(ath10k_htt_stats,
    208	TP_PROTO(struct ath10k *ar, const void *buf, size_t buf_len),
    209
    210	TP_ARGS(ar, buf, buf_len),
    211
    212	TP_STRUCT__entry(
    213		__string(device, dev_name(ar->dev))
    214		__string(driver, dev_driver_string(ar->dev))
    215		__field(size_t, buf_len)
    216		__dynamic_array(u8, buf, buf_len)
    217	),
    218
    219	TP_fast_assign(
    220		__assign_str(device, dev_name(ar->dev));
    221		__assign_str(driver, dev_driver_string(ar->dev));
    222		__entry->buf_len = buf_len;
    223		memcpy(__get_dynamic_array(buf), buf, buf_len);
    224	),
    225
    226	TP_printk(
    227		"%s %s len %zu",
    228		__get_str(driver),
    229		__get_str(device),
    230		__entry->buf_len
    231	)
    232);
    233
    234TRACE_EVENT(ath10k_wmi_dbglog,
    235	TP_PROTO(struct ath10k *ar, const void *buf, size_t buf_len),
    236
    237	TP_ARGS(ar, buf, buf_len),
    238
    239	TP_STRUCT__entry(
    240		__string(device, dev_name(ar->dev))
    241		__string(driver, dev_driver_string(ar->dev))
    242		__field(u8, hw_type)
    243		__field(size_t, buf_len)
    244		__dynamic_array(u8, buf, buf_len)
    245	),
    246
    247	TP_fast_assign(
    248		__assign_str(device, dev_name(ar->dev));
    249		__assign_str(driver, dev_driver_string(ar->dev));
    250		__entry->hw_type = ar->hw_rev;
    251		__entry->buf_len = buf_len;
    252		memcpy(__get_dynamic_array(buf), buf, buf_len);
    253	),
    254
    255	TP_printk(
    256		"%s %s %d len %zu",
    257		__get_str(driver),
    258		__get_str(device),
    259		__entry->hw_type,
    260		__entry->buf_len
    261	)
    262);
    263
    264TRACE_EVENT(ath10k_htt_pktlog,
    265	    TP_PROTO(struct ath10k *ar, const void *buf, u16 buf_len),
    266
    267	TP_ARGS(ar, buf, buf_len),
    268
    269	TP_STRUCT__entry(
    270		__string(device, dev_name(ar->dev))
    271		__string(driver, dev_driver_string(ar->dev))
    272		__field(u8, hw_type)
    273		__field(u16, buf_len)
    274		__dynamic_array(u8, pktlog, buf_len)
    275	),
    276
    277	TP_fast_assign(
    278		__assign_str(device, dev_name(ar->dev));
    279		__assign_str(driver, dev_driver_string(ar->dev));
    280		__entry->hw_type = ar->hw_rev;
    281		__entry->buf_len = buf_len;
    282		memcpy(__get_dynamic_array(pktlog), buf, buf_len);
    283	),
    284
    285	TP_printk(
    286		"%s %s %d size %u",
    287		__get_str(driver),
    288		__get_str(device),
    289		__entry->hw_type,
    290		__entry->buf_len
    291	 )
    292);
    293
    294TRACE_EVENT(ath10k_htt_tx,
    295	    TP_PROTO(struct ath10k *ar, u16 msdu_id, u16 msdu_len,
    296		     u8 vdev_id, u8 tid),
    297
    298	TP_ARGS(ar, msdu_id, msdu_len, vdev_id, tid),
    299
    300	TP_STRUCT__entry(
    301		__string(device, dev_name(ar->dev))
    302		__string(driver, dev_driver_string(ar->dev))
    303		__field(u16, msdu_id)
    304		__field(u16, msdu_len)
    305		__field(u8, vdev_id)
    306		__field(u8, tid)
    307	),
    308
    309	TP_fast_assign(
    310		__assign_str(device, dev_name(ar->dev));
    311		__assign_str(driver, dev_driver_string(ar->dev));
    312		__entry->msdu_id = msdu_id;
    313		__entry->msdu_len = msdu_len;
    314		__entry->vdev_id = vdev_id;
    315		__entry->tid = tid;
    316	),
    317
    318	TP_printk(
    319		"%s %s msdu_id %d msdu_len %d vdev_id %d tid %d",
    320		__get_str(driver),
    321		__get_str(device),
    322		__entry->msdu_id,
    323		__entry->msdu_len,
    324		__entry->vdev_id,
    325		__entry->tid
    326	 )
    327);
    328
    329TRACE_EVENT(ath10k_txrx_tx_unref,
    330	    TP_PROTO(struct ath10k *ar, u16 msdu_id),
    331
    332	TP_ARGS(ar, msdu_id),
    333
    334	TP_STRUCT__entry(
    335		__string(device, dev_name(ar->dev))
    336		__string(driver, dev_driver_string(ar->dev))
    337		__field(u16, msdu_id)
    338	),
    339
    340	TP_fast_assign(
    341		__assign_str(device, dev_name(ar->dev));
    342		__assign_str(driver, dev_driver_string(ar->dev));
    343		__entry->msdu_id = msdu_id;
    344	),
    345
    346	TP_printk(
    347		"%s %s msdu_id %d",
    348		__get_str(driver),
    349		__get_str(device),
    350		__entry->msdu_id
    351	 )
    352);
    353
    354DECLARE_EVENT_CLASS(ath10k_hdr_event,
    355		    TP_PROTO(struct ath10k *ar, const void *data, size_t len),
    356
    357	TP_ARGS(ar, data, len),
    358
    359	TP_STRUCT__entry(
    360		__string(device, dev_name(ar->dev))
    361		__string(driver, dev_driver_string(ar->dev))
    362		__field(size_t, len)
    363		__dynamic_array(u8, data, ath10k_frm_hdr_len(data, len))
    364	),
    365
    366	TP_fast_assign(
    367		__assign_str(device, dev_name(ar->dev));
    368		__assign_str(driver, dev_driver_string(ar->dev));
    369		__entry->len = ath10k_frm_hdr_len(data, len);
    370		memcpy(__get_dynamic_array(data), data, __entry->len);
    371	),
    372
    373	TP_printk(
    374		"%s %s len %zu\n",
    375		__get_str(driver),
    376		__get_str(device),
    377		__entry->len
    378	)
    379);
    380
    381DECLARE_EVENT_CLASS(ath10k_payload_event,
    382		    TP_PROTO(struct ath10k *ar, const void *data, size_t len),
    383
    384	TP_ARGS(ar, data, len),
    385
    386	TP_STRUCT__entry(
    387		__string(device, dev_name(ar->dev))
    388		__string(driver, dev_driver_string(ar->dev))
    389		__field(size_t, len)
    390		__dynamic_array(u8, payload, (len -
    391					      ath10k_frm_hdr_len(data, len)))
    392	),
    393
    394	TP_fast_assign(
    395		__assign_str(device, dev_name(ar->dev));
    396		__assign_str(driver, dev_driver_string(ar->dev));
    397		__entry->len = len - ath10k_frm_hdr_len(data, len);
    398		memcpy(__get_dynamic_array(payload),
    399		       data + ath10k_frm_hdr_len(data, len), __entry->len);
    400	),
    401
    402	TP_printk(
    403		"%s %s len %zu\n",
    404		__get_str(driver),
    405		__get_str(device),
    406		__entry->len
    407	)
    408);
    409
    410DEFINE_EVENT(ath10k_hdr_event, ath10k_tx_hdr,
    411	     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
    412	     TP_ARGS(ar, data, len)
    413);
    414
    415DEFINE_EVENT(ath10k_payload_event, ath10k_tx_payload,
    416	     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
    417	     TP_ARGS(ar, data, len)
    418);
    419
    420DEFINE_EVENT(ath10k_hdr_event, ath10k_rx_hdr,
    421	     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
    422	     TP_ARGS(ar, data, len)
    423);
    424
    425DEFINE_EVENT(ath10k_payload_event, ath10k_rx_payload,
    426	     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
    427	     TP_ARGS(ar, data, len)
    428);
    429
    430TRACE_EVENT(ath10k_htt_rx_desc,
    431	    TP_PROTO(struct ath10k *ar, const void *data, size_t len),
    432
    433	TP_ARGS(ar, data, len),
    434
    435	TP_STRUCT__entry(
    436		__string(device, dev_name(ar->dev))
    437		__string(driver, dev_driver_string(ar->dev))
    438		__field(u8, hw_type)
    439		__field(u16, len)
    440		__dynamic_array(u8, rxdesc, len)
    441	),
    442
    443	TP_fast_assign(
    444		__assign_str(device, dev_name(ar->dev));
    445		__assign_str(driver, dev_driver_string(ar->dev));
    446		__entry->hw_type = ar->hw_rev;
    447		__entry->len = len;
    448		memcpy(__get_dynamic_array(rxdesc), data, len);
    449	),
    450
    451	TP_printk(
    452		"%s %s %d rxdesc len %d",
    453		__get_str(driver),
    454		__get_str(device),
    455		__entry->hw_type,
    456		__entry->len
    457	 )
    458);
    459
    460TRACE_EVENT(ath10k_wmi_diag_container,
    461	    TP_PROTO(struct ath10k *ar,
    462		     u8 type,
    463		     u32 timestamp,
    464		     u32 code,
    465		     u16 len,
    466		     const void *data),
    467
    468	TP_ARGS(ar, type, timestamp, code, len, data),
    469
    470	TP_STRUCT__entry(
    471		__string(device, dev_name(ar->dev))
    472		__string(driver, dev_driver_string(ar->dev))
    473		__field(u8, type)
    474		__field(u32, timestamp)
    475		__field(u32, code)
    476		__field(u16, len)
    477		__dynamic_array(u8, data, len)
    478	),
    479
    480	TP_fast_assign(
    481		__assign_str(device, dev_name(ar->dev));
    482		__assign_str(driver, dev_driver_string(ar->dev));
    483		__entry->type = type;
    484		__entry->timestamp = timestamp;
    485		__entry->code = code;
    486		__entry->len = len;
    487		memcpy(__get_dynamic_array(data), data, len);
    488	),
    489
    490	TP_printk(
    491		"%s %s diag container type %u timestamp %u code %u len %d",
    492		__get_str(driver),
    493		__get_str(device),
    494		__entry->type,
    495		__entry->timestamp,
    496		__entry->code,
    497		__entry->len
    498	)
    499);
    500
    501TRACE_EVENT(ath10k_wmi_diag,
    502	    TP_PROTO(struct ath10k *ar, const void *data, size_t len),
    503
    504	TP_ARGS(ar, data, len),
    505
    506	TP_STRUCT__entry(
    507		__string(device, dev_name(ar->dev))
    508		__string(driver, dev_driver_string(ar->dev))
    509		__field(u16, len)
    510		__dynamic_array(u8, data, len)
    511	),
    512
    513	TP_fast_assign(
    514		__assign_str(device, dev_name(ar->dev));
    515		__assign_str(driver, dev_driver_string(ar->dev));
    516		__entry->len = len;
    517		memcpy(__get_dynamic_array(data), data, len);
    518	),
    519
    520	TP_printk(
    521		"%s %s tlv diag len %d",
    522		__get_str(driver),
    523		__get_str(device),
    524		__entry->len
    525	)
    526);
    527
    528#endif /* _TRACE_H_ || TRACE_HEADER_MULTI_READ*/
    529
    530/* we don't want to use include/trace/events */
    531#undef TRACE_INCLUDE_PATH
    532#define TRACE_INCLUDE_PATH .
    533#undef TRACE_INCLUDE_FILE
    534#define TRACE_INCLUDE_FILE trace
    535
    536/* This part must be outside protection */
    537#include <trace/define_trace.h>