Home | History | Annotate | Download | only in linux
      1 #ifndef _UAPILINUX_KEXEC_H
      2 #define _UAPILINUX_KEXEC_H
      3 
      4 /* kexec system call -  It loads the new kernel to boot into.
      5  * kexec does not sync, or unmount filesystems so if you need
      6  * that to happen you need to do that yourself.
      7  */
      8 
      9 #include <linux/types.h>
     10 
     11 /* kexec flags for different usage scenarios */
     12 #define KEXEC_ON_CRASH		0x00000001
     13 #define KEXEC_PRESERVE_CONTEXT	0x00000002
     14 #define KEXEC_ARCH_MASK		0xffff0000
     15 
     16 /* These values match the ELF architecture values.
     17  * Unless there is a good reason that should continue to be the case.
     18  */
     19 #define KEXEC_ARCH_DEFAULT ( 0 << 16)
     20 #define KEXEC_ARCH_386     ( 3 << 16)
     21 #define KEXEC_ARCH_68K     ( 4 << 16)
     22 #define KEXEC_ARCH_X86_64  (62 << 16)
     23 #define KEXEC_ARCH_PPC     (20 << 16)
     24 #define KEXEC_ARCH_PPC64   (21 << 16)
     25 #define KEXEC_ARCH_IA_64   (50 << 16)
     26 #define KEXEC_ARCH_ARM     (40 << 16)
     27 #define KEXEC_ARCH_S390    (22 << 16)
     28 #define KEXEC_ARCH_SH      (42 << 16)
     29 #define KEXEC_ARCH_MIPS_LE (10 << 16)
     30 #define KEXEC_ARCH_MIPS    ( 8 << 16)
     31 
     32 /* The artificial cap on the number of segments passed to kexec_load. */
     33 #define KEXEC_SEGMENT_MAX 16
     34 
     35 #ifndef __KERNEL__
     36 /*
     37  * This structure is used to hold the arguments that are used when
     38  * loading  kernel binaries.
     39  */
     40 struct kexec_segment {
     41 	const void *buf;
     42 	size_t bufsz;
     43 	const void *mem;
     44 	size_t memsz;
     45 };
     46 
     47 /* Load a new kernel image as described by the kexec_segment array
     48  * consisting of passed number of segments at the entry-point address.
     49  * The flags allow different useage types.
     50  */
     51 extern int kexec_load(void *, size_t, struct kexec_segment *,
     52 		unsigned long int);
     53 #endif /* __KERNEL__ */
     54 
     55 #endif /* _UAPILINUX_KEXEC_H */
     56