/* Copyright (c) 2014-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and * only version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #if !defined(_SDE_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) #define _SDE_TRACE_H_ #include #include #include #undef TRACE_SYSTEM #define TRACE_SYSTEM sde #undef TRACE_INCLUDE_FILE #define TRACE_INCLUDE_FILE sde_trace TRACE_EVENT(sde_perf_set_qos_luts, TP_PROTO(u32 pnum, u32 fmt, bool rt, u32 fl, u32 lut, bool linear), TP_ARGS(pnum, fmt, rt, fl, lut, linear), TP_STRUCT__entry( __field(u32, pnum) __field(u32, fmt) __field(bool, rt) __field(u32, fl) __field(u32, lut) __field(bool, linear) ), TP_fast_assign( __entry->pnum = pnum; __entry->fmt = fmt; __entry->rt = rt; __entry->fl = fl; __entry->lut = lut; __entry->linear = linear; ), TP_printk("pnum=%d fmt=%x rt=%d fl=%d lut=0x%x lin=%d", __entry->pnum, __entry->fmt, __entry->rt, __entry->fl, __entry->lut, __entry->linear) ); TRACE_EVENT(sde_perf_set_danger_luts, TP_PROTO(u32 pnum, u32 fmt, u32 mode, u32 danger_lut, u32 safe_lut), TP_ARGS(pnum, fmt, mode, danger_lut, safe_lut), TP_STRUCT__entry( __field(u32, pnum) __field(u32, fmt) __field(u32, mode) __field(u32, danger_lut) __field(u32, safe_lut) ), TP_fast_assign( __entry->pnum = pnum; __entry->fmt = fmt; __entry->mode = mode; __entry->danger_lut = danger_lut; __entry->safe_lut = safe_lut; ), TP_printk("pnum=%d fmt=%x mode=%d luts[0x%x, 0x%x]", __entry->pnum, __entry->fmt, __entry->mode, __entry->danger_lut, __entry->safe_lut) ); TRACE_EVENT(sde_perf_set_ot, TP_PROTO(u32 pnum, u32 xin_id, u32 rd_lim, u32 vbif_idx), TP_ARGS(pnum, xin_id, rd_lim, vbif_idx), TP_STRUCT__entry( __field(u32, pnum) __field(u32, xin_id) __field(u32, rd_lim) __field(u32, vbif_idx) ), TP_fast_assign( __entry->pnum = pnum; __entry->xin_id = xin_id; __entry->rd_lim = rd_lim; __entry->vbif_idx = vbif_idx; ), TP_printk("pnum:%d xin_id:%d ot:%d vbif:%d", __entry->pnum, __entry->xin_id, __entry->rd_lim, __entry->vbif_idx) ) TRACE_EVENT(sde_perf_update_bus, TP_PROTO(int client, unsigned long long ab_quota, unsigned long long ib_quota), TP_ARGS(client, ab_quota, ib_quota), TP_STRUCT__entry( __field(int, client) __field(u64, ab_quota) __field(u64, ib_quota) ), TP_fast_assign( __entry->client = client; __entry->ab_quota = ab_quota; __entry->ib_quota = ib_quota; ), TP_printk("Request client:%d ab=%llu ib=%llu", __entry->client, __entry->ab_quota, __entry->ib_quota) ) TRACE_EVENT(sde_cmd_release_bw, TP_PROTO(u32 crtc_id), TP_ARGS(crtc_id), TP_STRUCT__entry( __field(u32, crtc_id) ), TP_fast_assign( __entry->crtc_id = crtc_id; ), TP_printk("crtc:%d", __entry->crtc_id) ); TRACE_EVENT(sde_encoder_underrun, TP_PROTO(u32 enc_id, u32 underrun_cnt), TP_ARGS(enc_id, underrun_cnt), TP_STRUCT__entry( __field(u32, enc_id) __field(u32, underrun_cnt) ), TP_fast_assign( __entry->enc_id = enc_id; __entry->underrun_cnt = underrun_cnt; ), TP_printk("enc:%d underrun_cnt:%d", __entry->enc_id, __entry->underrun_cnt) ); TRACE_EVENT(sde_mark_write, TP_PROTO(int pid, const char *name, bool trace_begin), TP_ARGS(pid, name, trace_begin), TP_STRUCT__entry( __field(int, pid) __string(trace_name, name) __field(bool, trace_begin) ), TP_fast_assign( __entry->pid = pid; __assign_str(trace_name, name); __entry->trace_begin = trace_begin; ), TP_printk("%s|%d|%s", __entry->trace_begin ? "B" : "E", __entry->pid, __get_str(trace_name)) ) TRACE_EVENT(sde_trace_counter, TP_PROTO(int pid, char *name, int value), TP_ARGS(pid, name, value), TP_STRUCT__entry( __field(int, pid) __string(counter_name, name) __field(int, value) ), TP_fast_assign( __entry->pid = current->tgid; __assign_str(counter_name, name); __entry->value = value; ), TP_printk("%d|%s|%d", __entry->pid, __get_str(counter_name), __entry->value) ) TRACE_EVENT(sde_evtlog, TP_PROTO(const char *tag, u32 tag_id, u64 value1, u64 value2), TP_ARGS(tag, tag_id, value1, value2), TP_STRUCT__entry( __field(int, pid) __string(evtlog_tag, tag) __field(u32, tag_id) __field(u64, value1) __field(u64, value2) ), TP_fast_assign( __entry->pid = current->tgid; __assign_str(evtlog_tag, tag); __entry->tag_id = tag_id; __entry->value1 = value1; __entry->value2 = value2; ), TP_printk("%d|%s:%d|%llu|%llu", __entry->pid, __get_str(evtlog_tag), __entry->tag_id, __entry->value1, __entry->value2) ) #define SDE_ATRACE_END(name) trace_sde_mark_write(current->tgid, name, 0) #define SDE_ATRACE_BEGIN(name) trace_sde_mark_write(current->tgid, name, 1) #define SDE_ATRACE_FUNC() SDE_ATRACE_BEGIN(__func__) #define SDE_ATRACE_INT(name, value) \ trace_sde_trace_counter(current->tgid, name, value) #endif /* _SDE_TRACE_H_ */ /* This part must be outside protection */ #undef TRACE_INCLUDE_PATH #define TRACE_INCLUDE_PATH . #include