1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* Based on net/mac80211/trace.h */ 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #undef TRACE_SYSTEM 5*4882a593Smuzhiyun #define TRACE_SYSTEM mac802154 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #if !defined(__MAC802154_DRIVER_TRACE) || defined(TRACE_HEADER_MULTI_READ) 8*4882a593Smuzhiyun #define __MAC802154_DRIVER_TRACE 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #include <linux/tracepoint.h> 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #include <net/mac802154.h> 13*4882a593Smuzhiyun #include "ieee802154_i.h" 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #define MAXNAME 32 16*4882a593Smuzhiyun #define LOCAL_ENTRY __array(char, wpan_phy_name, MAXNAME) 17*4882a593Smuzhiyun #define LOCAL_ASSIGN strlcpy(__entry->wpan_phy_name, \ 18*4882a593Smuzhiyun wpan_phy_name(local->hw.phy), MAXNAME) 19*4882a593Smuzhiyun #define LOCAL_PR_FMT "%s" 20*4882a593Smuzhiyun #define LOCAL_PR_ARG __entry->wpan_phy_name 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #define CCA_ENTRY __field(enum nl802154_cca_modes, cca_mode) \ 23*4882a593Smuzhiyun __field(enum nl802154_cca_opts, cca_opt) 24*4882a593Smuzhiyun #define CCA_ASSIGN \ 25*4882a593Smuzhiyun do { \ 26*4882a593Smuzhiyun (__entry->cca_mode) = cca->mode; \ 27*4882a593Smuzhiyun (__entry->cca_opt) = cca->opt; \ 28*4882a593Smuzhiyun } while (0) 29*4882a593Smuzhiyun #define CCA_PR_FMT "cca_mode: %d, cca_opt: %d" 30*4882a593Smuzhiyun #define CCA_PR_ARG __entry->cca_mode, __entry->cca_opt 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun #define BOOL_TO_STR(bo) (bo) ? "true" : "false" 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun /* Tracing for driver callbacks */ 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun DECLARE_EVENT_CLASS(local_only_evt4, 37*4882a593Smuzhiyun TP_PROTO(struct ieee802154_local *local), 38*4882a593Smuzhiyun TP_ARGS(local), 39*4882a593Smuzhiyun TP_STRUCT__entry( 40*4882a593Smuzhiyun LOCAL_ENTRY 41*4882a593Smuzhiyun ), 42*4882a593Smuzhiyun TP_fast_assign( 43*4882a593Smuzhiyun LOCAL_ASSIGN; 44*4882a593Smuzhiyun ), 45*4882a593Smuzhiyun TP_printk(LOCAL_PR_FMT, LOCAL_PR_ARG) 46*4882a593Smuzhiyun ); 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun DEFINE_EVENT(local_only_evt4, 802154_drv_return_void, 49*4882a593Smuzhiyun TP_PROTO(struct ieee802154_local *local), 50*4882a593Smuzhiyun TP_ARGS(local) 51*4882a593Smuzhiyun ); 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun TRACE_EVENT(802154_drv_return_int, 54*4882a593Smuzhiyun TP_PROTO(struct ieee802154_local *local, int ret), 55*4882a593Smuzhiyun TP_ARGS(local, ret), 56*4882a593Smuzhiyun TP_STRUCT__entry( 57*4882a593Smuzhiyun LOCAL_ENTRY 58*4882a593Smuzhiyun __field(int, ret) 59*4882a593Smuzhiyun ), 60*4882a593Smuzhiyun TP_fast_assign( 61*4882a593Smuzhiyun LOCAL_ASSIGN; 62*4882a593Smuzhiyun __entry->ret = ret; 63*4882a593Smuzhiyun ), 64*4882a593Smuzhiyun TP_printk(LOCAL_PR_FMT ", returned: %d", LOCAL_PR_ARG, 65*4882a593Smuzhiyun __entry->ret) 66*4882a593Smuzhiyun ); 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun DEFINE_EVENT(local_only_evt4, 802154_drv_start, 69*4882a593Smuzhiyun TP_PROTO(struct ieee802154_local *local), 70*4882a593Smuzhiyun TP_ARGS(local) 71*4882a593Smuzhiyun ); 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun DEFINE_EVENT(local_only_evt4, 802154_drv_stop, 74*4882a593Smuzhiyun TP_PROTO(struct ieee802154_local *local), 75*4882a593Smuzhiyun TP_ARGS(local) 76*4882a593Smuzhiyun ); 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun TRACE_EVENT(802154_drv_set_channel, 79*4882a593Smuzhiyun TP_PROTO(struct ieee802154_local *local, u8 page, u8 channel), 80*4882a593Smuzhiyun TP_ARGS(local, page, channel), 81*4882a593Smuzhiyun TP_STRUCT__entry( 82*4882a593Smuzhiyun LOCAL_ENTRY 83*4882a593Smuzhiyun __field(u8, page) 84*4882a593Smuzhiyun __field(u8, channel) 85*4882a593Smuzhiyun ), 86*4882a593Smuzhiyun TP_fast_assign( 87*4882a593Smuzhiyun LOCAL_ASSIGN; 88*4882a593Smuzhiyun __entry->page = page; 89*4882a593Smuzhiyun __entry->channel = channel; 90*4882a593Smuzhiyun ), 91*4882a593Smuzhiyun TP_printk(LOCAL_PR_FMT ", page: %d, channel: %d", LOCAL_PR_ARG, 92*4882a593Smuzhiyun __entry->page, __entry->channel) 93*4882a593Smuzhiyun ); 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun TRACE_EVENT(802154_drv_set_cca_mode, 96*4882a593Smuzhiyun TP_PROTO(struct ieee802154_local *local, 97*4882a593Smuzhiyun const struct wpan_phy_cca *cca), 98*4882a593Smuzhiyun TP_ARGS(local, cca), 99*4882a593Smuzhiyun TP_STRUCT__entry( 100*4882a593Smuzhiyun LOCAL_ENTRY 101*4882a593Smuzhiyun CCA_ENTRY 102*4882a593Smuzhiyun ), 103*4882a593Smuzhiyun TP_fast_assign( 104*4882a593Smuzhiyun LOCAL_ASSIGN; 105*4882a593Smuzhiyun CCA_ASSIGN; 106*4882a593Smuzhiyun ), 107*4882a593Smuzhiyun TP_printk(LOCAL_PR_FMT ", " CCA_PR_FMT, LOCAL_PR_ARG, 108*4882a593Smuzhiyun CCA_PR_ARG) 109*4882a593Smuzhiyun ); 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun TRACE_EVENT(802154_drv_set_cca_ed_level, 112*4882a593Smuzhiyun TP_PROTO(struct ieee802154_local *local, s32 mbm), 113*4882a593Smuzhiyun TP_ARGS(local, mbm), 114*4882a593Smuzhiyun TP_STRUCT__entry( 115*4882a593Smuzhiyun LOCAL_ENTRY 116*4882a593Smuzhiyun __field(s32, mbm) 117*4882a593Smuzhiyun ), 118*4882a593Smuzhiyun TP_fast_assign( 119*4882a593Smuzhiyun LOCAL_ASSIGN; 120*4882a593Smuzhiyun __entry->mbm = mbm; 121*4882a593Smuzhiyun ), 122*4882a593Smuzhiyun TP_printk(LOCAL_PR_FMT ", ed level: %d", LOCAL_PR_ARG, 123*4882a593Smuzhiyun __entry->mbm) 124*4882a593Smuzhiyun ); 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun TRACE_EVENT(802154_drv_set_tx_power, 127*4882a593Smuzhiyun TP_PROTO(struct ieee802154_local *local, s32 power), 128*4882a593Smuzhiyun TP_ARGS(local, power), 129*4882a593Smuzhiyun TP_STRUCT__entry( 130*4882a593Smuzhiyun LOCAL_ENTRY 131*4882a593Smuzhiyun __field(s32, power) 132*4882a593Smuzhiyun ), 133*4882a593Smuzhiyun TP_fast_assign( 134*4882a593Smuzhiyun LOCAL_ASSIGN; 135*4882a593Smuzhiyun __entry->power = power; 136*4882a593Smuzhiyun ), 137*4882a593Smuzhiyun TP_printk(LOCAL_PR_FMT ", mbm: %d", LOCAL_PR_ARG, 138*4882a593Smuzhiyun __entry->power) 139*4882a593Smuzhiyun ); 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun TRACE_EVENT(802154_drv_set_lbt_mode, 142*4882a593Smuzhiyun TP_PROTO(struct ieee802154_local *local, bool mode), 143*4882a593Smuzhiyun TP_ARGS(local, mode), 144*4882a593Smuzhiyun TP_STRUCT__entry( 145*4882a593Smuzhiyun LOCAL_ENTRY 146*4882a593Smuzhiyun __field(bool, mode) 147*4882a593Smuzhiyun ), 148*4882a593Smuzhiyun TP_fast_assign( 149*4882a593Smuzhiyun LOCAL_ASSIGN; 150*4882a593Smuzhiyun __entry->mode = mode; 151*4882a593Smuzhiyun ), 152*4882a593Smuzhiyun TP_printk(LOCAL_PR_FMT ", lbt mode: %s", LOCAL_PR_ARG, 153*4882a593Smuzhiyun BOOL_TO_STR(__entry->mode)) 154*4882a593Smuzhiyun ); 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun TRACE_EVENT(802154_drv_set_short_addr, 157*4882a593Smuzhiyun TP_PROTO(struct ieee802154_local *local, __le16 short_addr), 158*4882a593Smuzhiyun TP_ARGS(local, short_addr), 159*4882a593Smuzhiyun TP_STRUCT__entry( 160*4882a593Smuzhiyun LOCAL_ENTRY 161*4882a593Smuzhiyun __field(__le16, short_addr) 162*4882a593Smuzhiyun ), 163*4882a593Smuzhiyun TP_fast_assign( 164*4882a593Smuzhiyun LOCAL_ASSIGN; 165*4882a593Smuzhiyun __entry->short_addr = short_addr; 166*4882a593Smuzhiyun ), 167*4882a593Smuzhiyun TP_printk(LOCAL_PR_FMT ", short addr: 0x%04x", LOCAL_PR_ARG, 168*4882a593Smuzhiyun le16_to_cpu(__entry->short_addr)) 169*4882a593Smuzhiyun ); 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun TRACE_EVENT(802154_drv_set_pan_id, 172*4882a593Smuzhiyun TP_PROTO(struct ieee802154_local *local, __le16 pan_id), 173*4882a593Smuzhiyun TP_ARGS(local, pan_id), 174*4882a593Smuzhiyun TP_STRUCT__entry( 175*4882a593Smuzhiyun LOCAL_ENTRY 176*4882a593Smuzhiyun __field(__le16, pan_id) 177*4882a593Smuzhiyun ), 178*4882a593Smuzhiyun TP_fast_assign( 179*4882a593Smuzhiyun LOCAL_ASSIGN; 180*4882a593Smuzhiyun __entry->pan_id = pan_id; 181*4882a593Smuzhiyun ), 182*4882a593Smuzhiyun TP_printk(LOCAL_PR_FMT ", pan id: 0x%04x", LOCAL_PR_ARG, 183*4882a593Smuzhiyun le16_to_cpu(__entry->pan_id)) 184*4882a593Smuzhiyun ); 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun TRACE_EVENT(802154_drv_set_extended_addr, 187*4882a593Smuzhiyun TP_PROTO(struct ieee802154_local *local, __le64 extended_addr), 188*4882a593Smuzhiyun TP_ARGS(local, extended_addr), 189*4882a593Smuzhiyun TP_STRUCT__entry( 190*4882a593Smuzhiyun LOCAL_ENTRY 191*4882a593Smuzhiyun __field(__le64, extended_addr) 192*4882a593Smuzhiyun ), 193*4882a593Smuzhiyun TP_fast_assign( 194*4882a593Smuzhiyun LOCAL_ASSIGN; 195*4882a593Smuzhiyun __entry->extended_addr = extended_addr; 196*4882a593Smuzhiyun ), 197*4882a593Smuzhiyun TP_printk(LOCAL_PR_FMT ", extended addr: 0x%llx", LOCAL_PR_ARG, 198*4882a593Smuzhiyun le64_to_cpu(__entry->extended_addr)) 199*4882a593Smuzhiyun ); 200*4882a593Smuzhiyun 201*4882a593Smuzhiyun TRACE_EVENT(802154_drv_set_pan_coord, 202*4882a593Smuzhiyun TP_PROTO(struct ieee802154_local *local, bool is_coord), 203*4882a593Smuzhiyun TP_ARGS(local, is_coord), 204*4882a593Smuzhiyun TP_STRUCT__entry( 205*4882a593Smuzhiyun LOCAL_ENTRY 206*4882a593Smuzhiyun __field(bool, is_coord) 207*4882a593Smuzhiyun ), 208*4882a593Smuzhiyun TP_fast_assign( 209*4882a593Smuzhiyun LOCAL_ASSIGN; 210*4882a593Smuzhiyun __entry->is_coord = is_coord; 211*4882a593Smuzhiyun ), 212*4882a593Smuzhiyun TP_printk(LOCAL_PR_FMT ", is_coord: %s", LOCAL_PR_ARG, 213*4882a593Smuzhiyun BOOL_TO_STR(__entry->is_coord)) 214*4882a593Smuzhiyun ); 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun TRACE_EVENT(802154_drv_set_csma_params, 217*4882a593Smuzhiyun TP_PROTO(struct ieee802154_local *local, u8 min_be, u8 max_be, 218*4882a593Smuzhiyun u8 max_csma_backoffs), 219*4882a593Smuzhiyun TP_ARGS(local, min_be, max_be, max_csma_backoffs), 220*4882a593Smuzhiyun TP_STRUCT__entry( 221*4882a593Smuzhiyun LOCAL_ENTRY 222*4882a593Smuzhiyun __field(u8, min_be) 223*4882a593Smuzhiyun __field(u8, max_be) 224*4882a593Smuzhiyun __field(u8, max_csma_backoffs) 225*4882a593Smuzhiyun ), 226*4882a593Smuzhiyun TP_fast_assign( 227*4882a593Smuzhiyun LOCAL_ASSIGN, 228*4882a593Smuzhiyun __entry->min_be = min_be; 229*4882a593Smuzhiyun __entry->max_be = max_be; 230*4882a593Smuzhiyun __entry->max_csma_backoffs = max_csma_backoffs; 231*4882a593Smuzhiyun ), 232*4882a593Smuzhiyun TP_printk(LOCAL_PR_FMT ", min be: %d, max be: %d, max csma backoffs: %d", 233*4882a593Smuzhiyun LOCAL_PR_ARG, __entry->min_be, __entry->max_be, 234*4882a593Smuzhiyun __entry->max_csma_backoffs) 235*4882a593Smuzhiyun ); 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun TRACE_EVENT(802154_drv_set_max_frame_retries, 238*4882a593Smuzhiyun TP_PROTO(struct ieee802154_local *local, s8 max_frame_retries), 239*4882a593Smuzhiyun TP_ARGS(local, max_frame_retries), 240*4882a593Smuzhiyun TP_STRUCT__entry( 241*4882a593Smuzhiyun LOCAL_ENTRY 242*4882a593Smuzhiyun __field(s8, max_frame_retries) 243*4882a593Smuzhiyun ), 244*4882a593Smuzhiyun TP_fast_assign( 245*4882a593Smuzhiyun LOCAL_ASSIGN; 246*4882a593Smuzhiyun __entry->max_frame_retries = max_frame_retries; 247*4882a593Smuzhiyun ), 248*4882a593Smuzhiyun TP_printk(LOCAL_PR_FMT ", max frame retries: %d", LOCAL_PR_ARG, 249*4882a593Smuzhiyun __entry->max_frame_retries) 250*4882a593Smuzhiyun ); 251*4882a593Smuzhiyun 252*4882a593Smuzhiyun TRACE_EVENT(802154_drv_set_promiscuous_mode, 253*4882a593Smuzhiyun TP_PROTO(struct ieee802154_local *local, bool on), 254*4882a593Smuzhiyun TP_ARGS(local, on), 255*4882a593Smuzhiyun TP_STRUCT__entry( 256*4882a593Smuzhiyun LOCAL_ENTRY 257*4882a593Smuzhiyun __field(bool, on) 258*4882a593Smuzhiyun ), 259*4882a593Smuzhiyun TP_fast_assign( 260*4882a593Smuzhiyun LOCAL_ASSIGN; 261*4882a593Smuzhiyun __entry->on = on; 262*4882a593Smuzhiyun ), 263*4882a593Smuzhiyun TP_printk(LOCAL_PR_FMT ", promiscuous mode: %s", LOCAL_PR_ARG, 264*4882a593Smuzhiyun BOOL_TO_STR(__entry->on)) 265*4882a593Smuzhiyun ); 266*4882a593Smuzhiyun 267*4882a593Smuzhiyun #endif /* !__MAC802154_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */ 268*4882a593Smuzhiyun 269*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH 270*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH . 271*4882a593Smuzhiyun #undef TRACE_INCLUDE_FILE 272*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE trace 273*4882a593Smuzhiyun #include <trace/define_trace.h> 274