162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ */
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci#ifndef _RISCV_KERNEL_PROBES_SIMULATE_INSN_H
462306a36Sopenharmony_ci#define _RISCV_KERNEL_PROBES_SIMULATE_INSN_H
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#include <asm/insn.h>
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#define RISCV_INSN_REJECTED(name, code)					\
962306a36Sopenharmony_ci	do {								\
1062306a36Sopenharmony_ci		if (riscv_insn_is_##name(code)) {			\
1162306a36Sopenharmony_ci			return INSN_REJECTED;				\
1262306a36Sopenharmony_ci		}							\
1362306a36Sopenharmony_ci	} while (0)
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#define RISCV_INSN_SET_SIMULATE(name, code)				\
1662306a36Sopenharmony_ci	do {								\
1762306a36Sopenharmony_ci		if (riscv_insn_is_##name(code)) {			\
1862306a36Sopenharmony_ci			api->handler = simulate_##name;			\
1962306a36Sopenharmony_ci			return INSN_GOOD_NO_SLOT;			\
2062306a36Sopenharmony_ci		}							\
2162306a36Sopenharmony_ci	} while (0)
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_cibool simulate_auipc(u32 opcode, unsigned long addr, struct pt_regs *regs);
2462306a36Sopenharmony_cibool simulate_branch(u32 opcode, unsigned long addr, struct pt_regs *regs);
2562306a36Sopenharmony_cibool simulate_jal(u32 opcode, unsigned long addr, struct pt_regs *regs);
2662306a36Sopenharmony_cibool simulate_jalr(u32 opcode, unsigned long addr, struct pt_regs *regs);
2762306a36Sopenharmony_cibool simulate_c_j(u32 opcode, unsigned long addr, struct pt_regs *regs);
2862306a36Sopenharmony_cibool simulate_c_jr(u32 opcode, unsigned long addr, struct pt_regs *regs);
2962306a36Sopenharmony_cibool simulate_c_jalr(u32 opcode, unsigned long addr, struct pt_regs *regs);
3062306a36Sopenharmony_cibool simulate_c_bnez(u32 opcode, unsigned long addr, struct pt_regs *regs);
3162306a36Sopenharmony_cibool simulate_c_beqz(u32 opcode, unsigned long addr, struct pt_regs *regs);
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci#endif /* _RISCV_KERNEL_PROBES_SIMULATE_INSN_H */
34