blob: 18bd691c33e2dcce9438354e7d84d348c4591e29 [file] [log] [blame]
#ifndef CRASHDUMP_H
#define CRASHDUMP_H
extern int get_crash_notes_per_cpu(int cpu, uint64_t *addr, uint64_t *len);
extern int get_kernel_vmcoreinfo(uint64_t *addr, uint64_t *len);
extern int get_xen_vmcoreinfo(uint64_t *addr, uint64_t *len);
/* Need to find a better way to determine per cpu notes section size. */
#define MAX_NOTE_BYTES 1024
/* Expecting ELF headers to fit in 64K. Increase it if you need more. */
#define KCORE_ELF_HEADERS_SIZE 65536
/* The address of the ELF header is passed to the secondary kernel
* using the kernel command line option memmap=nnn.
* The smallest unit the kernel accepts is in kilobytes,
* so we need to make sure the ELF header is aligned to 1024.
*/
#define ELF_CORE_HEADER_ALIGN 1024
/* structure passed to crash_create_elf32/64_headers() */
struct crash_elf_info {
unsigned long class;
unsigned long data;
unsigned long machine;
unsigned long long page_offset;
unsigned long long kern_vaddr_start;
unsigned long long kern_paddr_start;
unsigned long kern_size;
unsigned long lowmem_limit;
int (*get_note_info)(int cpu, uint64_t *addr, uint64_t *len);
};
typedef int(*crash_create_elf_headers_func)(struct kexec_info *info,
struct crash_elf_info *elf_info,
struct memory_range *range,
int ranges,
void **buf, unsigned long *size,
unsigned long align);
int crash_create_elf32_headers(struct kexec_info *info,
struct crash_elf_info *elf_info,
struct memory_range *range, int ranges,
void **buf, unsigned long *size,
unsigned long align);
int crash_create_elf64_headers(struct kexec_info *info,
struct crash_elf_info *elf_info,
struct memory_range *range, int ranges,
void **buf, unsigned long *size,
unsigned long align);
unsigned long crash_architecture(struct crash_elf_info *elf_info);
unsigned long phys_to_virt(struct crash_elf_info *elf_info,
unsigned long long paddr);
unsigned long xen_architecture(struct crash_elf_info *elf_info);
int xen_get_nr_phys_cpus(void);
int xen_get_note(int cpu, uint64_t *addr, uint64_t *len);
int xen_get_crashkernel_region(uint64_t *start, uint64_t *end);
#endif /* CRASHDUMP_H */