/*
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 *
 * Copyright (c) 2014 Imagination Technologies Ltd.
 * Author: Markos Chandras <markos.chandras@imgtec.com>
 */

#ifndef __ASM_MIPS_R2_TO_R6_EMUL_H
#define __ASM_MIPS_R2_TO_R6_EMUL_H

struct mips_r2_emulator_stats {
	u64 movs;
	u64 hilo;
	u64 muls;
	u64 divs;
	u64 dsps;
	u64 bops;
	u64 traps;
	u64 fpus;
	u64 loads;
	u64 stores;
	u64 llsc;
	u64 dsemul;
};

struct mips_r2br_emulator_stats {
	u64 jrs;
	u64 bltzl;
	u64 bgezl;
	u64 bltzll;
	u64 bgezll;
	u64 bltzall;
	u64 bgezall;
	u64 bltzal;
	u64 bgezal;
	u64 beql;
	u64 bnel;
	u64 blezl;
	u64 bgtzl;
};

#ifdef CONFIG_DEBUG_FS

#define MIPS_R2_STATS(M)						\
do {									\
	u32 nir;							\
	int err;							\
									\
	preempt_disable();						\
	__this_cpu_inc(mipsr2emustats.M);				\
	err = __get_user(nir, (u32 __user *)regs->cp0_epc);		\
	if (!err) {							\
		if (nir == BREAK_MATH(0))				\
			__this_cpu_inc(mipsr2bdemustats.M);		\
	}								\
	preempt_enable();						\
} while (0)

#define MIPS_R2BR_STATS(M)					\
do {								\
	preempt_disable();					\
	__this_cpu_inc(mipsr2bremustats.M);			\
	preempt_enable();					\
} while (0)

#else

#define MIPS_R2_STATS(M)          do { } while (0)
#define MIPS_R2BR_STATS(M)        do { } while (0)

#endif /* CONFIG_DEBUG_FS */

struct r2_decoder_table {
	u32     mask;
	u32     code;
	int     (*func)(struct pt_regs *regs, u32 inst);
};


extern void do_trap_or_bp(struct pt_regs *regs, unsigned int code, int si_code,
			  const char *str);

#ifndef CONFIG_MIPSR2_TO_R6_EMULATOR
static int mipsr2_emulation;
static inline int mipsr2_decoder(struct pt_regs *regs, u32 inst,
				 unsigned long *fcr31)
{
	return 0;
};
#else
/* MIPS R2 Emulator ON/OFF */
extern int mipsr2_emulation;
extern int mipsr2_decoder(struct pt_regs *regs, u32 inst,
			  unsigned long *fcr31);
#endif /* CONFIG_MIPSR2_TO_R6_EMULATOR */

#define NO_R6EMU	(cpu_has_mips_r6 && !mipsr2_emulation)

#endif /* __ASM_MIPS_R2_TO_R6_EMUL_H */
