1*d8899132SKalle Valo /* SPDX-License-Identifier: BSD-3-Clause-Clear */ 2*d8899132SKalle Valo /* 3*d8899132SKalle Valo * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved. 4*d8899132SKalle Valo * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved. 5*d8899132SKalle Valo */ 6*d8899132SKalle Valo 7*d8899132SKalle Valo #if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) 8*d8899132SKalle Valo 9*d8899132SKalle Valo #include <linux/tracepoint.h> 10*d8899132SKalle Valo #include "core.h" 11*d8899132SKalle Valo 12*d8899132SKalle Valo #define _TRACE_H_ 13*d8899132SKalle Valo 14*d8899132SKalle Valo /* create empty functions when tracing is disabled */ 15*d8899132SKalle Valo #if !defined(CONFIG_ATH12K_TRACING) 16*d8899132SKalle Valo #undef TRACE_EVENT 17*d8899132SKalle Valo #define TRACE_EVENT(name, proto, ...) \ 18*d8899132SKalle Valo static inline void trace_ ## name(proto) {} 19*d8899132SKalle Valo #endif /* !CONFIG_ATH12K_TRACING || __CHECKER__ */ 20*d8899132SKalle Valo 21*d8899132SKalle Valo #undef TRACE_SYSTEM 22*d8899132SKalle Valo #define TRACE_SYSTEM ath12k 23*d8899132SKalle Valo 24*d8899132SKalle Valo TRACE_EVENT(ath12k_htt_pktlog, 25*d8899132SKalle Valo TP_PROTO(struct ath12k *ar, const void *buf, u16 buf_len, 26*d8899132SKalle Valo u32 pktlog_checksum), 27*d8899132SKalle Valo 28*d8899132SKalle Valo TP_ARGS(ar, buf, buf_len, pktlog_checksum), 29*d8899132SKalle Valo 30*d8899132SKalle Valo TP_STRUCT__entry( 31*d8899132SKalle Valo __string(device, dev_name(ar->ab->dev)) 32*d8899132SKalle Valo __string(driver, dev_driver_string(ar->ab->dev)) 33*d8899132SKalle Valo __field(u16, buf_len) 34*d8899132SKalle Valo __field(u32, pktlog_checksum) 35*d8899132SKalle Valo __dynamic_array(u8, pktlog, buf_len) 36*d8899132SKalle Valo ), 37*d8899132SKalle Valo 38*d8899132SKalle Valo TP_fast_assign( 39*d8899132SKalle Valo __assign_str(device, dev_name(ar->ab->dev)); 40*d8899132SKalle Valo __assign_str(driver, dev_driver_string(ar->ab->dev)); 41*d8899132SKalle Valo __entry->buf_len = buf_len; 42*d8899132SKalle Valo __entry->pktlog_checksum = pktlog_checksum; 43*d8899132SKalle Valo memcpy(__get_dynamic_array(pktlog), buf, buf_len); 44*d8899132SKalle Valo ), 45*d8899132SKalle Valo 46*d8899132SKalle Valo TP_printk( 47*d8899132SKalle Valo "%s %s size %u pktlog_checksum %d", 48*d8899132SKalle Valo __get_str(driver), 49*d8899132SKalle Valo __get_str(device), 50*d8899132SKalle Valo __entry->buf_len, 51*d8899132SKalle Valo __entry->pktlog_checksum 52*d8899132SKalle Valo ) 53*d8899132SKalle Valo ); 54*d8899132SKalle Valo 55*d8899132SKalle Valo TRACE_EVENT(ath12k_htt_ppdu_stats, 56*d8899132SKalle Valo TP_PROTO(struct ath12k *ar, const void *data, size_t len), 57*d8899132SKalle Valo 58*d8899132SKalle Valo TP_ARGS(ar, data, len), 59*d8899132SKalle Valo 60*d8899132SKalle Valo TP_STRUCT__entry( 61*d8899132SKalle Valo __string(device, dev_name(ar->ab->dev)) 62*d8899132SKalle Valo __string(driver, dev_driver_string(ar->ab->dev)) 63*d8899132SKalle Valo __field(u16, len) 64*d8899132SKalle Valo __field(u32, info) 65*d8899132SKalle Valo __field(u32, sync_tstmp_lo_us) 66*d8899132SKalle Valo __field(u32, sync_tstmp_hi_us) 67*d8899132SKalle Valo __field(u32, mlo_offset_lo) 68*d8899132SKalle Valo __field(u32, mlo_offset_hi) 69*d8899132SKalle Valo __field(u32, mlo_offset_clks) 70*d8899132SKalle Valo __field(u32, mlo_comp_clks) 71*d8899132SKalle Valo __field(u32, mlo_comp_timer) 72*d8899132SKalle Valo __dynamic_array(u8, ppdu, len) 73*d8899132SKalle Valo ), 74*d8899132SKalle Valo 75*d8899132SKalle Valo TP_fast_assign( 76*d8899132SKalle Valo __assign_str(device, dev_name(ar->ab->dev)); 77*d8899132SKalle Valo __assign_str(driver, dev_driver_string(ar->ab->dev)); 78*d8899132SKalle Valo __entry->len = len; 79*d8899132SKalle Valo __entry->info = ar->pdev->timestamp.info; 80*d8899132SKalle Valo __entry->sync_tstmp_lo_us = ar->pdev->timestamp.sync_timestamp_hi_us; 81*d8899132SKalle Valo __entry->sync_tstmp_hi_us = ar->pdev->timestamp.sync_timestamp_lo_us; 82*d8899132SKalle Valo __entry->mlo_offset_lo = ar->pdev->timestamp.mlo_offset_lo; 83*d8899132SKalle Valo __entry->mlo_offset_hi = ar->pdev->timestamp.mlo_offset_hi; 84*d8899132SKalle Valo __entry->mlo_offset_clks = ar->pdev->timestamp.mlo_offset_clks; 85*d8899132SKalle Valo __entry->mlo_comp_clks = ar->pdev->timestamp.mlo_comp_clks; 86*d8899132SKalle Valo __entry->mlo_comp_timer = ar->pdev->timestamp.mlo_comp_timer; 87*d8899132SKalle Valo memcpy(__get_dynamic_array(ppdu), data, len); 88*d8899132SKalle Valo ), 89*d8899132SKalle Valo 90*d8899132SKalle Valo TP_printk( 91*d8899132SKalle Valo "%s %s ppdu len %d", 92*d8899132SKalle Valo __get_str(driver), 93*d8899132SKalle Valo __get_str(device), 94*d8899132SKalle Valo __entry->len 95*d8899132SKalle Valo ) 96*d8899132SKalle Valo ); 97*d8899132SKalle Valo 98*d8899132SKalle Valo TRACE_EVENT(ath12k_htt_rxdesc, 99*d8899132SKalle Valo TP_PROTO(struct ath12k *ar, const void *data, size_t type, size_t len), 100*d8899132SKalle Valo 101*d8899132SKalle Valo TP_ARGS(ar, data, type, len), 102*d8899132SKalle Valo 103*d8899132SKalle Valo TP_STRUCT__entry( 104*d8899132SKalle Valo __string(device, dev_name(ar->ab->dev)) 105*d8899132SKalle Valo __string(driver, dev_driver_string(ar->ab->dev)) 106*d8899132SKalle Valo __field(u16, len) 107*d8899132SKalle Valo __field(u16, type) 108*d8899132SKalle Valo __field(u32, info) 109*d8899132SKalle Valo __field(u32, sync_tstmp_lo_us) 110*d8899132SKalle Valo __field(u32, sync_tstmp_hi_us) 111*d8899132SKalle Valo __field(u32, mlo_offset_lo) 112*d8899132SKalle Valo __field(u32, mlo_offset_hi) 113*d8899132SKalle Valo __field(u32, mlo_offset_clks) 114*d8899132SKalle Valo __field(u32, mlo_comp_clks) 115*d8899132SKalle Valo __field(u32, mlo_comp_timer) 116*d8899132SKalle Valo __dynamic_array(u8, rxdesc, len) 117*d8899132SKalle Valo ), 118*d8899132SKalle Valo 119*d8899132SKalle Valo TP_fast_assign( 120*d8899132SKalle Valo __assign_str(device, dev_name(ar->ab->dev)); 121*d8899132SKalle Valo __assign_str(driver, dev_driver_string(ar->ab->dev)); 122*d8899132SKalle Valo __entry->len = len; 123*d8899132SKalle Valo __entry->type = type; 124*d8899132SKalle Valo __entry->info = ar->pdev->timestamp.info; 125*d8899132SKalle Valo __entry->sync_tstmp_lo_us = ar->pdev->timestamp.sync_timestamp_hi_us; 126*d8899132SKalle Valo __entry->sync_tstmp_hi_us = ar->pdev->timestamp.sync_timestamp_lo_us; 127*d8899132SKalle Valo __entry->mlo_offset_lo = ar->pdev->timestamp.mlo_offset_lo; 128*d8899132SKalle Valo __entry->mlo_offset_hi = ar->pdev->timestamp.mlo_offset_hi; 129*d8899132SKalle Valo __entry->mlo_offset_clks = ar->pdev->timestamp.mlo_offset_clks; 130*d8899132SKalle Valo __entry->mlo_comp_clks = ar->pdev->timestamp.mlo_comp_clks; 131*d8899132SKalle Valo __entry->mlo_comp_timer = ar->pdev->timestamp.mlo_comp_timer; 132*d8899132SKalle Valo memcpy(__get_dynamic_array(rxdesc), data, len); 133*d8899132SKalle Valo ), 134*d8899132SKalle Valo 135*d8899132SKalle Valo TP_printk( 136*d8899132SKalle Valo "%s %s rxdesc len %d", 137*d8899132SKalle Valo __get_str(driver), 138*d8899132SKalle Valo __get_str(device), 139*d8899132SKalle Valo __entry->len 140*d8899132SKalle Valo ) 141*d8899132SKalle Valo ); 142*d8899132SKalle Valo 143*d8899132SKalle Valo #endif /* _TRACE_H_ || TRACE_HEADER_MULTI_READ*/ 144*d8899132SKalle Valo 145*d8899132SKalle Valo /* we don't want to use include/trace/events */ 146*d8899132SKalle Valo #undef TRACE_INCLUDE_PATH 147*d8899132SKalle Valo #define TRACE_INCLUDE_PATH . 148*d8899132SKalle Valo #undef TRACE_INCLUDE_FILE 149*d8899132SKalle Valo #define TRACE_INCLUDE_FILE trace 150*d8899132SKalle Valo 151*d8899132SKalle Valo /* This part must be outside protection */ 152*d8899132SKalle Valo #include <trace/define_trace.h> 153