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 16607ca46eSDavid Howells #define KEXEC_ARCH_MASK 0xffff0000 17607ca46eSDavid Howells 18cb105258SVivek Goyal /* 19cb105258SVivek Goyal * Kexec file load interface flags. 20cb105258SVivek Goyal * KEXEC_FILE_UNLOAD : Unload already loaded kexec/kdump image. 21cb105258SVivek Goyal * KEXEC_FILE_ON_CRASH : Load/unload operation belongs to kdump image. 22cb105258SVivek Goyal * KEXEC_FILE_NO_INITRAMFS : No initramfs is being loaded. Ignore the initrd 23cb105258SVivek Goyal * fd field. 24cb105258SVivek Goyal */ 25cb105258SVivek Goyal #define KEXEC_FILE_UNLOAD 0x00000001 26cb105258SVivek Goyal #define KEXEC_FILE_ON_CRASH 0x00000002 27cb105258SVivek Goyal #define KEXEC_FILE_NO_INITRAMFS 0x00000004 28*cbc2fe9dSBaoquan He #define KEXEC_FILE_DEBUG 0x00000008 29cb105258SVivek Goyal 30607ca46eSDavid Howells /* These values match the ELF architecture values. 31607ca46eSDavid Howells * Unless there is a good reason that should continue to be the case. 32607ca46eSDavid Howells */ 33607ca46eSDavid Howells #define KEXEC_ARCH_DEFAULT ( 0 << 16) 34607ca46eSDavid Howells #define KEXEC_ARCH_386 ( 3 << 16) 357d5f5fa2SGeert Uytterhoeven #define KEXEC_ARCH_68K ( 4 << 16) 36fc697dc0SSven Schnelle #define KEXEC_ARCH_PARISC (15 << 16) 37607ca46eSDavid Howells #define KEXEC_ARCH_X86_64 (62 << 16) 38607ca46eSDavid Howells #define KEXEC_ARCH_PPC (20 << 16) 39607ca46eSDavid Howells #define KEXEC_ARCH_PPC64 (21 << 16) 40607ca46eSDavid Howells #define KEXEC_ARCH_IA_64 (50 << 16) 41607ca46eSDavid Howells #define KEXEC_ARCH_ARM (40 << 16) 42607ca46eSDavid Howells #define KEXEC_ARCH_S390 (22 << 16) 43607ca46eSDavid Howells #define KEXEC_ARCH_SH (42 << 16) 44607ca46eSDavid Howells #define KEXEC_ARCH_MIPS_LE (10 << 16) 45607ca46eSDavid Howells #define KEXEC_ARCH_MIPS ( 8 << 16) 46d28f6df1SGeoff Levand #define KEXEC_ARCH_AARCH64 (183 << 16) 47d83e682eSNick Kossifidis #define KEXEC_ARCH_RISCV (243 << 16) 4808145b08SHuacai Chen #define KEXEC_ARCH_LOONGARCH (258 << 16) 49607ca46eSDavid Howells 50607ca46eSDavid Howells /* The artificial cap on the number of segments passed to kexec_load. */ 51607ca46eSDavid Howells #define KEXEC_SEGMENT_MAX 16 52607ca46eSDavid Howells 53607ca46eSDavid Howells #ifndef __KERNEL__ 54607ca46eSDavid Howells /* 55607ca46eSDavid Howells * This structure is used to hold the arguments that are used when 56607ca46eSDavid Howells * loading kernel binaries. 57607ca46eSDavid Howells */ 58607ca46eSDavid Howells struct kexec_segment { 59607ca46eSDavid Howells const void *buf; 608b4bca21SMasahiro Yamada __kernel_size_t bufsz; 61607ca46eSDavid Howells const void *mem; 628b4bca21SMasahiro Yamada __kernel_size_t memsz; 63607ca46eSDavid Howells }; 64607ca46eSDavid Howells 65607ca46eSDavid Howells #endif /* __KERNEL__ */ 66607ca46eSDavid Howells 67607ca46eSDavid Howells #endif /* _UAPILINUX_KEXEC_H */ 68