Signed-off-by: David Howells <dhowells@redhat.com> Acked-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Michael Kerrisk <mtk.manpages@gmail.com> Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Acked-by: Dave Jones <davej@redhat.com>
		
			
				
	
	
		
			54 lines
		
	
	
	
		
			1.6 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
	
		
			1.6 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
#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_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 */
 |