summaryrefslogtreecommitdiff
path: root/kexec/arch/arm64/kexec-arm64.h
blob: 057acf313b4927d4fdd9d3c615ddb6bdf278433b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*
 * ARM64 kexec.
 */

#if !defined(KEXEC_ARM64_H)
#define KEXEC_ARM64_H

#include <stdbool.h>
#include <sys/types.h>

#include "image-header.h"
#include "kexec.h"

#define KEXEC_SEGMENT_MAX 16

#define BOOT_BLOCK_VERSION 17
#define BOOT_BLOCK_LAST_COMP_VERSION 16
#define COMMAND_LINE_SIZE 512

int elf_arm64_probe(const char *kernel_buf, off_t kernel_size);
int elf_arm64_load(int argc, char **argv, const char *kernel_buf,
	off_t kernel_size, struct kexec_info *info);
void elf_arm64_usage(void);

int image_arm64_probe(const char *kernel_buf, off_t kernel_size);
int image_arm64_load(int argc, char **argv, const char *kernel_buf,
	off_t kernel_size, struct kexec_info *info);
void image_arm64_usage(void);

struct memory_ranges usablemem_rgns;
off_t initrd_base;
off_t initrd_size;

/**
 * struct arm64_mem - Memory layout info.
 */

struct arm64_mem {
	uint64_t text_offset;
	uint64_t image_size;
	uint64_t page_offset;
	uint64_t memstart;
};

extern struct arm64_mem arm64_mem;

int arm64_process_image_header(const struct arm64_image_header *h);
int arm64_load_other_segments(struct kexec_info *info,
	unsigned long kernel_entry);

#endif