1*5113495bSYour Name /* 2*5113495bSYour Name * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved. 3*5113495bSYour Name * 4*5113495bSYour Name * Permission to use, copy, modify, and/or distribute this software for 5*5113495bSYour Name * any purpose with or without fee is hereby granted, provided that the 6*5113495bSYour Name * above copyright notice and this permission notice appear in all 7*5113495bSYour Name * copies. 8*5113495bSYour Name * 9*5113495bSYour Name * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 10*5113495bSYour Name * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 11*5113495bSYour Name * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 12*5113495bSYour Name * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 13*5113495bSYour Name * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 14*5113495bSYour Name * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 15*5113495bSYour Name * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16*5113495bSYour Name * PERFORMANCE OF THIS SOFTWARE. 17*5113495bSYour Name */ 18*5113495bSYour Name 19*5113495bSYour Name /** 20*5113495bSYour Name * DOC: qdf_tracepoint_defs.h 21*5113495bSYour Name * This file provides OS abstraction for function tracing. 22*5113495bSYour Name */ 23*5113495bSYour Name 24*5113495bSYour Name #if !defined(_QDF_TRACEPOINT_DEFS_H) || defined(TRACE_HEADER_MULTI_READ) 25*5113495bSYour Name #define _QDF_TRACEPOINT_DEFS_H 26*5113495bSYour Name 27*5113495bSYour Name #include <linux/tracepoint.h> 28*5113495bSYour Name #include <linux/skbuff.h> 29*5113495bSYour Name 30*5113495bSYour Name #undef TRACE_SYSTEM 31*5113495bSYour Name #define TRACE_SYSTEM wlan 32*5113495bSYour Name 33*5113495bSYour Name #ifndef WLAN_TRACEPOINTS 34*5113495bSYour Name #undef TRACE_EVENT 35*5113495bSYour Name #define TRACE_EVENT(name, proto, args, tstruct, assign, print) \ 36*5113495bSYour Name static inline void trace_##name(proto) {} \ 37*5113495bSYour Name static inline bool trace_##name##_enabled(void) \ 38*5113495bSYour Name { \ 39*5113495bSYour Name return false; \ 40*5113495bSYour Name } 41*5113495bSYour Name 42*5113495bSYour Name #undef DECLARE_EVENT_CLASS 43*5113495bSYour Name #define DECLARE_EVENT_CLASS(name, proto, args, tstruct, assign, print) 44*5113495bSYour Name 45*5113495bSYour Name #undef DEFINE_EVENT 46*5113495bSYour Name #define DEFINE_EVENT(evt_class, name, proto, args) \ 47*5113495bSYour Name static inline void trace_##name(proto) {} \ 48*5113495bSYour Name static inline bool trace_##name##_enabled(void) \ 49*5113495bSYour Name { \ 50*5113495bSYour Name return false; \ 51*5113495bSYour Name } 52*5113495bSYour Name #endif /* WLAN_TRACEPOINTS */ 53*5113495bSYour Name 54*5113495bSYour Name DECLARE_EVENT_CLASS(dp_trace_tcp_pkt_class, 55*5113495bSYour Name TP_PROTO(struct sk_buff *skb, uint32_t tcp_seq_num, 56*5113495bSYour Name uint32_t tcp_ack_num, uint16_t srcport, 57*5113495bSYour Name uint16_t dstport, uint64_t tdelta), 58*5113495bSYour Name TP_ARGS(skb, tcp_seq_num, tcp_ack_num, srcport, 59*5113495bSYour Name dstport, tdelta), 60*5113495bSYour Name TP_STRUCT__entry( 61*5113495bSYour Name __field(void *, skb) 62*5113495bSYour Name __field(uint32_t, tcp_seq_num) 63*5113495bSYour Name __field(uint32_t, tcp_ack_num) 64*5113495bSYour Name __field(uint16_t, srcport) 65*5113495bSYour Name __field(uint16_t, dstport) 66*5113495bSYour Name __field(uint64_t, tdelta) 67*5113495bSYour Name ), 68*5113495bSYour Name TP_fast_assign( 69*5113495bSYour Name __entry->skb = skb; 70*5113495bSYour Name __entry->tcp_seq_num = tcp_seq_num; 71*5113495bSYour Name __entry->tcp_ack_num = tcp_ack_num; 72*5113495bSYour Name __entry->srcport = srcport; 73*5113495bSYour Name __entry->dstport = dstport; 74*5113495bSYour Name __entry->tdelta = tdelta; 75*5113495bSYour Name ), 76*5113495bSYour Name TP_printk("skb=%pK seqnum=%u acknum=%u srcport=%u dstport=%u latency(us)=%llu", 77*5113495bSYour Name __entry->skb, __entry->tcp_seq_num, 78*5113495bSYour Name __entry->tcp_ack_num, __entry->srcport, 79*5113495bSYour Name __entry->dstport, __entry->tdelta) 80*5113495bSYour Name ); 81*5113495bSYour Name 82*5113495bSYour Name DEFINE_EVENT(dp_trace_tcp_pkt_class, dp_rx_tcp_pkt, 83*5113495bSYour Name TP_PROTO(struct sk_buff *skb, uint32_t tcp_seq_num, 84*5113495bSYour Name uint32_t tcp_ack_num, uint16_t srcport, 85*5113495bSYour Name uint16_t dstport, uint64_t tdelta), 86*5113495bSYour Name TP_ARGS(skb, tcp_seq_num, tcp_ack_num, srcport, dstport, tdelta) 87*5113495bSYour Name ); 88*5113495bSYour Name 89*5113495bSYour Name DEFINE_EVENT(dp_trace_tcp_pkt_class, dp_tx_comp_tcp_pkt, 90*5113495bSYour Name TP_PROTO(struct sk_buff *skb, uint32_t tcp_seq_num, 91*5113495bSYour Name uint32_t tcp_ack_num, uint16_t srcport, 92*5113495bSYour Name uint16_t dstport, uint64_t tdelta), 93*5113495bSYour Name TP_ARGS(skb, tcp_seq_num, tcp_ack_num, srcport, dstport, tdelta) 94*5113495bSYour Name ); 95*5113495bSYour Name 96*5113495bSYour Name DECLARE_EVENT_CLASS(dp_trace_udp_pkt_class, 97*5113495bSYour Name TP_PROTO(struct sk_buff *skb, uint16_t ip_id, 98*5113495bSYour Name uint16_t srcport, uint16_t dstport, 99*5113495bSYour Name uint64_t tdelta), 100*5113495bSYour Name TP_ARGS(skb, ip_id, srcport, dstport, tdelta), 101*5113495bSYour Name TP_STRUCT__entry( 102*5113495bSYour Name __field(void *, skb) 103*5113495bSYour Name __field(uint16_t, ip_id) 104*5113495bSYour Name __field(uint16_t, srcport) 105*5113495bSYour Name __field(uint16_t, dstport) 106*5113495bSYour Name __field(uint64_t, tdelta) 107*5113495bSYour Name ), 108*5113495bSYour Name TP_fast_assign( 109*5113495bSYour Name __entry->skb = skb; 110*5113495bSYour Name __entry->ip_id = ip_id; 111*5113495bSYour Name __entry->srcport = srcport; 112*5113495bSYour Name __entry->dstport = dstport; 113*5113495bSYour Name __entry->tdelta = tdelta; 114*5113495bSYour Name ), 115*5113495bSYour Name TP_printk("skb=%pK ip_id=%u srcport=%u dstport=%d latency(us)=%llu", 116*5113495bSYour Name __entry->skb, __entry->ip_id, 117*5113495bSYour Name __entry->srcport, __entry->dstport, 118*5113495bSYour Name __entry->tdelta) 119*5113495bSYour Name ); 120*5113495bSYour Name 121*5113495bSYour Name DEFINE_EVENT(dp_trace_udp_pkt_class, dp_rx_udp_pkt, 122*5113495bSYour Name TP_PROTO(struct sk_buff *skb, uint16_t ip_id, uint16_t srcport, 123*5113495bSYour Name uint16_t dstport, uint64_t tdelta), 124*5113495bSYour Name TP_ARGS(skb, ip_id, srcport, dstport, tdelta) 125*5113495bSYour Name ); 126*5113495bSYour Name 127*5113495bSYour Name DEFINE_EVENT(dp_trace_udp_pkt_class, dp_tx_comp_udp_pkt, 128*5113495bSYour Name TP_PROTO(struct sk_buff *skb, uint16_t ip_id, uint16_t srcport, 129*5113495bSYour Name uint16_t dstport, uint64_t tdelta), 130*5113495bSYour Name TP_ARGS(skb, ip_id, srcport, dstport, tdelta) 131*5113495bSYour Name ); 132*5113495bSYour Name 133*5113495bSYour Name DECLARE_EVENT_CLASS(dp_trace_generic_ip_pkt_class, 134*5113495bSYour Name TP_PROTO(struct sk_buff *skb, uint8_t ip_proto, 135*5113495bSYour Name uint16_t ip_id, uint32_t trans_hdr_4_bytes, 136*5113495bSYour Name uint64_t tdelta), 137*5113495bSYour Name TP_ARGS(skb, ip_proto, ip_id, 138*5113495bSYour Name trans_hdr_4_bytes, tdelta), 139*5113495bSYour Name TP_STRUCT__entry( 140*5113495bSYour Name __field(void *, skb) 141*5113495bSYour Name __field(uint8_t, ip_proto) 142*5113495bSYour Name __field(uint16_t, ip_id) 143*5113495bSYour Name __field(uint32_t, trans_hdr_4_bytes) 144*5113495bSYour Name __field(uint64_t, tdelta) 145*5113495bSYour Name ), 146*5113495bSYour Name TP_fast_assign( 147*5113495bSYour Name __entry->skb = skb; 148*5113495bSYour Name __entry->ip_proto = ip_proto; 149*5113495bSYour Name __entry->ip_id = ip_id; 150*5113495bSYour Name __entry->trans_hdr_4_bytes = trans_hdr_4_bytes; 151*5113495bSYour Name __entry->tdelta = tdelta; 152*5113495bSYour Name ), 153*5113495bSYour Name TP_printk("skb=%pK ip_proto=0x%x ip_id=0x%x, transport_hdr[4]:0x%08x, latency(us)=%llu", 154*5113495bSYour Name __entry->skb, __entry->ip_proto, 155*5113495bSYour Name __entry->ip_id, __entry->trans_hdr_4_bytes, 156*5113495bSYour Name __entry->tdelta) 157*5113495bSYour Name ); 158*5113495bSYour Name 159*5113495bSYour Name DEFINE_EVENT(dp_trace_generic_ip_pkt_class, dp_rx_generic_ip_pkt, 160*5113495bSYour Name TP_PROTO(struct sk_buff *skb, uint8_t ip_proto, 161*5113495bSYour Name uint16_t ip_id, uint32_t trans_hdr_4_bytes, 162*5113495bSYour Name uint64_t tdelta), 163*5113495bSYour Name TP_ARGS(skb, ip_proto, ip_id, 164*5113495bSYour Name trans_hdr_4_bytes, 165*5113495bSYour Name tdelta) 166*5113495bSYour Name ); 167*5113495bSYour Name 168*5113495bSYour Name DEFINE_EVENT(dp_trace_generic_ip_pkt_class, dp_tx_comp_generic_ip_pkt, 169*5113495bSYour Name TP_PROTO(struct sk_buff *skb, uint8_t ip_proto, 170*5113495bSYour Name uint16_t ip_id, uint32_t trans_hdr_4_bytes, 171*5113495bSYour Name uint64_t tdelta), 172*5113495bSYour Name TP_ARGS(skb, ip_proto, ip_id, 173*5113495bSYour Name trans_hdr_4_bytes, 174*5113495bSYour Name tdelta) 175*5113495bSYour Name ); 176*5113495bSYour Name 177*5113495bSYour Name DECLARE_EVENT_CLASS(dp_trace_pkt_class, 178*5113495bSYour Name TP_PROTO(struct sk_buff *skb, uint16_t ether_type, 179*5113495bSYour Name uint64_t tdelta), 180*5113495bSYour Name TP_ARGS(skb, ether_type, tdelta), 181*5113495bSYour Name TP_STRUCT__entry( 182*5113495bSYour Name __field(void *, skb) 183*5113495bSYour Name __field(uint16_t, ether_type) 184*5113495bSYour Name __field(uint64_t, tdelta) 185*5113495bSYour Name ), 186*5113495bSYour Name TP_fast_assign( 187*5113495bSYour Name __entry->skb = skb; 188*5113495bSYour Name __entry->ether_type = ether_type; 189*5113495bSYour Name __entry->tdelta = tdelta; 190*5113495bSYour Name ), 191*5113495bSYour Name TP_printk("skb=%pK ether_type=0x%x latency(us)=%llu", 192*5113495bSYour Name __entry->skb, __entry->ether_type, 193*5113495bSYour Name __entry->tdelta) 194*5113495bSYour Name ); 195*5113495bSYour Name 196*5113495bSYour Name DEFINE_EVENT(dp_trace_pkt_class, dp_rx_pkt, 197*5113495bSYour Name TP_PROTO(struct sk_buff *skb, uint16_t ether_type, 198*5113495bSYour Name uint64_t tdelta), 199*5113495bSYour Name TP_ARGS(skb, ether_type, tdelta) 200*5113495bSYour Name ); 201*5113495bSYour Name 202*5113495bSYour Name DEFINE_EVENT(dp_trace_pkt_class, dp_tx_comp_pkt, 203*5113495bSYour Name TP_PROTO(struct sk_buff *skb, uint16_t ether_type, 204*5113495bSYour Name uint64_t tdelta), 205*5113495bSYour Name TP_ARGS(skb, ether_type, tdelta) 206*5113495bSYour Name ); 207*5113495bSYour Name 208*5113495bSYour Name TRACE_EVENT(dp_del_reg_write, 209*5113495bSYour Name TP_PROTO(uint8_t srng_id, uint32_t enq_val, uint32_t deq_val, 210*5113495bSYour Name uint64_t enq_time, uint64_t deq_time), 211*5113495bSYour Name TP_ARGS(srng_id, enq_val, deq_val, enq_time, deq_time), 212*5113495bSYour Name TP_STRUCT__entry( 213*5113495bSYour Name __field(uint8_t, srng_id) 214*5113495bSYour Name __field(uint32_t, enq_val) 215*5113495bSYour Name __field(uint32_t, deq_val) 216*5113495bSYour Name __field(uint64_t, enq_time) 217*5113495bSYour Name __field(uint64_t, deq_time) 218*5113495bSYour Name ), 219*5113495bSYour Name TP_fast_assign( 220*5113495bSYour Name __entry->srng_id = srng_id; 221*5113495bSYour Name __entry->enq_val = enq_val; 222*5113495bSYour Name __entry->deq_val = deq_val; 223*5113495bSYour Name __entry->enq_time = enq_time; 224*5113495bSYour Name __entry->deq_time = deq_time; 225*5113495bSYour Name ), 226*5113495bSYour Name TP_printk("srng_id=%u enq_val=%u deq_val=%u enq_time=0x%llx deq_time=0x%llx", 227*5113495bSYour Name __entry->srng_id, __entry->enq_val, __entry->deq_val, 228*5113495bSYour Name __entry->enq_time, __entry->deq_time) 229*5113495bSYour Name ); 230*5113495bSYour Name 231*5113495bSYour Name TRACE_EVENT(dp_ce_tasklet_sched_latency, 232*5113495bSYour Name TP_PROTO(uint8_t ce_id, uint64_t sched_latency), 233*5113495bSYour Name TP_ARGS(ce_id, sched_latency), 234*5113495bSYour Name TP_STRUCT__entry( 235*5113495bSYour Name __field(uint8_t, ce_id) 236*5113495bSYour Name __field(uint64_t, sched_latency) 237*5113495bSYour Name ), 238*5113495bSYour Name TP_fast_assign( 239*5113495bSYour Name __entry->ce_id = ce_id; 240*5113495bSYour Name __entry->sched_latency = sched_latency; 241*5113495bSYour Name ), 242*5113495bSYour Name TP_printk("ce_id=%u latency(ns)=%llu", __entry->ce_id, 243*5113495bSYour Name __entry->sched_latency) 244*5113495bSYour Name ); 245*5113495bSYour Name #endif /* _QDF_TRACEPOINT_DEFS_H */ 246*5113495bSYour Name 247*5113495bSYour Name /* Below should be outside the protection */ 248*5113495bSYour Name #undef TRACE_INCLUDE_PATH 249*5113495bSYour Name #define TRACE_INCLUDE_PATH . 250*5113495bSYour Name #undef TRACE_INCLUDE_FILE 251*5113495bSYour Name #define TRACE_INCLUDE_FILE qdf_tracepoint_defs 252*5113495bSYour Name #include <trace/define_trace.h> 253