diff options
Diffstat (limited to 'kexec/kexec.h')
-rw-r--r-- | kexec/kexec.h | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/kexec/kexec.h b/kexec/kexec.h index 2904e03..4be2b2f 100644 --- a/kexec/kexec.h +++ b/kexec/kexec.h @@ -148,12 +148,21 @@ struct kexec_info { int nr_segments; struct memory_range *memory_range; int memory_ranges; + struct memory_range *crash_range; + int nr_crash_ranges; void *entry; struct mem_ehdr rhdr; unsigned long backup_start; unsigned long kexec_flags; unsigned long backup_src_start; unsigned long backup_src_size; + /* Set to 1 if we are using kexec file syscall */ + unsigned long file_mode :1; + + /* Filled by kernel image processing code */ + int initrd_fd; + char *command_line; + int command_line_len; }; struct arch_map_entry { @@ -205,6 +214,7 @@ extern int file_types; #define OPT_UNLOAD 'u' #define OPT_TYPE 't' #define OPT_PANIC 'p' +#define OPT_KEXEC_FILE_SYSCALL 's' #define OPT_MEM_MIN 256 #define OPT_MEM_MAX 257 #define OPT_REUSE_INITRD 258 @@ -228,16 +238,18 @@ extern int file_types; { "mem-min", 1, 0, OPT_MEM_MIN }, \ { "mem-max", 1, 0, OPT_MEM_MAX }, \ { "reuseinitrd", 0, 0, OPT_REUSE_INITRD }, \ + { "kexec-file-syscall", 0, 0, OPT_KEXEC_FILE_SYSCALL }, \ { "debug", 0, 0, OPT_DEBUG }, \ -#define KEXEC_OPT_STR "h?vdfxluet:p" +#define KEXEC_OPT_STR "h?vdfxluet:ps" +extern void dbgprint_mem_range(const char *prefix, struct memory_range *mr, int nr_mr); extern void die(const char *fmt, ...) __attribute__ ((format (printf, 1, 2))); extern void *xmalloc(size_t size); extern void *xrealloc(void *ptr, size_t size); extern char *slurp_file(const char *filename, off_t *r_size); -extern char *slurp_file_len(const char *filename, off_t size); +extern char *slurp_file_len(const char *filename, off_t size, off_t *nread); extern char *slurp_decompress_file(const char *filename, off_t *r_size); extern unsigned long virt_to_phys(unsigned long addr); extern void add_segment(struct kexec_info *info, @@ -279,8 +291,8 @@ int kexec_iomem_for_each_line(char *match, int (*callback)(void *data, int nr, char *str, - unsigned long base, - unsigned long length), + unsigned long long base, + unsigned long long length), void *data); int parse_iomem_single(char *str, uint64_t *start, uint64_t *end); const char * proc_iomem(void); @@ -289,4 +301,9 @@ const char * proc_iomem(void); char *concat_cmdline(const char *base, const char *append); +int xen_present(void); +int xen_kexec_load(struct kexec_info *info); +int xen_kexec_unload(uint64_t kexec_flags); +void xen_kexec_exec(void); + #endif /* KEXEC_H */ |