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