16f52b16cSGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2607ca46eSDavid Howells #ifndef _UAPILINUX_KEXEC_H 3607ca46eSDavid Howells #define _UAPILINUX_KEXEC_H 4607ca46eSDavid Howells 5607ca46eSDavid Howells /* kexec system call - It loads the new kernel to boot into. 6607ca46eSDavid Howells * kexec does not sync, or unmount filesystems so if you need 7607ca46eSDavid Howells * that to happen you need to do that yourself. 8607ca46eSDavid Howells */ 9607ca46eSDavid Howells 10607ca46eSDavid Howells #include <linux/types.h> 11607ca46eSDavid Howells 12607ca46eSDavid Howells /* kexec flags for different usage scenarios */ 13607ca46eSDavid Howells #define KEXEC_ON_CRASH 0x00000001 14607ca46eSDavid Howells #define KEXEC_PRESERVE_CONTEXT 0x00000002 15a72bbec7SEric DeVolder #define KEXEC_UPDATE_ELFCOREHDR 0x00000004 16*79365026SSourabh Jain #define KEXEC_CRASH_HOTPLUG_SUPPORT 0x00000008 17607ca46eSDavid Howells #define KEXEC_ARCH_MASK 0xffff0000 18607ca46eSDavid Howells 19cb105258SVivek Goyal /* 20cb105258SVivek Goyal * Kexec file load interface flags. 21cb105258SVivek Goyal * KEXEC_FILE_UNLOAD : Unload already loaded kexec/kdump image. 22cb105258SVivek Goyal * KEXEC_FILE_ON_CRASH : Load/unload operation belongs to kdump image. 23cb105258SVivek Goyal * KEXEC_FILE_NO_INITRAMFS : No initramfs is being loaded. Ignore the initrd 24cb105258SVivek Goyal * fd field. 25cb105258SVivek Goyal */ 26cb105258SVivek Goyal #define KEXEC_FILE_UNLOAD 0x00000001 27cb105258SVivek Goyal #define KEXEC_FILE_ON_CRASH 0x00000002 28cb105258SVivek Goyal #define KEXEC_FILE_NO_INITRAMFS 0x00000004 29cbc2fe9dSBaoquan He #define KEXEC_FILE_DEBUG 0x00000008 30cb105258SVivek Goyal 31607ca46eSDavid Howells /* These values match the ELF architecture values. 32607ca46eSDavid Howells * Unless there is a good reason that should continue to be the case. 33607ca46eSDavid Howells */ 34607ca46eSDavid Howells #define KEXEC_ARCH_DEFAULT ( 0 << 16) 35607ca46eSDavid Howells #define KEXEC_ARCH_386 ( 3 << 16) 367d5f5fa2SGeert Uytterhoeven #define KEXEC_ARCH_68K ( 4 << 16) 37fc697dc0SSven Schnelle #define KEXEC_ARCH_PARISC (15 << 16) 38607ca46eSDavid Howells #define KEXEC_ARCH_X86_64 (62 << 16) 39607ca46eSDavid Howells #define KEXEC_ARCH_PPC (20 << 16) 40607ca46eSDavid Howells #define KEXEC_ARCH_PPC64 (21 << 16) 41607ca46eSDavid Howells #define KEXEC_ARCH_IA_64 (50 << 16) 42607ca46eSDavid Howells #define KEXEC_ARCH_ARM (40 << 16) 43607ca46eSDavid Howells #define KEXEC_ARCH_S390 (22 << 16) 44607ca46eSDavid Howells #define KEXEC_ARCH_SH (42 << 16) 45607ca46eSDavid Howells #define KEXEC_ARCH_MIPS_LE (10 << 16) 46607ca46eSDavid Howells #define KEXEC_ARCH_MIPS ( 8 << 16) 47d28f6df1SGeoff Levand #define KEXEC_ARCH_AARCH64 (183 << 16) 48d83e682eSNick Kossifidis #define KEXEC_ARCH_RISCV (243 << 16) 4908145b08SHuacai Chen #define KEXEC_ARCH_LOONGARCH (258 << 16) 50607ca46eSDavid Howells 51607ca46eSDavid Howells /* The artificial cap on the number of segments passed to kexec_load. */ 52607ca46eSDavid Howells #define KEXEC_SEGMENT_MAX 16 53607ca46eSDavid Howells 54607ca46eSDavid Howells #ifndef __KERNEL__ 55607ca46eSDavid Howells /* 56607ca46eSDavid Howells * This structure is used to hold the arguments that are used when 57607ca46eSDavid Howells * loading kernel binaries. 58607ca46eSDavid Howells */ 59607ca46eSDavid Howells struct kexec_segment { 60607ca46eSDavid Howells const void *buf; 618b4bca21SMasahiro Yamada __kernel_size_t bufsz; 62607ca46eSDavid Howells const void *mem; 638b4bca21SMasahiro Yamada __kernel_size_t memsz; 64607ca46eSDavid Howells }; 65607ca46eSDavid Howells 66607ca46eSDavid Howells #endif /* __KERNEL__ */ 67607ca46eSDavid Howells 68607ca46eSDavid Howells #endif /* _UAPILINUX_KEXEC_H */ 69