1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* Based on net/wireless/trace.h */ 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #undef TRACE_SYSTEM 5*4882a593Smuzhiyun #define TRACE_SYSTEM cfg802154 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #if !defined(__RDEV_CFG802154_OPS_TRACE) || defined(TRACE_HEADER_MULTI_READ) 8*4882a593Smuzhiyun #define __RDEV_CFG802154_OPS_TRACE 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #include <linux/tracepoint.h> 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #include <net/cfg802154.h> 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #define MAXNAME 32 15*4882a593Smuzhiyun #define WPAN_PHY_ENTRY __array(char, wpan_phy_name, MAXNAME) 16*4882a593Smuzhiyun #define WPAN_PHY_ASSIGN strlcpy(__entry->wpan_phy_name, \ 17*4882a593Smuzhiyun wpan_phy_name(wpan_phy), \ 18*4882a593Smuzhiyun MAXNAME) 19*4882a593Smuzhiyun #define WPAN_PHY_PR_FMT "%s" 20*4882a593Smuzhiyun #define WPAN_PHY_PR_ARG __entry->wpan_phy_name 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #define WPAN_DEV_ENTRY __field(u32, identifier) 23*4882a593Smuzhiyun #define WPAN_DEV_ASSIGN (__entry->identifier) = (!IS_ERR_OR_NULL(wpan_dev) \ 24*4882a593Smuzhiyun ? wpan_dev->identifier : 0) 25*4882a593Smuzhiyun #define WPAN_DEV_PR_FMT "wpan_dev(%u)" 26*4882a593Smuzhiyun #define WPAN_DEV_PR_ARG (__entry->identifier) 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun #define WPAN_CCA_ENTRY __field(enum nl802154_cca_modes, cca_mode) \ 29*4882a593Smuzhiyun __field(enum nl802154_cca_opts, cca_opt) 30*4882a593Smuzhiyun #define WPAN_CCA_ASSIGN \ 31*4882a593Smuzhiyun do { \ 32*4882a593Smuzhiyun (__entry->cca_mode) = cca->mode; \ 33*4882a593Smuzhiyun (__entry->cca_opt) = cca->opt; \ 34*4882a593Smuzhiyun } while (0) 35*4882a593Smuzhiyun #define WPAN_CCA_PR_FMT "cca_mode: %d, cca_opt: %d" 36*4882a593Smuzhiyun #define WPAN_CCA_PR_ARG __entry->cca_mode, __entry->cca_opt 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun #define BOOL_TO_STR(bo) (bo) ? "true" : "false" 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /************************************************************* 41*4882a593Smuzhiyun * rdev->ops traces * 42*4882a593Smuzhiyun *************************************************************/ 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun DECLARE_EVENT_CLASS(wpan_phy_only_evt, 45*4882a593Smuzhiyun TP_PROTO(struct wpan_phy *wpan_phy), 46*4882a593Smuzhiyun TP_ARGS(wpan_phy), 47*4882a593Smuzhiyun TP_STRUCT__entry( 48*4882a593Smuzhiyun WPAN_PHY_ENTRY 49*4882a593Smuzhiyun ), 50*4882a593Smuzhiyun TP_fast_assign( 51*4882a593Smuzhiyun WPAN_PHY_ASSIGN; 52*4882a593Smuzhiyun ), 53*4882a593Smuzhiyun TP_printk(WPAN_PHY_PR_FMT, WPAN_PHY_PR_ARG) 54*4882a593Smuzhiyun ); 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun DEFINE_EVENT(wpan_phy_only_evt, 802154_rdev_suspend, 57*4882a593Smuzhiyun TP_PROTO(struct wpan_phy *wpan_phy), 58*4882a593Smuzhiyun TP_ARGS(wpan_phy) 59*4882a593Smuzhiyun ); 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun DEFINE_EVENT(wpan_phy_only_evt, 802154_rdev_resume, 62*4882a593Smuzhiyun TP_PROTO(struct wpan_phy *wpan_phy), 63*4882a593Smuzhiyun TP_ARGS(wpan_phy) 64*4882a593Smuzhiyun ); 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun TRACE_EVENT(802154_rdev_add_virtual_intf, 67*4882a593Smuzhiyun TP_PROTO(struct wpan_phy *wpan_phy, char *name, 68*4882a593Smuzhiyun enum nl802154_iftype type, __le64 extended_addr), 69*4882a593Smuzhiyun TP_ARGS(wpan_phy, name, type, extended_addr), 70*4882a593Smuzhiyun TP_STRUCT__entry( 71*4882a593Smuzhiyun WPAN_PHY_ENTRY 72*4882a593Smuzhiyun __string(vir_intf_name, name ? name : "<noname>") 73*4882a593Smuzhiyun __field(enum nl802154_iftype, type) 74*4882a593Smuzhiyun __field(__le64, extended_addr) 75*4882a593Smuzhiyun ), 76*4882a593Smuzhiyun TP_fast_assign( 77*4882a593Smuzhiyun WPAN_PHY_ASSIGN; 78*4882a593Smuzhiyun __assign_str(vir_intf_name, name ? name : "<noname>"); 79*4882a593Smuzhiyun __entry->type = type; 80*4882a593Smuzhiyun __entry->extended_addr = extended_addr; 81*4882a593Smuzhiyun ), 82*4882a593Smuzhiyun TP_printk(WPAN_PHY_PR_FMT ", virtual intf name: %s, type: %d, extended addr: 0x%llx", 83*4882a593Smuzhiyun WPAN_PHY_PR_ARG, __get_str(vir_intf_name), __entry->type, 84*4882a593Smuzhiyun __le64_to_cpu(__entry->extended_addr)) 85*4882a593Smuzhiyun ); 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun TRACE_EVENT(802154_rdev_del_virtual_intf, 88*4882a593Smuzhiyun TP_PROTO(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev), 89*4882a593Smuzhiyun TP_ARGS(wpan_phy, wpan_dev), 90*4882a593Smuzhiyun TP_STRUCT__entry( 91*4882a593Smuzhiyun WPAN_PHY_ENTRY 92*4882a593Smuzhiyun WPAN_DEV_ENTRY 93*4882a593Smuzhiyun ), 94*4882a593Smuzhiyun TP_fast_assign( 95*4882a593Smuzhiyun WPAN_PHY_ASSIGN; 96*4882a593Smuzhiyun WPAN_DEV_ASSIGN; 97*4882a593Smuzhiyun ), 98*4882a593Smuzhiyun TP_printk(WPAN_PHY_PR_FMT ", " WPAN_DEV_PR_FMT, WPAN_PHY_PR_ARG, 99*4882a593Smuzhiyun WPAN_DEV_PR_ARG) 100*4882a593Smuzhiyun ); 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun TRACE_EVENT(802154_rdev_set_channel, 103*4882a593Smuzhiyun TP_PROTO(struct wpan_phy *wpan_phy, u8 page, u8 channel), 104*4882a593Smuzhiyun TP_ARGS(wpan_phy, page, channel), 105*4882a593Smuzhiyun TP_STRUCT__entry( 106*4882a593Smuzhiyun WPAN_PHY_ENTRY 107*4882a593Smuzhiyun __field(u8, page) 108*4882a593Smuzhiyun __field(u8, channel) 109*4882a593Smuzhiyun ), 110*4882a593Smuzhiyun TP_fast_assign( 111*4882a593Smuzhiyun WPAN_PHY_ASSIGN; 112*4882a593Smuzhiyun __entry->page = page; 113*4882a593Smuzhiyun __entry->channel = channel; 114*4882a593Smuzhiyun ), 115*4882a593Smuzhiyun TP_printk(WPAN_PHY_PR_FMT ", page: %d, channel: %d", WPAN_PHY_PR_ARG, 116*4882a593Smuzhiyun __entry->page, __entry->channel) 117*4882a593Smuzhiyun ); 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun TRACE_EVENT(802154_rdev_set_tx_power, 120*4882a593Smuzhiyun TP_PROTO(struct wpan_phy *wpan_phy, s32 power), 121*4882a593Smuzhiyun TP_ARGS(wpan_phy, power), 122*4882a593Smuzhiyun TP_STRUCT__entry( 123*4882a593Smuzhiyun WPAN_PHY_ENTRY 124*4882a593Smuzhiyun __field(s32, power) 125*4882a593Smuzhiyun ), 126*4882a593Smuzhiyun TP_fast_assign( 127*4882a593Smuzhiyun WPAN_PHY_ASSIGN; 128*4882a593Smuzhiyun __entry->power = power; 129*4882a593Smuzhiyun ), 130*4882a593Smuzhiyun TP_printk(WPAN_PHY_PR_FMT ", mbm: %d", WPAN_PHY_PR_ARG, 131*4882a593Smuzhiyun __entry->power) 132*4882a593Smuzhiyun ); 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun TRACE_EVENT(802154_rdev_set_cca_mode, 135*4882a593Smuzhiyun TP_PROTO(struct wpan_phy *wpan_phy, const struct wpan_phy_cca *cca), 136*4882a593Smuzhiyun TP_ARGS(wpan_phy, cca), 137*4882a593Smuzhiyun TP_STRUCT__entry( 138*4882a593Smuzhiyun WPAN_PHY_ENTRY 139*4882a593Smuzhiyun WPAN_CCA_ENTRY 140*4882a593Smuzhiyun ), 141*4882a593Smuzhiyun TP_fast_assign( 142*4882a593Smuzhiyun WPAN_PHY_ASSIGN; 143*4882a593Smuzhiyun WPAN_CCA_ASSIGN; 144*4882a593Smuzhiyun ), 145*4882a593Smuzhiyun TP_printk(WPAN_PHY_PR_FMT ", " WPAN_CCA_PR_FMT, WPAN_PHY_PR_ARG, 146*4882a593Smuzhiyun WPAN_CCA_PR_ARG) 147*4882a593Smuzhiyun ); 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun TRACE_EVENT(802154_rdev_set_cca_ed_level, 150*4882a593Smuzhiyun TP_PROTO(struct wpan_phy *wpan_phy, s32 ed_level), 151*4882a593Smuzhiyun TP_ARGS(wpan_phy, ed_level), 152*4882a593Smuzhiyun TP_STRUCT__entry( 153*4882a593Smuzhiyun WPAN_PHY_ENTRY 154*4882a593Smuzhiyun __field(s32, ed_level) 155*4882a593Smuzhiyun ), 156*4882a593Smuzhiyun TP_fast_assign( 157*4882a593Smuzhiyun WPAN_PHY_ASSIGN; 158*4882a593Smuzhiyun __entry->ed_level = ed_level; 159*4882a593Smuzhiyun ), 160*4882a593Smuzhiyun TP_printk(WPAN_PHY_PR_FMT ", ed level: %d", WPAN_PHY_PR_ARG, 161*4882a593Smuzhiyun __entry->ed_level) 162*4882a593Smuzhiyun ); 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun DECLARE_EVENT_CLASS(802154_le16_template, 165*4882a593Smuzhiyun TP_PROTO(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, 166*4882a593Smuzhiyun __le16 le16arg), 167*4882a593Smuzhiyun TP_ARGS(wpan_phy, wpan_dev, le16arg), 168*4882a593Smuzhiyun TP_STRUCT__entry( 169*4882a593Smuzhiyun WPAN_PHY_ENTRY 170*4882a593Smuzhiyun WPAN_DEV_ENTRY 171*4882a593Smuzhiyun __field(__le16, le16arg) 172*4882a593Smuzhiyun ), 173*4882a593Smuzhiyun TP_fast_assign( 174*4882a593Smuzhiyun WPAN_PHY_ASSIGN; 175*4882a593Smuzhiyun WPAN_DEV_ASSIGN; 176*4882a593Smuzhiyun __entry->le16arg = le16arg; 177*4882a593Smuzhiyun ), 178*4882a593Smuzhiyun TP_printk(WPAN_PHY_PR_FMT ", " WPAN_DEV_PR_FMT ", pan id: 0x%04x", 179*4882a593Smuzhiyun WPAN_PHY_PR_ARG, WPAN_DEV_PR_ARG, 180*4882a593Smuzhiyun __le16_to_cpu(__entry->le16arg)) 181*4882a593Smuzhiyun ); 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun DEFINE_EVENT(802154_le16_template, 802154_rdev_set_pan_id, 184*4882a593Smuzhiyun TP_PROTO(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, 185*4882a593Smuzhiyun __le16 le16arg), 186*4882a593Smuzhiyun TP_ARGS(wpan_phy, wpan_dev, le16arg) 187*4882a593Smuzhiyun ); 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun DEFINE_EVENT_PRINT(802154_le16_template, 802154_rdev_set_short_addr, 190*4882a593Smuzhiyun TP_PROTO(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, 191*4882a593Smuzhiyun __le16 le16arg), 192*4882a593Smuzhiyun TP_ARGS(wpan_phy, wpan_dev, le16arg), 193*4882a593Smuzhiyun TP_printk(WPAN_PHY_PR_FMT ", " WPAN_DEV_PR_FMT ", short addr: 0x%04x", 194*4882a593Smuzhiyun WPAN_PHY_PR_ARG, WPAN_DEV_PR_ARG, 195*4882a593Smuzhiyun __le16_to_cpu(__entry->le16arg)) 196*4882a593Smuzhiyun ); 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun TRACE_EVENT(802154_rdev_set_backoff_exponent, 199*4882a593Smuzhiyun TP_PROTO(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, 200*4882a593Smuzhiyun u8 min_be, u8 max_be), 201*4882a593Smuzhiyun TP_ARGS(wpan_phy, wpan_dev, min_be, max_be), 202*4882a593Smuzhiyun TP_STRUCT__entry( 203*4882a593Smuzhiyun WPAN_PHY_ENTRY 204*4882a593Smuzhiyun WPAN_DEV_ENTRY 205*4882a593Smuzhiyun __field(u8, min_be) 206*4882a593Smuzhiyun __field(u8, max_be) 207*4882a593Smuzhiyun ), 208*4882a593Smuzhiyun TP_fast_assign( 209*4882a593Smuzhiyun WPAN_PHY_ASSIGN; 210*4882a593Smuzhiyun WPAN_DEV_ASSIGN; 211*4882a593Smuzhiyun __entry->min_be = min_be; 212*4882a593Smuzhiyun __entry->max_be = max_be; 213*4882a593Smuzhiyun ), 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun TP_printk(WPAN_PHY_PR_FMT ", " WPAN_DEV_PR_FMT 216*4882a593Smuzhiyun ", min be: %d, max be: %d", WPAN_PHY_PR_ARG, 217*4882a593Smuzhiyun WPAN_DEV_PR_ARG, __entry->min_be, __entry->max_be) 218*4882a593Smuzhiyun ); 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun TRACE_EVENT(802154_rdev_set_csma_backoffs, 221*4882a593Smuzhiyun TP_PROTO(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, 222*4882a593Smuzhiyun u8 max_csma_backoffs), 223*4882a593Smuzhiyun TP_ARGS(wpan_phy, wpan_dev, max_csma_backoffs), 224*4882a593Smuzhiyun TP_STRUCT__entry( 225*4882a593Smuzhiyun WPAN_PHY_ENTRY 226*4882a593Smuzhiyun WPAN_DEV_ENTRY 227*4882a593Smuzhiyun __field(u8, max_csma_backoffs) 228*4882a593Smuzhiyun ), 229*4882a593Smuzhiyun TP_fast_assign( 230*4882a593Smuzhiyun WPAN_PHY_ASSIGN; 231*4882a593Smuzhiyun WPAN_DEV_ASSIGN; 232*4882a593Smuzhiyun __entry->max_csma_backoffs = max_csma_backoffs; 233*4882a593Smuzhiyun ), 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun TP_printk(WPAN_PHY_PR_FMT ", " WPAN_DEV_PR_FMT 236*4882a593Smuzhiyun ", max csma backoffs: %d", WPAN_PHY_PR_ARG, 237*4882a593Smuzhiyun WPAN_DEV_PR_ARG, __entry->max_csma_backoffs) 238*4882a593Smuzhiyun ); 239*4882a593Smuzhiyun 240*4882a593Smuzhiyun TRACE_EVENT(802154_rdev_set_max_frame_retries, 241*4882a593Smuzhiyun TP_PROTO(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, 242*4882a593Smuzhiyun s8 max_frame_retries), 243*4882a593Smuzhiyun TP_ARGS(wpan_phy, wpan_dev, max_frame_retries), 244*4882a593Smuzhiyun TP_STRUCT__entry( 245*4882a593Smuzhiyun WPAN_PHY_ENTRY 246*4882a593Smuzhiyun WPAN_DEV_ENTRY 247*4882a593Smuzhiyun __field(s8, max_frame_retries) 248*4882a593Smuzhiyun ), 249*4882a593Smuzhiyun TP_fast_assign( 250*4882a593Smuzhiyun WPAN_PHY_ASSIGN; 251*4882a593Smuzhiyun WPAN_DEV_ASSIGN; 252*4882a593Smuzhiyun __entry->max_frame_retries = max_frame_retries; 253*4882a593Smuzhiyun ), 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun TP_printk(WPAN_PHY_PR_FMT ", " WPAN_DEV_PR_FMT 256*4882a593Smuzhiyun ", max frame retries: %d", WPAN_PHY_PR_ARG, 257*4882a593Smuzhiyun WPAN_DEV_PR_ARG, __entry->max_frame_retries) 258*4882a593Smuzhiyun ); 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun TRACE_EVENT(802154_rdev_set_lbt_mode, 261*4882a593Smuzhiyun TP_PROTO(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, 262*4882a593Smuzhiyun bool mode), 263*4882a593Smuzhiyun TP_ARGS(wpan_phy, wpan_dev, mode), 264*4882a593Smuzhiyun TP_STRUCT__entry( 265*4882a593Smuzhiyun WPAN_PHY_ENTRY 266*4882a593Smuzhiyun WPAN_DEV_ENTRY 267*4882a593Smuzhiyun __field(bool, mode) 268*4882a593Smuzhiyun ), 269*4882a593Smuzhiyun TP_fast_assign( 270*4882a593Smuzhiyun WPAN_PHY_ASSIGN; 271*4882a593Smuzhiyun WPAN_DEV_ASSIGN; 272*4882a593Smuzhiyun __entry->mode = mode; 273*4882a593Smuzhiyun ), 274*4882a593Smuzhiyun TP_printk(WPAN_PHY_PR_FMT ", " WPAN_DEV_PR_FMT 275*4882a593Smuzhiyun ", lbt mode: %s", WPAN_PHY_PR_ARG, 276*4882a593Smuzhiyun WPAN_DEV_PR_ARG, BOOL_TO_STR(__entry->mode)) 277*4882a593Smuzhiyun ); 278*4882a593Smuzhiyun 279*4882a593Smuzhiyun TRACE_EVENT(802154_rdev_set_ackreq_default, 280*4882a593Smuzhiyun TP_PROTO(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, 281*4882a593Smuzhiyun bool ackreq), 282*4882a593Smuzhiyun TP_ARGS(wpan_phy, wpan_dev, ackreq), 283*4882a593Smuzhiyun TP_STRUCT__entry( 284*4882a593Smuzhiyun WPAN_PHY_ENTRY 285*4882a593Smuzhiyun WPAN_DEV_ENTRY 286*4882a593Smuzhiyun __field(bool, ackreq) 287*4882a593Smuzhiyun ), 288*4882a593Smuzhiyun TP_fast_assign( 289*4882a593Smuzhiyun WPAN_PHY_ASSIGN; 290*4882a593Smuzhiyun WPAN_DEV_ASSIGN; 291*4882a593Smuzhiyun __entry->ackreq = ackreq; 292*4882a593Smuzhiyun ), 293*4882a593Smuzhiyun TP_printk(WPAN_PHY_PR_FMT ", " WPAN_DEV_PR_FMT 294*4882a593Smuzhiyun ", ackreq default: %s", WPAN_PHY_PR_ARG, 295*4882a593Smuzhiyun WPAN_DEV_PR_ARG, BOOL_TO_STR(__entry->ackreq)) 296*4882a593Smuzhiyun ); 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun TRACE_EVENT(802154_rdev_return_int, 299*4882a593Smuzhiyun TP_PROTO(struct wpan_phy *wpan_phy, int ret), 300*4882a593Smuzhiyun TP_ARGS(wpan_phy, ret), 301*4882a593Smuzhiyun TP_STRUCT__entry( 302*4882a593Smuzhiyun WPAN_PHY_ENTRY 303*4882a593Smuzhiyun __field(int, ret) 304*4882a593Smuzhiyun ), 305*4882a593Smuzhiyun TP_fast_assign( 306*4882a593Smuzhiyun WPAN_PHY_ASSIGN; 307*4882a593Smuzhiyun __entry->ret = ret; 308*4882a593Smuzhiyun ), 309*4882a593Smuzhiyun TP_printk(WPAN_PHY_PR_FMT ", returned: %d", WPAN_PHY_PR_ARG, 310*4882a593Smuzhiyun __entry->ret) 311*4882a593Smuzhiyun ); 312*4882a593Smuzhiyun 313*4882a593Smuzhiyun #endif /* !__RDEV_CFG802154_OPS_TRACE || TRACE_HEADER_MULTI_READ */ 314*4882a593Smuzhiyun 315*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH 316*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH . 317*4882a593Smuzhiyun #undef TRACE_INCLUDE_FILE 318*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE trace 319*4882a593Smuzhiyun #include <trace/define_trace.h> 320