xref: /linux/arch/loongarch/include/asm/image.h (revision fb5bc347311b1d78dc608c91c2d68327b0a1d1d4)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * LoongArch binary image header for EFI(PE/COFF) format.
4  *
5  * Author: Youling Tang <tangyouling@kylinos.cn>
6  * Copyright (C) 2025 KylinSoft Corporation.
7  */
8 
9 #ifndef __ASM_IMAGE_H
10 #define __ASM_IMAGE_H
11 
12 #ifndef __ASSEMBLER__
13 
14 /**
15  * struct loongarch_image_header
16  *
17  * @dos_sig: Optional PE format 'MZ' signature.
18  * @padding_1: Reserved.
19  * @kernel_entry: Kernel image entry pointer.
20  * @kernel_asize: An estimated size of the memory image size in LSB byte order.
21  * @text_offset: The image load offset in LSB byte order.
22  * @padding_2: Reserved.
23  * @pe_header: Optional offset to a PE format header.
24  **/
25 
26 struct loongarch_image_header {
27 	uint8_t dos_sig[2];
28 	uint16_t padding_1[3];
29 	uint64_t kernel_entry;
30 	uint64_t kernel_asize;
31 	uint64_t text_offset;
32 	uint32_t padding_2[7];
33 	uint32_t pe_header;
34 };
35 
36 /*
37  * loongarch_header_check_dos_sig - Helper to check the header
38  *
39  * Returns true (non-zero) if 'MZ' signature is found.
40  */
41 
loongarch_header_check_dos_sig(const struct loongarch_image_header * h)42 static inline int loongarch_header_check_dos_sig(const struct loongarch_image_header *h)
43 {
44 	if (!h)
45 		return 0;
46 
47 	return (h->dos_sig[0] == 'M' && h->dos_sig[1] == 'Z');
48 }
49 
50 #endif /* __ASSEMBLER__ */
51 
52 #endif /* __ASM_IMAGE_H */
53