1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2692f66f2SHari Bathini #ifndef LINUX_CRASH_CORE_H
3692f66f2SHari Bathini #define LINUX_CRASH_CORE_H
4692f66f2SHari Bathini
5692f66f2SHari Bathini #include <linux/linkage.h>
6692f66f2SHari Bathini #include <linux/elfcore.h>
7692f66f2SHari Bathini #include <linux/elf.h>
8692f66f2SHari Bathini
902aff848SBaoquan He struct kimage;
1002aff848SBaoquan He
1156a34d79SHari Bathini struct crash_mem {
1256a34d79SHari Bathini unsigned int max_nr_ranges;
1356a34d79SHari Bathini unsigned int nr_ranges;
1456a34d79SHari Bathini struct range ranges[] __counted_by(max_nr_ranges);
1556a34d79SHari Bathini };
1656a34d79SHari Bathini
1702aff848SBaoquan He #ifdef CONFIG_CRASH_DUMP
1802aff848SBaoquan He
1902aff848SBaoquan He int crash_shrink_memory(unsigned long new_size);
2002aff848SBaoquan He ssize_t crash_get_memory_size(void);
2102aff848SBaoquan He
2202aff848SBaoquan He #ifndef arch_kexec_protect_crashkres
2302aff848SBaoquan He /*
2402aff848SBaoquan He * Protection mechanism for crashkernel reserved memory after
2502aff848SBaoquan He * the kdump kernel is loaded.
2602aff848SBaoquan He *
2702aff848SBaoquan He * Provide an empty default implementation here -- architecture
2802aff848SBaoquan He * code may override this
2902aff848SBaoquan He */
arch_kexec_protect_crashkres(void)3002aff848SBaoquan He static inline void arch_kexec_protect_crashkres(void) { }
3102aff848SBaoquan He #endif
3202aff848SBaoquan He
3302aff848SBaoquan He #ifndef arch_kexec_unprotect_crashkres
arch_kexec_unprotect_crashkres(void)3402aff848SBaoquan He static inline void arch_kexec_unprotect_crashkres(void) { }
3502aff848SBaoquan He #endif
3602aff848SBaoquan He
3702aff848SBaoquan He
3802aff848SBaoquan He
3902aff848SBaoquan He #ifndef arch_crash_handle_hotplug_event
arch_crash_handle_hotplug_event(struct kimage * image,void * arg)4011800571SSourabh Jain static inline void arch_crash_handle_hotplug_event(struct kimage *image, void *arg) { }
4102aff848SBaoquan He #endif
4202aff848SBaoquan He
43*79365026SSourabh Jain int crash_check_hotplug_support(void);
4402aff848SBaoquan He
45*79365026SSourabh Jain #ifndef arch_crash_hotplug_support
arch_crash_hotplug_support(struct kimage * image,unsigned long kexec_flags)46*79365026SSourabh Jain static inline int arch_crash_hotplug_support(struct kimage *image, unsigned long kexec_flags)
47*79365026SSourabh Jain {
48*79365026SSourabh Jain return 0;
49*79365026SSourabh Jain }
5002aff848SBaoquan He #endif
5102aff848SBaoquan He
5202aff848SBaoquan He #ifndef crash_get_elfcorehdr_size
crash_get_elfcorehdr_size(void)5302aff848SBaoquan He static inline unsigned int crash_get_elfcorehdr_size(void) { return 0; }
5402aff848SBaoquan He #endif
5502aff848SBaoquan He
566f991cc3SEric DeVolder /* Alignment required for elf header segment */
576f991cc3SEric DeVolder #define ELF_CORE_HEADER_ALIGN 4096
586f991cc3SEric DeVolder
596f991cc3SEric DeVolder extern int crash_exclude_mem_range(struct crash_mem *mem,
606f991cc3SEric DeVolder unsigned long long mstart,
616f991cc3SEric DeVolder unsigned long long mend);
626f991cc3SEric DeVolder extern int crash_prepare_elf64_headers(struct crash_mem *mem, int need_kernel_map,
636f991cc3SEric DeVolder void **addr, unsigned long *sz);
646f991cc3SEric DeVolder
656f991cc3SEric DeVolder struct kimage;
666f991cc3SEric DeVolder struct kexec_segment;
676f991cc3SEric DeVolder
6824726275SEric DeVolder #define KEXEC_CRASH_HP_NONE 0
6924726275SEric DeVolder #define KEXEC_CRASH_HP_ADD_CPU 1
7024726275SEric DeVolder #define KEXEC_CRASH_HP_REMOVE_CPU 2
7124726275SEric DeVolder #define KEXEC_CRASH_HP_ADD_MEMORY 3
7224726275SEric DeVolder #define KEXEC_CRASH_HP_REMOVE_MEMORY 4
7324726275SEric DeVolder #define KEXEC_CRASH_HP_INVALID_CPU -1U
7424726275SEric DeVolder
7502aff848SBaoquan He extern void __crash_kexec(struct pt_regs *regs);
7602aff848SBaoquan He extern void crash_kexec(struct pt_regs *regs);
7702aff848SBaoquan He int kexec_should_crash(struct task_struct *p);
7802aff848SBaoquan He int kexec_crash_loaded(void);
7902aff848SBaoquan He void crash_save_cpu(struct pt_regs *regs, int cpu);
8002aff848SBaoquan He extern int kimage_crash_copy_vmcoreinfo(struct kimage *image);
8102aff848SBaoquan He
8202aff848SBaoquan He #else /* !CONFIG_CRASH_DUMP*/
8302aff848SBaoquan He struct pt_regs;
8402aff848SBaoquan He struct task_struct;
8502aff848SBaoquan He struct kimage;
__crash_kexec(struct pt_regs * regs)8602aff848SBaoquan He static inline void __crash_kexec(struct pt_regs *regs) { }
crash_kexec(struct pt_regs * regs)8702aff848SBaoquan He static inline void crash_kexec(struct pt_regs *regs) { }
kexec_should_crash(struct task_struct * p)8802aff848SBaoquan He static inline int kexec_should_crash(struct task_struct *p) { return 0; }
kexec_crash_loaded(void)8902aff848SBaoquan He static inline int kexec_crash_loaded(void) { return 0; }
crash_save_cpu(struct pt_regs * regs,int cpu)9002aff848SBaoquan He static inline void crash_save_cpu(struct pt_regs *regs, int cpu) {};
kimage_crash_copy_vmcoreinfo(struct kimage * image)9102aff848SBaoquan He static inline int kimage_crash_copy_vmcoreinfo(struct kimage *image) { return 0; };
9202aff848SBaoquan He #endif /* CONFIG_CRASH_DUMP*/
9302aff848SBaoquan He
94692f66f2SHari Bathini #endif /* LINUX_CRASH_CORE_H */
95