xref: /OK3568_Linux_fs/kernel/include/uapi/linux/kexec.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*4882a593Smuzhiyun #ifndef _UAPILINUX_KEXEC_H
3*4882a593Smuzhiyun #define _UAPILINUX_KEXEC_H
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun /* kexec system call -  It loads the new kernel to boot into.
6*4882a593Smuzhiyun  * kexec does not sync, or unmount filesystems so if you need
7*4882a593Smuzhiyun  * that to happen you need to do that yourself.
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #include <linux/types.h>
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun /* kexec flags for different usage scenarios */
13*4882a593Smuzhiyun #define KEXEC_ON_CRASH		0x00000001
14*4882a593Smuzhiyun #define KEXEC_PRESERVE_CONTEXT	0x00000002
15*4882a593Smuzhiyun #define KEXEC_ARCH_MASK		0xffff0000
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun /*
18*4882a593Smuzhiyun  * Kexec file load interface flags.
19*4882a593Smuzhiyun  * KEXEC_FILE_UNLOAD : Unload already loaded kexec/kdump image.
20*4882a593Smuzhiyun  * KEXEC_FILE_ON_CRASH : Load/unload operation belongs to kdump image.
21*4882a593Smuzhiyun  * KEXEC_FILE_NO_INITRAMFS : No initramfs is being loaded. Ignore the initrd
22*4882a593Smuzhiyun  *                           fd field.
23*4882a593Smuzhiyun  */
24*4882a593Smuzhiyun #define KEXEC_FILE_UNLOAD	0x00000001
25*4882a593Smuzhiyun #define KEXEC_FILE_ON_CRASH	0x00000002
26*4882a593Smuzhiyun #define KEXEC_FILE_NO_INITRAMFS	0x00000004
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun /* These values match the ELF architecture values.
29*4882a593Smuzhiyun  * Unless there is a good reason that should continue to be the case.
30*4882a593Smuzhiyun  */
31*4882a593Smuzhiyun #define KEXEC_ARCH_DEFAULT ( 0 << 16)
32*4882a593Smuzhiyun #define KEXEC_ARCH_386     ( 3 << 16)
33*4882a593Smuzhiyun #define KEXEC_ARCH_68K     ( 4 << 16)
34*4882a593Smuzhiyun #define KEXEC_ARCH_PARISC  (15 << 16)
35*4882a593Smuzhiyun #define KEXEC_ARCH_X86_64  (62 << 16)
36*4882a593Smuzhiyun #define KEXEC_ARCH_PPC     (20 << 16)
37*4882a593Smuzhiyun #define KEXEC_ARCH_PPC64   (21 << 16)
38*4882a593Smuzhiyun #define KEXEC_ARCH_IA_64   (50 << 16)
39*4882a593Smuzhiyun #define KEXEC_ARCH_ARM     (40 << 16)
40*4882a593Smuzhiyun #define KEXEC_ARCH_S390    (22 << 16)
41*4882a593Smuzhiyun #define KEXEC_ARCH_SH      (42 << 16)
42*4882a593Smuzhiyun #define KEXEC_ARCH_MIPS_LE (10 << 16)
43*4882a593Smuzhiyun #define KEXEC_ARCH_MIPS    ( 8 << 16)
44*4882a593Smuzhiyun #define KEXEC_ARCH_AARCH64 (183 << 16)
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun /* The artificial cap on the number of segments passed to kexec_load. */
47*4882a593Smuzhiyun #define KEXEC_SEGMENT_MAX 16
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun #ifndef __KERNEL__
50*4882a593Smuzhiyun /*
51*4882a593Smuzhiyun  * This structure is used to hold the arguments that are used when
52*4882a593Smuzhiyun  * loading  kernel binaries.
53*4882a593Smuzhiyun  */
54*4882a593Smuzhiyun struct kexec_segment {
55*4882a593Smuzhiyun 	const void *buf;
56*4882a593Smuzhiyun 	size_t bufsz;
57*4882a593Smuzhiyun 	const void *mem;
58*4882a593Smuzhiyun 	size_t memsz;
59*4882a593Smuzhiyun };
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun #endif /* __KERNEL__ */
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun #endif /* _UAPILINUX_KEXEC_H */
64