162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef _ASM_X86_REBOOT_H
362306a36Sopenharmony_ci#define _ASM_X86_REBOOT_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <linux/kdebug.h>
662306a36Sopenharmony_ci
762306a36Sopenharmony_cistruct pt_regs;
862306a36Sopenharmony_ci
962306a36Sopenharmony_cistruct machine_ops {
1062306a36Sopenharmony_ci	void (*restart)(char *cmd);
1162306a36Sopenharmony_ci	void (*halt)(void);
1262306a36Sopenharmony_ci	void (*power_off)(void);
1362306a36Sopenharmony_ci	void (*shutdown)(void);
1462306a36Sopenharmony_ci	void (*crash_shutdown)(struct pt_regs *);
1562306a36Sopenharmony_ci	void (*emergency_restart)(void);
1662306a36Sopenharmony_ci};
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ciextern struct machine_ops machine_ops;
1962306a36Sopenharmony_ciextern int crashing_cpu;
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_civoid native_machine_crash_shutdown(struct pt_regs *regs);
2262306a36Sopenharmony_civoid native_machine_shutdown(void);
2362306a36Sopenharmony_civoid __noreturn machine_real_restart(unsigned int type);
2462306a36Sopenharmony_ci/* These must match dispatch in arch/x86/realmore/rm/reboot.S */
2562306a36Sopenharmony_ci#define MRR_BIOS	0
2662306a36Sopenharmony_ci#define MRR_APM		1
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci#if IS_ENABLED(CONFIG_KVM_INTEL) || IS_ENABLED(CONFIG_KVM_AMD)
2962306a36Sopenharmony_citypedef void (cpu_emergency_virt_cb)(void);
3062306a36Sopenharmony_civoid cpu_emergency_register_virt_callback(cpu_emergency_virt_cb *callback);
3162306a36Sopenharmony_civoid cpu_emergency_unregister_virt_callback(cpu_emergency_virt_cb *callback);
3262306a36Sopenharmony_civoid cpu_emergency_disable_virtualization(void);
3362306a36Sopenharmony_ci#else
3462306a36Sopenharmony_cistatic inline void cpu_emergency_disable_virtualization(void) {}
3562306a36Sopenharmony_ci#endif /* CONFIG_KVM_INTEL || CONFIG_KVM_AMD */
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_citypedef void (*nmi_shootdown_cb)(int, struct pt_regs*);
3862306a36Sopenharmony_civoid nmi_shootdown_cpus(nmi_shootdown_cb callback);
3962306a36Sopenharmony_civoid run_crash_ipi_callback(struct pt_regs *regs);
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci#endif /* _ASM_X86_REBOOT_H */
42