1*4882a593Smuzhiyun /* SPDX-License-Identifier: ISC */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name> 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #if !defined(__MT76x02_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) 7*4882a593Smuzhiyun #define __MT76x02_TRACE_H 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #include <linux/tracepoint.h> 10*4882a593Smuzhiyun #include "mt76x02.h" 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #undef TRACE_SYSTEM 13*4882a593Smuzhiyun #define TRACE_SYSTEM mt76x02 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #define MAXNAME 32 16*4882a593Smuzhiyun #define DEV_ENTRY __array(char, wiphy_name, 32) 17*4882a593Smuzhiyun #define DEV_ASSIGN strlcpy(__entry->wiphy_name, \ 18*4882a593Smuzhiyun wiphy_name(mt76_hw(dev)->wiphy), MAXNAME) 19*4882a593Smuzhiyun #define DEV_PR_FMT "%s" 20*4882a593Smuzhiyun #define DEV_PR_ARG __entry->wiphy_name 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #define TXID_ENTRY __field(u8, wcid) __field(u8, pktid) 23*4882a593Smuzhiyun #define TXID_PR_FMT " [%d:%d]" 24*4882a593Smuzhiyun #define TXID_PR_ARG __entry->wcid, __entry->pktid 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun DECLARE_EVENT_CLASS(dev_evt, 27*4882a593Smuzhiyun TP_PROTO(struct mt76x02_dev *dev), 28*4882a593Smuzhiyun TP_ARGS(dev), 29*4882a593Smuzhiyun TP_STRUCT__entry( 30*4882a593Smuzhiyun DEV_ENTRY 31*4882a593Smuzhiyun ), 32*4882a593Smuzhiyun TP_fast_assign( 33*4882a593Smuzhiyun DEV_ASSIGN; 34*4882a593Smuzhiyun ), 35*4882a593Smuzhiyun TP_printk(DEV_PR_FMT, DEV_PR_ARG) 36*4882a593Smuzhiyun ); 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun DEFINE_EVENT(dev_evt, mac_txstat_poll, 39*4882a593Smuzhiyun TP_PROTO(struct mt76x02_dev *dev), 40*4882a593Smuzhiyun TP_ARGS(dev) 41*4882a593Smuzhiyun ); 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun TRACE_EVENT(mac_txstat_fetch, 44*4882a593Smuzhiyun TP_PROTO(struct mt76x02_dev *dev, 45*4882a593Smuzhiyun struct mt76x02_tx_status *stat), 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun TP_ARGS(dev, stat), 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun TP_STRUCT__entry( 50*4882a593Smuzhiyun DEV_ENTRY 51*4882a593Smuzhiyun TXID_ENTRY 52*4882a593Smuzhiyun __field(bool, success) 53*4882a593Smuzhiyun __field(bool, aggr) 54*4882a593Smuzhiyun __field(bool, ack_req) 55*4882a593Smuzhiyun __field(u16, rate) 56*4882a593Smuzhiyun __field(u8, retry) 57*4882a593Smuzhiyun ), 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun TP_fast_assign( 60*4882a593Smuzhiyun DEV_ASSIGN; 61*4882a593Smuzhiyun __entry->success = stat->success; 62*4882a593Smuzhiyun __entry->aggr = stat->aggr; 63*4882a593Smuzhiyun __entry->ack_req = stat->ack_req; 64*4882a593Smuzhiyun __entry->wcid = stat->wcid; 65*4882a593Smuzhiyun __entry->pktid = stat->pktid; 66*4882a593Smuzhiyun __entry->rate = stat->rate; 67*4882a593Smuzhiyun __entry->retry = stat->retry; 68*4882a593Smuzhiyun ), 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun TP_printk( 71*4882a593Smuzhiyun DEV_PR_FMT TXID_PR_FMT 72*4882a593Smuzhiyun " success:%d aggr:%d ack_req:%d" 73*4882a593Smuzhiyun " rate:%04x retry:%d", 74*4882a593Smuzhiyun DEV_PR_ARG, TXID_PR_ARG, 75*4882a593Smuzhiyun __entry->success, __entry->aggr, __entry->ack_req, 76*4882a593Smuzhiyun __entry->rate, __entry->retry 77*4882a593Smuzhiyun ) 78*4882a593Smuzhiyun ); 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun #endif 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH 83*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH . 84*4882a593Smuzhiyun #undef TRACE_INCLUDE_FILE 85*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE mt76x02_trace 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun #include <trace/define_trace.h> 88