#ifndef LINUX_KEXEC_H #define LINUX_KEXEC_H #ifdef CONFIG_KEXEC #include #include #include /* * This structure is used to hold the arguments that are used when loading * kernel binaries. */ typedef unsigned long kimage_entry_t; #define IND_DESTINATION 0x1 #define IND_INDIRECTION 0x2 #define IND_DONE 0x4 #define IND_SOURCE 0x8 #define KEXEC_SEGMENT_MAX 8 struct kexec_segment { void *buf; size_t bufsz; void *mem; size_t memsz; }; struct kimage { kimage_entry_t head; kimage_entry_t *entry; kimage_entry_t *last_entry; unsigned long destination; unsigned long start; struct page *control_code_page; unsigned long nr_segments; struct kexec_segment segment[KEXEC_SEGMENT_MAX]; struct list_head control_pages; struct list_head dest_pages; struct list_head unuseable_pages; }; /* kexec interface functions */ extern void machine_kexec(struct kimage *image); extern int machine_kexec_prepare(struct kimage *image); extern void machine_kexec_cleanup(struct kimage *image); extern asmlinkage long sys_kexec(unsigned long entry, long nr_segments, struct kexec_segment *segments); extern struct page *kimage_alloc_control_pages(struct kimage *image, unsigned int order); extern struct kimage *kexec_image; #endif #endif /* LINUX_KEXEC_H */