283 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.4 */5 6#undef TRACE_SYSTEM7#define TRACE_SYSTEM mhi_host8 9#if !defined(_TRACE_EVENT_MHI_HOST_H) || defined(TRACE_HEADER_MULTI_READ)10#define _TRACE_EVENT_MHI_HOST_H11 12#include <linux/tracepoint.h>13#include <linux/trace_seq.h>14#include "../common.h"15#include "internal.h"16 17#undef mhi_state18#undef mhi_state_end19 20#define mhi_state(a, b) TRACE_DEFINE_ENUM(MHI_STATE_##a);21#define mhi_state_end(a, b) TRACE_DEFINE_ENUM(MHI_STATE_##a);22 23MHI_STATE_LIST24 25#undef mhi_state26#undef mhi_state_end27 28#define mhi_state(a, b) { MHI_STATE_##a, b },29#define mhi_state_end(a, b) { MHI_STATE_##a, b }30 31#undef mhi_pm_state32#undef mhi_pm_state_end33 34#define mhi_pm_state(a, b) TRACE_DEFINE_ENUM(MHI_PM_STATE_##a);35#define mhi_pm_state_end(a, b) TRACE_DEFINE_ENUM(MHI_PM_STATE_##a);36 37MHI_PM_STATE_LIST38 39#undef mhi_pm_state40#undef mhi_pm_state_end41 42#define mhi_pm_state(a, b) { MHI_PM_STATE_##a, b },43#define mhi_pm_state_end(a, b) { MHI_PM_STATE_##a, b }44 45#undef mhi_ee46#undef mhi_ee_end47 48#define mhi_ee(a, b) TRACE_DEFINE_ENUM(MHI_EE_##a);49#define mhi_ee_end(a, b) TRACE_DEFINE_ENUM(MHI_EE_##a);50 51MHI_EE_LIST52 53#undef mhi_ee54#undef mhi_ee_end55 56#define mhi_ee(a, b) { MHI_EE_##a, b },57#define mhi_ee_end(a, b) { MHI_EE_##a, b }58 59#undef ch_state_type60#undef ch_state_type_end61 62#define ch_state_type(a, b) TRACE_DEFINE_ENUM(MHI_CH_STATE_TYPE_##a);63#define ch_state_type_end(a, b) TRACE_DEFINE_ENUM(MHI_CH_STATE_TYPE_##a);64 65MHI_CH_STATE_TYPE_LIST66 67#undef ch_state_type68#undef ch_state_type_end69 70#define ch_state_type(a, b) { MHI_CH_STATE_TYPE_##a, b },71#define ch_state_type_end(a, b) { MHI_CH_STATE_TYPE_##a, b }72 73#undef dev_st_trans74#undef dev_st_trans_end75 76#define dev_st_trans(a, b) TRACE_DEFINE_ENUM(DEV_ST_TRANSITION_##a);77#define dev_st_trans_end(a, b) TRACE_DEFINE_ENUM(DEV_ST_TRANSITION_##a);78 79DEV_ST_TRANSITION_LIST80 81#undef dev_st_trans82#undef dev_st_trans_end83 84#define dev_st_trans(a, b) { DEV_ST_TRANSITION_##a, b },85#define dev_st_trans_end(a, b) { DEV_ST_TRANSITION_##a, b }86 87#define TPS(x) tracepoint_string(x)88 89TRACE_EVENT(mhi_gen_tre,90 91 TP_PROTO(struct mhi_controller *mhi_cntrl, struct mhi_chan *mhi_chan,92 struct mhi_ring_element *mhi_tre),93 94 TP_ARGS(mhi_cntrl, mhi_chan, mhi_tre),95 96 TP_STRUCT__entry(97 __string(name, mhi_cntrl->mhi_dev->name)98 __field(int, ch_num)99 __field(void *, wp)100 __field(__le64, tre_ptr)101 __field(__le32, dword0)102 __field(__le32, dword1)103 ),104 105 TP_fast_assign(106 __assign_str(name);107 __entry->ch_num = mhi_chan->chan;108 __entry->wp = mhi_tre;109 __entry->tre_ptr = mhi_tre->ptr;110 __entry->dword0 = mhi_tre->dword[0];111 __entry->dword1 = mhi_tre->dword[1];112 ),113 114 TP_printk("%s: Chan: %d TRE: 0x%p TRE buf: 0x%llx DWORD0: 0x%08x DWORD1: 0x%08x\n",115 __get_str(name), __entry->ch_num, __entry->wp, __entry->tre_ptr,116 __entry->dword0, __entry->dword1)117);118 119TRACE_EVENT(mhi_intvec_states,120 121 TP_PROTO(struct mhi_controller *mhi_cntrl, int dev_ee, int dev_state),122 123 TP_ARGS(mhi_cntrl, dev_ee, dev_state),124 125 TP_STRUCT__entry(126 __string(name, mhi_cntrl->mhi_dev->name)127 __field(int, local_ee)128 __field(int, state)129 __field(int, dev_ee)130 __field(int, dev_state)131 ),132 133 TP_fast_assign(134 __assign_str(name);135 __entry->local_ee = mhi_cntrl->ee;136 __entry->state = mhi_cntrl->dev_state;137 __entry->dev_ee = dev_ee;138 __entry->dev_state = dev_state;139 ),140 141 TP_printk("%s: Local EE: %s State: %s Device EE: %s Dev State: %s\n",142 __get_str(name),143 __print_symbolic(__entry->local_ee, MHI_EE_LIST),144 __print_symbolic(__entry->state, MHI_STATE_LIST),145 __print_symbolic(__entry->dev_ee, MHI_EE_LIST),146 __print_symbolic(__entry->dev_state, MHI_STATE_LIST))147);148 149TRACE_EVENT(mhi_tryset_pm_state,150 151 TP_PROTO(struct mhi_controller *mhi_cntrl, int pm_state),152 153 TP_ARGS(mhi_cntrl, pm_state),154 155 TP_STRUCT__entry(156 __string(name, mhi_cntrl->mhi_dev->name)157 __field(int, pm_state)158 ),159 160 TP_fast_assign(161 __assign_str(name);162 if (pm_state)163 pm_state = __fls(pm_state);164 __entry->pm_state = pm_state;165 ),166 167 TP_printk("%s: PM state: %s\n", __get_str(name),168 __print_symbolic(__entry->pm_state, MHI_PM_STATE_LIST))169);170 171DECLARE_EVENT_CLASS(mhi_process_event_ring,172 173 TP_PROTO(struct mhi_controller *mhi_cntrl, struct mhi_ring_element *rp),174 175 TP_ARGS(mhi_cntrl, rp),176 177 TP_STRUCT__entry(178 __string(name, mhi_cntrl->mhi_dev->name)179 __field(__le32, dword0)180 __field(__le32, dword1)181 __field(int, state)182 __field(__le64, ptr)183 __field(void *, rp)184 ),185 186 TP_fast_assign(187 __assign_str(name);188 __entry->rp = rp;189 __entry->ptr = rp->ptr;190 __entry->dword0 = rp->dword[0];191 __entry->dword1 = rp->dword[1];192 __entry->state = MHI_TRE_GET_EV_STATE(rp);193 ),194 195 TP_printk("%s: TRE: 0x%p TRE buf: 0x%llx DWORD0: 0x%08x DWORD1: 0x%08x State: %s\n",196 __get_str(name), __entry->rp, __entry->ptr, __entry->dword0,197 __entry->dword1, __print_symbolic(__entry->state, MHI_STATE_LIST))198);199 200DEFINE_EVENT(mhi_process_event_ring, mhi_data_event,201 202 TP_PROTO(struct mhi_controller *mhi_cntrl, struct mhi_ring_element *rp),203 204 TP_ARGS(mhi_cntrl, rp)205);206 207DEFINE_EVENT(mhi_process_event_ring, mhi_ctrl_event,208 209 TP_PROTO(struct mhi_controller *mhi_cntrl, struct mhi_ring_element *rp),210 211 TP_ARGS(mhi_cntrl, rp)212);213 214DECLARE_EVENT_CLASS(mhi_update_channel_state,215 216 TP_PROTO(struct mhi_controller *mhi_cntrl, struct mhi_chan *mhi_chan, int state,217 const char *reason),218 219 TP_ARGS(mhi_cntrl, mhi_chan, state, reason),220 221 TP_STRUCT__entry(222 __string(name, mhi_cntrl->mhi_dev->name)223 __field(int, ch_num)224 __field(int, state)225 __field(const char *, reason)226 ),227 228 TP_fast_assign(229 __assign_str(name);230 __entry->ch_num = mhi_chan->chan;231 __entry->state = state;232 __entry->reason = reason;233 ),234 235 TP_printk("%s: chan%d: %s state to: %s\n",236 __get_str(name), __entry->ch_num, __entry->reason,237 __print_symbolic(__entry->state, MHI_CH_STATE_TYPE_LIST))238);239 240DEFINE_EVENT(mhi_update_channel_state, mhi_channel_command_start,241 242 TP_PROTO(struct mhi_controller *mhi_cntrl, struct mhi_chan *mhi_chan, int state,243 const char *reason),244 245 TP_ARGS(mhi_cntrl, mhi_chan, state, reason)246);247 248DEFINE_EVENT(mhi_update_channel_state, mhi_channel_command_end,249 250 TP_PROTO(struct mhi_controller *mhi_cntrl, struct mhi_chan *mhi_chan, int state,251 const char *reason),252 253 TP_ARGS(mhi_cntrl, mhi_chan, state, reason)254);255 256TRACE_EVENT(mhi_pm_st_transition,257 258 TP_PROTO(struct mhi_controller *mhi_cntrl, int state),259 260 TP_ARGS(mhi_cntrl, state),261 262 TP_STRUCT__entry(263 __string(name, mhi_cntrl->mhi_dev->name)264 __field(int, state)265 ),266 267 TP_fast_assign(268 __assign_str(name);269 __entry->state = state;270 ),271 272 TP_printk("%s: Handling state transition: %s\n", __get_str(name),273 __print_symbolic(__entry->state, DEV_ST_TRANSITION_LIST))274);275 276#endif277#undef TRACE_INCLUDE_PATH278#define TRACE_INCLUDE_PATH ../../drivers/bus/mhi/host279#undef TRACE_INCLUDE_FILE280#define TRACE_INCLUDE_FILE trace281 282#include <trace/define_trace.h>283