/*************************************************************************/ /*!
@File
@Copyright      Copyright (c) Imagination Technologies Ltd. All Rights Reserved
@License        Dual MIT/GPLv2

The contents of this file are subject to the MIT license as set out below.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

Alternatively, the contents of this file may be used under the terms of
the GNU General Public License Version 2 ("GPL") in which case the provisions
of GPL are applicable instead of those above.

If you wish to allow use of your version of this file only under the terms of
GPL, and not to allow others to use your version of this file under the terms
of the MIT license, indicate your decision by deleting the provisions above
and replace them with the notice and other provisions required by GPL as set
out in the file called "GPL-COPYING" included in this distribution. If you do
not delete the provisions above, a recipient may use your version of this file
under the terms of either the MIT license or GPL.

This License is also included in this distribution in the file called
"MIT-COPYING".

EXCEPT AS OTHERWISE STATED IN A NEGOTIATED AGREEMENT: (A) THE SOFTWARE IS
PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE AND NONINFRINGEMENT; AND (B) IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ /**************************************************************************/
#undef TRACE_SYSTEM
#define TRACE_SYSTEM rogue

#if !defined(ROGUE_TRACE_EVENTS_H) || defined(TRACE_HEADER_MULTI_READ)
#define ROGUE_TRACE_EVENTS_H

#include <linux/version.h>
#include <linux/types.h>
#include <linux/tracepoint.h>
#include <linux/time.h>

#define show_secs_from_ns(ns) \
	({ \
		u64 t = ns + (NSEC_PER_USEC / 2); \
		do_div(t, NSEC_PER_SEC); \
		t; \
	})

#define show_usecs_from_ns(ns) \
	({ \
		u64 t = ns + (NSEC_PER_USEC / 2); \
		u32 rem; \
		do_div(t, NSEC_PER_USEC); \
		rem = do_div(t, USEC_PER_SEC); \
	})

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0))
int trace_fence_update_enabled_callback(void);
#else
void trace_fence_update_enabled_callback(void);
#endif
void trace_fence_update_disabled_callback(void);

TRACE_EVENT_FN(rogue_fence_update,

	TP_PROTO(const char *comm, const char *cmd, const char *dm, u32 ctx_id, u32 offset,
		u32 sync_fwaddr, u32 sync_value),

	TP_ARGS(comm, cmd, dm, ctx_id, offset, sync_fwaddr, sync_value),

	TP_STRUCT__entry(
		__string(       comm,           comm            )
		__string(       cmd,            cmd             )
		__string(       dm,             dm              )
		__field(        u32,            ctx_id          )
		__field(        u32,            offset          )
		__field(        u32,            sync_fwaddr     )
		__field(        u32,            sync_value      )
	),

	TP_fast_assign(
		__assign_str(comm, comm);
		__assign_str(cmd, cmd);
		__assign_str(dm, dm);
		__entry->ctx_id = ctx_id;
		__entry->offset = offset;
		__entry->sync_fwaddr = sync_fwaddr;
		__entry->sync_value = sync_value;
	),

	TP_printk("comm=%s cmd=%s dm=%s ctx_id=%lu offset=%lu sync_fwaddr=%#lx sync_value=%#lx",
		__get_str(comm),
		__get_str(cmd),
		__get_str(dm),
		(unsigned long)__entry->ctx_id,
		(unsigned long)__entry->offset,
		(unsigned long)__entry->sync_fwaddr,
		(unsigned long)__entry->sync_value),

	trace_fence_update_enabled_callback,
	trace_fence_update_disabled_callback
);

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0))
int trace_fence_check_enabled_callback(void);
#else
void trace_fence_check_enabled_callback(void);
#endif
void trace_fence_check_disabled_callback(void);

TRACE_EVENT_FN(rogue_fence_check,

	TP_PROTO(const char *comm, const char *cmd, const char *dm, u32 ctx_id, u32 offset,
		u32 sync_fwaddr, u32 sync_value),

	TP_ARGS(comm, cmd, dm, ctx_id, offset, sync_fwaddr, sync_value),

	TP_STRUCT__entry(
		__string(       comm,           comm            )
		__string(       cmd,            cmd             )
		__string(       dm,             dm              )
		__field(        u32,            ctx_id          )
		__field(        u32,            offset          )
		__field(        u32,            sync_fwaddr     )
		__field(        u32,            sync_value      )
	),

	TP_fast_assign(
		__assign_str(comm, comm);
		__assign_str(cmd, cmd);
		__assign_str(dm, dm);
		__entry->ctx_id = ctx_id;
		__entry->offset = offset;
		__entry->sync_fwaddr = sync_fwaddr;
		__entry->sync_value = sync_value;
	),

	TP_printk("comm=%s cmd=%s dm=%s ctx_id=%lu offset=%lu sync_fwaddr=%#lx sync_value=%#lx",
		__get_str(comm),
		__get_str(cmd),
		__get_str(dm),
		(unsigned long)__entry->ctx_id,
		(unsigned long)__entry->offset,
		(unsigned long)__entry->sync_fwaddr,
		(unsigned long)__entry->sync_value),

	trace_fence_check_enabled_callback,
	trace_fence_check_disabled_callback
);

TRACE_EVENT(rogue_job_enqueue,

	TP_PROTO(u32 ctx_id, u32 int_id, u32 ext_id,
	         const char *kick_type),

	TP_ARGS(ctx_id, int_id, ext_id, kick_type),

	TP_STRUCT__entry(
		__field(u32, ctx_id)
		__field(u32, int_id)
		__field(u32, ext_id)
		__string(kick_type, kick_type)
	),

	TP_fast_assign(
		__entry->ctx_id = ctx_id;
		__entry->int_id = int_id;
		__entry->ext_id = ext_id;
		__assign_str(kick_type, kick_type);
	),

	TP_printk("ctx_id=%lu int_id=%lu ext_id=%lu kick_type=%s",
		(unsigned long) __entry->ctx_id,
		(unsigned long) __entry->int_id,
		(unsigned long) __entry->ext_id,
		__get_str(kick_type)
	)
);

TRACE_EVENT(rogue_sched_switch,

	TP_PROTO(const char *work_type, u32 switch_type, u64 timestamp, u32 next_ctx_id,
	         u32 next_prio, u32 next_int_id, u32 next_ext_id),

	TP_ARGS(work_type, switch_type, timestamp, next_ctx_id, next_prio, next_int_id, next_ext_id),

	TP_STRUCT__entry(
		__string(work_type, work_type)
		__field(u32, switch_type)
		__field(u64, timestamp)
		__field(u32, next_ctx_id)
		__field(u32, next_prio)
		__field(u32, next_int_id)
		__field(u32, next_ext_id)
	),

	TP_fast_assign(
		__assign_str(work_type, work_type);
		__entry->switch_type = switch_type;
		__entry->timestamp = timestamp;
		__entry->next_ctx_id = next_ctx_id;
		__entry->next_prio = next_prio;
		__entry->next_int_id = next_int_id;
		__entry->next_ext_id = next_ext_id;
	),

	TP_printk("ts=%llu.%06lu next_ctx_id=%lu next_int_id=%lu next_ext_id=%lu"
		" next_prio=%lu work_type=%s switch_type=%s",
		(unsigned long long) show_secs_from_ns(__entry->timestamp),
		(unsigned long) show_usecs_from_ns(__entry->timestamp),
		(unsigned long) __entry->next_ctx_id,
		(unsigned long) __entry->next_int_id,
		(unsigned long) __entry->next_ext_id,
		(unsigned long) __entry->next_prio,
		__get_str(work_type),
		__print_symbolic(__entry->switch_type,
			/* These values are from ospvr_gputrace.h. */
			{ 1, "begin" },
			{ 2, "end" })
	)
);

TRACE_EVENT(rogue_create_fw_context,

	TP_PROTO(const char *comm, const char *dm, u32 ctx_id),

	TP_ARGS(comm, dm, ctx_id),

	TP_STRUCT__entry(
		__string(       comm,           comm            )
		__string(       dm,             dm              )
		__field(        u32,            ctx_id          )
	),

	TP_fast_assign(
		__assign_str(comm, comm);
		__assign_str(dm, dm);
		__entry->ctx_id = ctx_id;
	),

	TP_printk("comm=%s dm=%s ctx_id=%lu",
		__get_str(comm),
		__get_str(dm),
		(unsigned long)__entry->ctx_id)
);

void PVRGpuTraceEnableUfoCallback(void);
void PVRGpuTraceDisableUfoCallback(void);
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0))
int PVRGpuTraceEnableUfoCallbackWrapper(void);
#else
#define PVRGpuTraceEnableUfoCallbackWrapper \
		PVRGpuTraceEnableUfoCallback
#endif

TRACE_EVENT_FN(rogue_ufo_update,

	TP_PROTO(u64 timestamp, u32 ctx_id, u32 job_id, u32 ext_id, u32 int_id,
	         u32 fwaddr, u32 old_value, u32 new_value),

	TP_ARGS(timestamp, ctx_id, job_id, ext_id, int_id, fwaddr, old_value,
	        new_value),

	TP_STRUCT__entry(
		__field(        u64,            timestamp   )
		__field(        u32,            ctx_id      )
		__field(        u32,            job_id      )
		__field(        u32,            ext_id      )
		__field(        u32,            int_id      )
		__field(        u32,            fwaddr      )
		__field(        u32,            old_value   )
		__field(        u32,            new_value   )
	),

	TP_fast_assign(
		__entry->timestamp = timestamp;
		__entry->ctx_id = ctx_id;
		__entry->job_id = job_id;
		__entry->ext_id = ext_id;
		__entry->int_id = int_id;
		__entry->fwaddr = fwaddr;
		__entry->old_value = old_value;
		__entry->new_value = new_value;
	),

	TP_printk("ts=%llu.%06lu ctx_id=%lu job_id=%lu ext_id=%lu int_id=%lu"
		" fwaddr=%#lx old_value=%#lx new_value=%#lx",
		(unsigned long long)show_secs_from_ns(__entry->timestamp),
		(unsigned long)show_usecs_from_ns(__entry->timestamp),
		(unsigned long)__entry->ctx_id,
		(unsigned long)__entry->job_id,
		(unsigned long)__entry->ext_id,
		(unsigned long)__entry->int_id,
		(unsigned long)__entry->fwaddr,
		(unsigned long)__entry->old_value,
		(unsigned long)__entry->new_value),
	PVRGpuTraceEnableUfoCallbackWrapper,
	PVRGpuTraceDisableUfoCallback
);

TRACE_EVENT_FN(rogue_ufo_check_fail,

	TP_PROTO(u64 timestamp, u32 ctx_id, u32 job_id, u32 ext_id, u32 int_id,
	         u32 fwaddr, u32 value, u32 required),

	TP_ARGS(timestamp, ctx_id, job_id, ext_id, int_id, fwaddr, value, required),

	TP_STRUCT__entry(
		__field(        u64,            timestamp   )
		__field(        u32,            ctx_id      )
		__field(        u32,            job_id      )
		__field(        u32,            ext_id      )
		__field(        u32,            int_id      )
		__field(        u32,            fwaddr      )
		__field(        u32,            value       )
		__field(        u32,            required    )
	),

	TP_fast_assign(
		__entry->timestamp = timestamp;
		__entry->ctx_id = ctx_id;
		__entry->job_id = job_id;
		__entry->ext_id = ext_id;
		__entry->int_id = int_id;
		__entry->fwaddr = fwaddr;
		__entry->value = value;
		__entry->required = required;
	),

	TP_printk("ts=%llu.%06lu ctx_id=%lu job_id=%lu ext_id=%lu int_id=%lu"
		" fwaddr=%#lx value=%#lx required=%#lx",
		(unsigned long long)show_secs_from_ns(__entry->timestamp),
		(unsigned long)show_usecs_from_ns(__entry->timestamp),
		(unsigned long)__entry->ctx_id,
		(unsigned long)__entry->job_id,
		(unsigned long)__entry->ext_id,
		(unsigned long)__entry->int_id,
		(unsigned long)__entry->fwaddr,
		(unsigned long)__entry->value,
		(unsigned long)__entry->required),
	PVRGpuTraceEnableUfoCallbackWrapper,
	PVRGpuTraceDisableUfoCallback
);

TRACE_EVENT_FN(rogue_ufo_pr_check_fail,

	TP_PROTO(u64 timestamp, u32 ctx_id, u32 job_id, u32 ext_id, u32 int_id,
	         u32 fwaddr, u32 value, u32 required),

	TP_ARGS(timestamp, ctx_id, job_id, ext_id, int_id, fwaddr, value, required),

	TP_STRUCT__entry(
		__field(        u64,            timestamp   )
		__field(        u32,            ctx_id      )
		__field(        u32,            job_id      )
		__field(        u32,            ext_id      )
		__field(        u32,            int_id      )
		__field(        u32,            fwaddr      )
		__field(        u32,            value       )
		__field(        u32,            required    )
	),

	TP_fast_assign(
		__entry->timestamp = timestamp;
		__entry->ctx_id = ctx_id;
		__entry->job_id = job_id;
		__entry->ext_id = ext_id;
		__entry->int_id = int_id;
		__entry->fwaddr = fwaddr;
		__entry->value = value;
		__entry->required = required;
	),

	TP_printk("ts=%llu.%06lu ctx_id=%lu job_id=%lu ext_id=%lu int_id=%lu"
		" fwaddr=%#lx value=%#lx required=%#lx",
		(unsigned long long)show_secs_from_ns(__entry->timestamp),
		(unsigned long)show_usecs_from_ns(__entry->timestamp),
		(unsigned long)__entry->ctx_id,
		(unsigned long)__entry->job_id,
		(unsigned long)__entry->ext_id,
		(unsigned long)__entry->int_id,
		(unsigned long)__entry->fwaddr,
		(unsigned long)__entry->value,
		(unsigned long)__entry->required),
	PVRGpuTraceEnableUfoCallbackWrapper,
	PVRGpuTraceDisableUfoCallback
);

TRACE_EVENT_FN(rogue_ufo_check_success,

	TP_PROTO(u64 timestamp, u32 ctx_id, u32 job_id, u32 ext_id, u32 int_id,
	         u32 fwaddr, u32 value),

	TP_ARGS(timestamp, ctx_id, job_id, ext_id, int_id, fwaddr, value),

	TP_STRUCT__entry(
		__field(        u64,            timestamp   )
		__field(        u32,            ctx_id      )
		__field(        u32,            job_id      )
		__field(        u32,            ext_id      )
		__field(        u32,            int_id      )
		__field(        u32,            fwaddr      )
		__field(        u32,            value       )
	),

	TP_fast_assign(
		__entry->timestamp = timestamp;
		__entry->ctx_id = ctx_id;
		__entry->job_id = job_id;
		__entry->ext_id = ext_id;
		__entry->int_id = int_id;
		__entry->fwaddr = fwaddr;
		__entry->value = value;
	),

	TP_printk("ts=%llu.%06lu ctx_id=%lu job_id=%lu ext_id=%lu int_id=%lu"
		" fwaddr=%#lx value=%#lx",
		(unsigned long long)show_secs_from_ns(__entry->timestamp),
		(unsigned long)show_usecs_from_ns(__entry->timestamp),
		(unsigned long)__entry->ctx_id,
		(unsigned long)__entry->job_id,
		(unsigned long)__entry->ext_id,
		(unsigned long)__entry->int_id,
		(unsigned long)__entry->fwaddr,
		(unsigned long)__entry->value),
	PVRGpuTraceEnableUfoCallbackWrapper,
	PVRGpuTraceDisableUfoCallback
);

TRACE_EVENT_FN(rogue_ufo_pr_check_success,

	TP_PROTO(u64 timestamp, u32 ctx_id, u32 job_id, u32 ext_id, u32 int_id,
	         u32 fwaddr, u32 value),

	TP_ARGS(timestamp, ctx_id, job_id, ext_id, int_id, fwaddr, value),

	TP_STRUCT__entry(
		__field(        u64,            timestamp   )
		__field(        u32,            ctx_id      )
		__field(        u32,            job_id      )
		__field(        u32,            ext_id      )
		__field(        u32,            int_id      )
		__field(        u32,            fwaddr      )
		__field(        u32,            value       )
	),

	TP_fast_assign(
		__entry->timestamp = timestamp;
		__entry->ctx_id = ctx_id;
		__entry->job_id = job_id;
		__entry->ext_id = ext_id;
		__entry->int_id = int_id;
		__entry->fwaddr = fwaddr;
		__entry->value = value;
	),

	TP_printk("ts=%llu.%06lu ctx_id=%lu job_id=%lu ext_id=%lu int_id=%lu"
		" fwaddr=%#lx value=%#lx",
		(unsigned long long)show_secs_from_ns(__entry->timestamp),
		(unsigned long)show_usecs_from_ns(__entry->timestamp),
		(unsigned long)__entry->ctx_id,
		(unsigned long)__entry->job_id,
		(unsigned long)__entry->ext_id,
		(unsigned long)__entry->int_id,
		(unsigned long)__entry->fwaddr,
		(unsigned long)__entry->value),
	PVRGpuTraceEnableUfoCallbackWrapper,
	PVRGpuTraceDisableUfoCallback
);

TRACE_EVENT(rogue_events_lost,

	TP_PROTO(u32 event_source, u32 last_ordinal, u32 curr_ordinal),

	TP_ARGS(event_source, last_ordinal, curr_ordinal),

	TP_STRUCT__entry(
		__field(        u32,            event_source     )
		__field(        u32,            last_ordinal     )
		__field(        u32,            curr_ordinal     )
	),

	TP_fast_assign(
		__entry->event_source = event_source;
		__entry->last_ordinal = last_ordinal;
		__entry->curr_ordinal = curr_ordinal;
	),

	TP_printk("event_source=%s last_ordinal=%u curr_ordinal=%u",
		__print_symbolic(__entry->event_source, {0, "GPU"}, {1, "Host"}),
		__entry->last_ordinal,
		__entry->curr_ordinal)
);

void PVRGpuTraceEnableFirmwareActivityCallback(void);
void PVRGpuTraceDisableFirmwareActivityCallback(void);
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0))
int PVRGpuTraceEnableFirmwareActivityCallbackWrapper(void);
#else
#define PVRGpuTraceEnableFirmwareActivityCallbackWrapper \
		PVRGpuTraceEnableFirmwareActivityCallback
#endif

TRACE_EVENT_FN(rogue_firmware_activity,

	TP_PROTO(u64 timestamp, const char *task, u32 fw_event),

	TP_ARGS(timestamp, task, fw_event),

	TP_STRUCT__entry(
		__field(        u64,            timestamp       )
		__string(       task,           task            )
		__field(        u32,            fw_event        )
	),

	TP_fast_assign(
		__entry->timestamp = timestamp;
		__assign_str(task, task);
		__entry->fw_event = fw_event;
	),

	TP_printk("ts=%llu.%06lu task=%s event=%s",
		(unsigned long long)show_secs_from_ns(__entry->timestamp),
		(unsigned long)show_usecs_from_ns(__entry->timestamp),
		__get_str(task),
		__print_symbolic(__entry->fw_event,
			/* These values are from ospvr_gputrace.h. */
			{ 1, "begin" },
			{ 2, "end" })),

	PVRGpuTraceEnableFirmwareActivityCallbackWrapper,
	PVRGpuTraceDisableFirmwareActivityCallback
);

#undef show_secs_from_ns
#undef show_usecs_from_ns

#endif /* ROGUE_TRACE_EVENTS_H */

#undef TRACE_INCLUDE_PATH
#undef TRACE_INCLUDE_FILE
#define TRACE_INCLUDE_PATH .

/* This is needed because the name of this file doesn't match TRACE_SYSTEM. */
#define TRACE_INCLUDE_FILE rogue_trace_events

/* This part must be outside protection */
#include <trace/define_trace.h>
