/* Copyright (c) 2012, 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.
 */

#undef TRACE_SYSTEM
#define TRACE_SYSTEM msm_low_power

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

#include <linux/tracepoint.h>

DECLARE_EVENT_CLASS(msm_pm_enter,

	TP_PROTO(unsigned int cpu, uint32_t latency,
		uint32_t sleep_us, uint32_t wake_up),

	TP_ARGS(cpu, latency, sleep_us, wake_up),

	TP_STRUCT__entry(
		__field(unsigned int, cpu)
		__field(uint32_t, latency)
		__field(uint32_t, sleep_us)
		__field(uint32_t, wake_up)
	),

	TP_fast_assign(
		__entry->cpu = cpu;
		__entry->latency = latency;
		__entry->sleep_us = sleep_us;
		__entry->wake_up = wake_up;
	),

	TP_printk("cpu: %u latency: %uus sleep: %uus wake_up: %u",
		__entry->cpu,
		__entry->latency,
		__entry->sleep_us,
		__entry->wake_up)
);

DEFINE_EVENT(msm_pm_enter, msm_pm_enter_pc,

	TP_PROTO(unsigned int cpu, uint32_t latency,
		uint32_t sleep_us, uint32_t wake_up),

	TP_ARGS(cpu, latency, sleep_us, wake_up)
);

DEFINE_EVENT(msm_pm_enter, msm_pm_enter_ret,

	TP_PROTO(unsigned int cpu, uint32_t latency,
		uint32_t sleep_us, uint32_t wake_up),

	TP_ARGS(cpu, latency, sleep_us, wake_up)
);

DEFINE_EVENT(msm_pm_enter, msm_pm_enter_spc,

	TP_PROTO(unsigned int cpu, uint32_t latency,
		uint32_t sleep_us, uint32_t wake_up),

	TP_ARGS(cpu, latency, sleep_us, wake_up)
);

DEFINE_EVENT(msm_pm_enter, msm_pm_enter_wfi,

	TP_PROTO(unsigned int cpu, uint32_t latency,
		uint32_t sleep_us, uint32_t wake_up),

	TP_ARGS(cpu, latency, sleep_us, wake_up)
);

DECLARE_EVENT_CLASS(msm_pm_exit,

	TP_PROTO(unsigned int cpu, bool success),

	TP_ARGS(cpu, success),

	TP_STRUCT__entry(
		__field(unsigned int , cpu)
		__field(int, success)
	),

	TP_fast_assign(
		__entry->cpu = cpu;
		__entry->success = success;
	),

	TP_printk("cpu:%u success:%d",
			__entry->cpu,
			__entry->success)
);

DEFINE_EVENT(msm_pm_exit, msm_pm_exit_pc,

	TP_PROTO(unsigned int cpu, bool success),

	TP_ARGS(cpu, success)
);

DEFINE_EVENT(msm_pm_exit, msm_pm_exit_ret,

	TP_PROTO(unsigned int cpu, bool success),

	TP_ARGS(cpu, success)
);

DEFINE_EVENT(msm_pm_exit, msm_pm_exit_spc,

	TP_PROTO(unsigned int cpu, bool success),

	TP_ARGS(cpu, success)
);

DEFINE_EVENT(msm_pm_exit, msm_pm_exit_wfi,

	TP_PROTO(unsigned int cpu, bool success),

	TP_ARGS(cpu, success)
);
#endif
#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH mach
#define TRACE_INCLUDE_FILE trace_msm_low_power
#include <trace/define_trace.h>
