brintos

brintos / linux-shallow public Read only

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