#ifndef _UAPILINUX_KEXEC_H #define _UAPILINUX_KEXEC_H /* kexec system call - It loads the new kernel to boot into. * kexec does not sync, or unmount filesystems so if you need * that to happen you need to do that yourself. */ #include <linux/types.h> /* kexec flags for different usage scenarios */ #define KEXEC_ON_CRASH 0x00000001 #define KEXEC_PRESERVE_CONTEXT 0x00000002 #define KEXEC_ARCH_MASK 0xffff0000 /* These values match the ELF architecture values. * Unless there is a good reason that should continue to be the case. */ #define KEXEC_ARCH_DEFAULT ( 0 << 16) #define KEXEC_ARCH_386 ( 3 << 16) #define KEXEC_ARCH_68K ( 4 << 16) #define KEXEC_ARCH_X86_64 (62 << 16) #define KEXEC_ARCH_PPC (20 << 16) #define KEXEC_ARCH_PPC64 (21 << 16) #define KEXEC_ARCH_IA_64 (50 << 16) #define KEXEC_ARCH_ARM (40 << 16) #define KEXEC_ARCH_S390 (22 << 16) #define KEXEC_ARCH_SH (42 << 16) #define KEXEC_ARCH_MIPS_LE (10 << 16) #define KEXEC_ARCH_MIPS ( 8 << 16) /* The artificial cap on the number of segments passed to kexec_load. */ #define KEXEC_SEGMENT_MAX 16 #ifndef __KERNEL__ /* * This structure is used to hold the arguments that are used when * loading kernel binaries. */ struct kexec_segment { const void *buf; size_t bufsz; const void *mem; size_t memsz; }; /* Load a new kernel image as described by the kexec_segment array * consisting of passed number of segments at the entry-point address. * The flags allow different useage types. */ extern int kexec_load(void *, size_t, struct kexec_segment *, unsigned long int); #endif /* __KERNEL__ */ #endif /* _UAPILINUX_KEXEC_H */