In order to be able to interpret the Image header from C code, we need a struct definition that reflects the specification for Image headers as laid out in Documentation/arm64/booting.txt. Signed-off-by: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> --- arch/arm64/include/asm/image_hdr.h | 75 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 arch/arm64/include/asm/image_hdr.h diff --git a/arch/arm64/include/asm/image_hdr.h b/arch/arm64/include/asm/image_hdr.h new file mode 100644 index 000000000000..9dc74b672124 --- /dev/null +++ b/arch/arm64/include/asm/image_hdr.h @@ -0,0 +1,75 @@ +/* + * image_hdr.h - C struct definition of the arm64 Image header format + * + * Copyright (C) 2014 Linaro Ltd + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#ifndef __ASM_IMAGE_HDR_H +#define __ASM_IMAGE_HDR_H + +#ifdef __KERNEL__ +#include <linux/types.h> +#else +#include <stdint.h> +#endif + +/** + * struct arm64_image_hdr - arm64 kernel Image binary header format + * @code0: entry point, first instruction to jump to when booting + * the Image + * @code1: second instruction of entry point + * @text_offset: mandatory offset (little endian) beyond a 2 megabyte + * aligned boundary that needs to be taken into account + * when deciding where to load the image + * @image_size: total size (little endian) of the memory area (counted + * from the offset where the image was loaded) that may be + * used by the booting kernel before memory reservations + * can be honoured + * @flags: little endian bit field + * Bit 0: Kernel endianness. 1 if BE, 0 if LE. + * Bits 1-63: Reserved. + * @res2: reserved, must be 0 + * @res3: reserved, must be 0 + * @res4: reserved, must be 0 + * @magic: Magic number (little endian): "ARM\x64" + * @res5: reserved (used for PE COFF offset) + * + * This definition reflects the definition in Documentation/arm64/booting.txt in + * the Linux source tree. + */ +struct arm64_image_hdr { + uint32_t code0; + uint32_t code1; + uint64_t text_offset; + uint64_t image_size; + uint64_t flags; + uint64_t res2; + uint64_t res3; + uint64_t res4; + uint32_t magic; + uint32_t res5; +}; + +static const union { + uint8_t le_val[4]; + uint32_t cpu_val; +} arm64_image_hdr_magic = { + .le_val = "ARM\x64" +}; + +/** + * int arm64_image_hdr_check() - check whether hdr points to an arm64 Image + * @hdr: pointer to an arm64 Image + * + * Return: 1 if check is successful, 0 otherwise + */ +static inline int arm64_image_hdr_check(struct arm64_image_hdr const *hdr) +{ + return hdr->magic == arm64_image_hdr_magic.cpu_val; +} + +#endif -- 1.8.3.2 -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html