| /* Copyright (c) 2011-2012, Code Aurora Forum. 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(_KGSL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) |
| #define _KGSL_TRACE_H |
| |
| #undef TRACE_SYSTEM |
| #define TRACE_SYSTEM kgsl |
| #undef TRACE_INCLUDE_PATH |
| #define TRACE_INCLUDE_PATH . |
| #undef TRACE_INCLUDE_FILE |
| #define TRACE_INCLUDE_FILE kgsl_trace |
| |
| #include <linux/tracepoint.h> |
| |
| struct kgsl_device; |
| struct kgsl_ringbuffer_issueibcmds; |
| struct kgsl_device_waittimestamp; |
| |
| /* |
| * Tracepoint for kgsl issue ib commands |
| */ |
| TRACE_EVENT(kgsl_issueibcmds, |
| |
| TP_PROTO(struct kgsl_device *device, |
| struct kgsl_ringbuffer_issueibcmds *cmd, int result), |
| |
| TP_ARGS(device, cmd, result), |
| |
| TP_STRUCT__entry( |
| __string(device_name, device->name) |
| __field(unsigned int, drawctxt_id) |
| __field(unsigned int, ibdesc_addr) |
| __field(unsigned int, numibs) |
| __field(unsigned int, timestamp) |
| __field(unsigned int, flags) |
| __field(int, result) |
| ), |
| |
| TP_fast_assign( |
| __assign_str(device_name, device->name); |
| __entry->drawctxt_id = cmd->drawctxt_id; |
| __entry->ibdesc_addr = cmd->ibdesc_addr; |
| __entry->numibs = cmd->numibs; |
| __entry->timestamp = cmd->timestamp; |
| __entry->flags = cmd->flags; |
| __entry->result = result; |
| ), |
| |
| TP_printk( |
| "d_name=%s ctx=%u ib=%u numibs=%u timestamp=%u " |
| "flags=%u result=%d", |
| __get_str(device_name), |
| __entry->drawctxt_id, |
| __entry->ibdesc_addr, |
| __entry->numibs, |
| __entry->timestamp, |
| __entry->flags, |
| __entry->result |
| ) |
| ); |
| |
| /* |
| * Tracepoint for kgsl readtimestamp |
| */ |
| TRACE_EVENT(kgsl_readtimestamp, |
| |
| TP_PROTO(struct kgsl_device *device, |
| struct kgsl_cmdstream_readtimestamp *cmd), |
| |
| TP_ARGS(device, cmd), |
| |
| TP_STRUCT__entry( |
| __string(device_name, device->name) |
| __field(unsigned int, type) |
| __field(unsigned int, timestamp) |
| ), |
| |
| TP_fast_assign( |
| __assign_str(device_name, device->name); |
| __entry->type = cmd->type; |
| __entry->timestamp = cmd->timestamp; |
| ), |
| |
| TP_printk( |
| "d_name=%s type=%u timestamp=%u", |
| __get_str(device_name), |
| __entry->type, |
| __entry->timestamp |
| ) |
| ); |
| |
| /* |
| * Tracepoint for kgsl waittimestamp entry |
| */ |
| TRACE_EVENT(kgsl_waittimestamp_entry, |
| |
| TP_PROTO(struct kgsl_device *device, |
| struct kgsl_device_waittimestamp *cmd), |
| |
| TP_ARGS(device, cmd), |
| |
| TP_STRUCT__entry( |
| __string(device_name, device->name) |
| __field(unsigned int, timestamp) |
| __field(unsigned int, timeout) |
| ), |
| |
| TP_fast_assign( |
| __assign_str(device_name, device->name); |
| __entry->timestamp = cmd->timestamp; |
| __entry->timeout = cmd->timeout; |
| ), |
| |
| TP_printk( |
| "d_name=%s timestamp=%u timeout=%u", |
| __get_str(device_name), |
| __entry->timestamp, |
| __entry->timeout |
| ) |
| ); |
| |
| /* |
| * Tracepoint for kgsl waittimestamp exit |
| */ |
| TRACE_EVENT(kgsl_waittimestamp_exit, |
| |
| TP_PROTO(struct kgsl_device *device, int result), |
| |
| TP_ARGS(device, result), |
| |
| TP_STRUCT__entry( |
| __string(device_name, device->name) |
| __field(int, result) |
| ), |
| |
| TP_fast_assign( |
| __assign_str(device_name, device->name); |
| __entry->result = result; |
| ), |
| |
| TP_printk( |
| "d_name=%s result=%d", |
| __get_str(device_name), |
| __entry->result |
| ) |
| ); |
| |
| DECLARE_EVENT_CLASS(kgsl_pwr_template, |
| TP_PROTO(struct kgsl_device *device, int on), |
| |
| TP_ARGS(device, on), |
| |
| TP_STRUCT__entry( |
| __string(device_name, device->name) |
| __field(int, on) |
| ), |
| |
| TP_fast_assign( |
| __assign_str(device_name, device->name); |
| __entry->on = on; |
| ), |
| |
| TP_printk( |
| "d_name=%s %s", |
| __get_str(device_name), |
| __entry->on ? "on" : "off" |
| ) |
| ); |
| |
| DEFINE_EVENT(kgsl_pwr_template, kgsl_clk, |
| TP_PROTO(struct kgsl_device *device, int on), |
| TP_ARGS(device, on) |
| ); |
| |
| DEFINE_EVENT(kgsl_pwr_template, kgsl_irq, |
| TP_PROTO(struct kgsl_device *device, int on), |
| TP_ARGS(device, on) |
| ); |
| |
| DEFINE_EVENT(kgsl_pwr_template, kgsl_bus, |
| TP_PROTO(struct kgsl_device *device, int on), |
| TP_ARGS(device, on) |
| ); |
| |
| DEFINE_EVENT(kgsl_pwr_template, kgsl_rail, |
| TP_PROTO(struct kgsl_device *device, int on), |
| TP_ARGS(device, on) |
| ); |
| |
| TRACE_EVENT(kgsl_pwrlevel, |
| |
| TP_PROTO(struct kgsl_device *device, unsigned int pwrlevel, |
| unsigned int freq), |
| |
| TP_ARGS(device, pwrlevel, freq), |
| |
| TP_STRUCT__entry( |
| __string(device_name, device->name) |
| __field(unsigned int, pwrlevel) |
| __field(unsigned int, freq) |
| ), |
| |
| TP_fast_assign( |
| __assign_str(device_name, device->name); |
| __entry->pwrlevel = pwrlevel; |
| __entry->freq = freq; |
| ), |
| |
| TP_printk( |
| "d_name=%s pwrlevel=%d freq=%d", |
| __get_str(device_name), |
| __entry->pwrlevel, |
| __entry->freq |
| ) |
| ); |
| |
| DECLARE_EVENT_CLASS(kgsl_pwrstate_template, |
| TP_PROTO(struct kgsl_device *device, unsigned int state), |
| |
| TP_ARGS(device, state), |
| |
| TP_STRUCT__entry( |
| __string(device_name, device->name) |
| __field(unsigned int, state) |
| ), |
| |
| TP_fast_assign( |
| __assign_str(device_name, device->name); |
| __entry->state = state; |
| ), |
| |
| TP_printk( |
| "d_name=%s %s", |
| __get_str(device_name), |
| kgsl_pwrstate_to_str(__entry->state) |
| ) |
| ); |
| |
| DEFINE_EVENT(kgsl_pwrstate_template, kgsl_pwr_set_state, |
| TP_PROTO(struct kgsl_device *device, unsigned int state), |
| TP_ARGS(device, state) |
| ); |
| |
| DEFINE_EVENT(kgsl_pwrstate_template, kgsl_pwr_request_state, |
| TP_PROTO(struct kgsl_device *device, unsigned int state), |
| TP_ARGS(device, state) |
| ); |
| |
| TRACE_EVENT(kgsl_mem_alloc, |
| |
| TP_PROTO(struct kgsl_mem_entry *mem_entry), |
| |
| TP_ARGS(mem_entry), |
| |
| TP_STRUCT__entry( |
| __field(unsigned int, gpuaddr) |
| __field(unsigned int, size) |
| ), |
| |
| TP_fast_assign( |
| __entry->gpuaddr = mem_entry->memdesc.gpuaddr; |
| __entry->size = mem_entry->memdesc.size; |
| ), |
| |
| TP_printk( |
| "gpuaddr=0x%08x size=%d", |
| __entry->gpuaddr, __entry->size |
| ) |
| ); |
| |
| TRACE_EVENT(kgsl_mem_map, |
| |
| TP_PROTO(struct kgsl_mem_entry *mem_entry, int fd), |
| |
| TP_ARGS(mem_entry, fd), |
| |
| TP_STRUCT__entry( |
| __field(unsigned int, gpuaddr) |
| __field(unsigned int, size) |
| __field(int, fd) |
| __field(int, type) |
| ), |
| |
| TP_fast_assign( |
| __entry->gpuaddr = mem_entry->memdesc.gpuaddr; |
| __entry->size = mem_entry->memdesc.size; |
| __entry->fd = fd; |
| __entry->type = mem_entry->memtype; |
| ), |
| |
| TP_printk( |
| "gpuaddr=0x%08x size=%d type=%d fd=%d", |
| __entry->gpuaddr, __entry->size, |
| __entry->type, __entry->fd |
| ) |
| ); |
| |
| TRACE_EVENT(kgsl_mem_free, |
| |
| TP_PROTO(struct kgsl_mem_entry *mem_entry), |
| |
| TP_ARGS(mem_entry), |
| |
| TP_STRUCT__entry( |
| __field(unsigned int, gpuaddr) |
| __field(unsigned int, size) |
| __field(int, type) |
| __field(int, fd) |
| ), |
| |
| TP_fast_assign( |
| __entry->gpuaddr = mem_entry->memdesc.gpuaddr; |
| __entry->size = mem_entry->memdesc.size; |
| __entry->type = mem_entry->memtype; |
| ), |
| |
| TP_printk( |
| "gpuaddr=0x%08x size=%d type=%d", |
| __entry->gpuaddr, __entry->size, __entry->type |
| ) |
| ); |
| |
| DECLARE_EVENT_CLASS(kgsl_mem_timestamp_template, |
| |
| TP_PROTO(struct kgsl_mem_entry *mem_entry, unsigned int curr_ts), |
| |
| TP_ARGS(mem_entry, curr_ts), |
| |
| TP_STRUCT__entry( |
| __field(unsigned int, gpuaddr) |
| __field(unsigned int, size) |
| __field(int, type) |
| __field(unsigned int, drawctxt_id) |
| __field(unsigned int, curr_ts) |
| __field(unsigned int, free_ts) |
| ), |
| |
| TP_fast_assign( |
| __entry->gpuaddr = mem_entry->memdesc.gpuaddr; |
| __entry->size = mem_entry->memdesc.size; |
| __entry->drawctxt_id = 1337; |
| __entry->type = mem_entry->memtype; |
| __entry->curr_ts = curr_ts; |
| __entry->free_ts = mem_entry->free_timestamp; |
| ), |
| |
| TP_printk( |
| "gpuaddr=0x%08x size=%d type=%d ctx=%u curr_ts=0x%08x free_ts=0x%08x", |
| __entry->gpuaddr, __entry->size, __entry->type, |
| __entry->drawctxt_id, __entry->curr_ts, __entry->free_ts |
| ) |
| ); |
| |
| DEFINE_EVENT(kgsl_mem_timestamp_template, kgsl_mem_timestamp_queue, |
| TP_PROTO(struct kgsl_mem_entry *mem_entry, unsigned int curr_ts), |
| TP_ARGS(mem_entry, curr_ts) |
| ); |
| |
| DEFINE_EVENT(kgsl_mem_timestamp_template, kgsl_mem_timestamp_free, |
| TP_PROTO(struct kgsl_mem_entry *mem_entry, unsigned int curr_ts), |
| TP_ARGS(mem_entry, curr_ts) |
| ); |
| |
| |
| #endif /* _KGSL_TRACE_H */ |
| |
| /* This part must be outside protection */ |
| #include <trace/define_trace.h> |