130ade4feSYouling Tang /* SPDX-License-Identifier: GPL-2.0 */ 230ade4feSYouling Tang /* 330ade4feSYouling Tang * LoongArch binary image header for EFI(PE/COFF) format. 430ade4feSYouling Tang * 530ade4feSYouling Tang * Author: Youling Tang <tangyouling@kylinos.cn> 630ade4feSYouling Tang * Copyright (C) 2025 KylinSoft Corporation. 730ade4feSYouling Tang */ 830ade4feSYouling Tang 930ade4feSYouling Tang #ifndef __ASM_IMAGE_H 1030ade4feSYouling Tang #define __ASM_IMAGE_H 1130ade4feSYouling Tang 1230ade4feSYouling Tang #ifndef __ASSEMBLER__ 1330ade4feSYouling Tang 1430ade4feSYouling Tang /** 1530ade4feSYouling Tang * struct loongarch_image_header 1630ade4feSYouling Tang * 1730ade4feSYouling Tang * @dos_sig: Optional PE format 'MZ' signature. 1830ade4feSYouling Tang * @padding_1: Reserved. 1930ade4feSYouling Tang * @kernel_entry: Kernel image entry pointer. 2030ade4feSYouling Tang * @kernel_asize: An estimated size of the memory image size in LSB byte order. 2130ade4feSYouling Tang * @text_offset: The image load offset in LSB byte order. 2230ade4feSYouling Tang * @padding_2: Reserved. 2330ade4feSYouling Tang * @pe_header: Optional offset to a PE format header. 2430ade4feSYouling Tang **/ 2530ade4feSYouling Tang 2630ade4feSYouling Tang struct loongarch_image_header { 2730ade4feSYouling Tang uint8_t dos_sig[2]; 2830ade4feSYouling Tang uint16_t padding_1[3]; 2930ade4feSYouling Tang uint64_t kernel_entry; 3030ade4feSYouling Tang uint64_t kernel_asize; 3130ade4feSYouling Tang uint64_t text_offset; 3230ade4feSYouling Tang uint32_t padding_2[7]; 3330ade4feSYouling Tang uint32_t pe_header; 3430ade4feSYouling Tang }; 3530ade4feSYouling Tang 36*55d990f0SYouling Tang /* 37*55d990f0SYouling Tang * loongarch_header_check_dos_sig - Helper to check the header 38*55d990f0SYouling Tang * 39*55d990f0SYouling Tang * Returns true (non-zero) if 'MZ' signature is found. 40*55d990f0SYouling Tang */ 41*55d990f0SYouling Tang loongarch_header_check_dos_sig(const struct loongarch_image_header * h)42*55d990f0SYouling Tangstatic inline int loongarch_header_check_dos_sig(const struct loongarch_image_header *h) 43*55d990f0SYouling Tang { 44*55d990f0SYouling Tang if (!h) 45*55d990f0SYouling Tang return 0; 46*55d990f0SYouling Tang 47*55d990f0SYouling Tang return (h->dos_sig[0] == 'M' && h->dos_sig[1] == 'Z'); 48*55d990f0SYouling Tang } 49*55d990f0SYouling Tang 5030ade4feSYouling Tang #endif /* __ASSEMBLER__ */ 5130ade4feSYouling Tang 5230ade4feSYouling Tang #endif /* __ASM_IMAGE_H */ 53