diff --git a/hypervisor/arch/x86/boot/cpu_primary.S b/hypervisor/arch/x86/boot/cpu_primary.S index d0012a983..11d08155c 100644 --- a/hypervisor/arch/x86/boot/cpu_primary.S +++ b/hypervisor/arch/x86/boot/cpu_primary.S @@ -314,9 +314,3 @@ cpu_primary32_pdt_addr: .quad address + 0x83 address = address + 0x200000 .endr - -#ifdef CONFIG_MULTIBOOT2 - .global efiloader_sig -efiloader_sig: - .asciz "EL64" -#endif diff --git a/hypervisor/arch/x86/init.c b/hypervisor/arch/x86/init.c index d6dde9b52..3d2b6259a 100644 --- a/hypervisor/arch/x86/init.c +++ b/hypervisor/arch/x86/init.c @@ -16,10 +16,10 @@ #include #include -/* The following are assembly varaibles defined in arch/x86/boot/cpu_primary.S */ -/* boot_regs store the multiboot info magic and address */ +/* boot_regs store the multiboot info magic and address, defined in + arch/x86/boot/cpu_primary.S. + */ extern uint32_t boot_regs[2]; -extern char *efiloader_sig; /* Push sp magic to top of stack for call trace */ #define SWITCH_TO(rsp, to) \ @@ -91,7 +91,7 @@ void init_primary_pcpu(void) /* Clear BSS */ (void)memset(&ld_bss_start, 0U, (size_t)(&ld_bss_end - &ld_bss_start)); - init_acrn_multiboot_info(boot_regs[0], boot_regs[1], efiloader_sig); + init_acrn_multiboot_info(boot_regs[0], boot_regs[1]); init_debug_pre(); diff --git a/hypervisor/boot/include/multiboot.h b/hypervisor/boot/include/multiboot.h index cd929717c..e59706181 100644 --- a/hypervisor/boot/include/multiboot.h +++ b/hypervisor/boot/include/multiboot.h @@ -79,7 +79,7 @@ struct acrn_multiboot_info { struct efi_info mi_efi_info; }; -void init_acrn_multiboot_info(uint32_t magic, uint32_t info, char *sig); +void init_acrn_multiboot_info(uint32_t magic, uint32_t info); int32_t sanitize_acrn_multiboot_info(uint32_t magic, uint32_t info); struct acrn_multiboot_info *get_acrn_multiboot_info(void); diff --git a/hypervisor/boot/multiboot/multiboot.c b/hypervisor/boot/multiboot/multiboot.c index ce1dce357..fc2095a3f 100644 --- a/hypervisor/boot/multiboot/multiboot.c +++ b/hypervisor/boot/multiboot/multiboot.c @@ -67,7 +67,7 @@ static struct acrn_multiboot_info acrn_mbi = { 0U }; static int32_t mbi_status; -void init_acrn_multiboot_info(uint32_t magic, uint32_t info, char *sig) +void init_acrn_multiboot_info(uint32_t magic, uint32_t info) { if (boot_from_multiboot1(magic, info)) { struct multiboot_info *mbi = (struct multiboot_info *)(hpa2hva_early((uint64_t)info)); @@ -84,7 +84,7 @@ void init_acrn_multiboot_info(uint32_t magic, uint32_t info, char *sig) mbi_status = 0; #ifdef CONFIG_MULTIBOOT2 } else if (boot_from_multiboot2(magic)) { - mbi_status = multiboot2_to_acrn_mbi(&acrn_mbi, hpa2hva_early((uint64_t)info), sig); + mbi_status = multiboot2_to_acrn_mbi(&acrn_mbi, hpa2hva_early((uint64_t)info)); #endif } else { mbi_status = -ENODEV; diff --git a/hypervisor/boot/multiboot/multiboot2.c b/hypervisor/boot/multiboot/multiboot2.c index 377995232..e3611ac90 100644 --- a/hypervisor/boot/multiboot/multiboot2.c +++ b/hypervisor/boot/multiboot/multiboot2.c @@ -36,11 +36,11 @@ static void mb2_mods_to_mbi(struct acrn_multiboot_info *mbi, /** * @pre mbi != NULL && mb2_tag_efi64 != 0 */ -static void mb2_efi64_to_mbi(struct acrn_multiboot_info *mbi, const struct multiboot2_tag_efi64 *mb2_tag_efi64, - char *sig) +static void mb2_efi64_to_mbi(struct acrn_multiboot_info *mbi, const struct multiboot2_tag_efi64 *mb2_tag_efi64) { + const uint32_t efiloader_sig = 0x34364c45; /* "EL64" */ mbi->mi_efi_info.efi_systab = (uint32_t)(uint64_t)mb2_tag_efi64->pointer; - mbi->mi_efi_info.efi_loader_signature = (uint32_t)(uint64_t)sig; + mbi->mi_efi_info.efi_loader_signature = efiloader_sig; mbi->mi_flags |= MULTIBOOT_INFO_HAS_EFI64; } @@ -61,7 +61,7 @@ static void mb2_efimmap_to_mbi(struct acrn_multiboot_info *mbi, /** * @pre mbi != NULL */ -int32_t multiboot2_to_acrn_mbi(struct acrn_multiboot_info *mbi, void *mb2_info, char *sig) +int32_t multiboot2_to_acrn_mbi(struct acrn_multiboot_info *mbi, void *mb2_info) { int32_t ret = 0; struct multiboot2_tag *mb2_tag, *mb2_tag_end; @@ -92,7 +92,7 @@ int32_t multiboot2_to_acrn_mbi(struct acrn_multiboot_info *mbi, void *mb2_info, mbi->mi_acpi_rsdp_va = ((struct multiboot2_tag_new_acpi *)mb2_tag)->rsdp; break; case MULTIBOOT2_TAG_TYPE_EFI64: - mb2_efi64_to_mbi(mbi, (const struct multiboot2_tag_efi64 *)mb2_tag, sig); + mb2_efi64_to_mbi(mbi, (const struct multiboot2_tag_efi64 *)mb2_tag); break; case MULTIBOOT2_TAG_TYPE_EFI_MMAP: mb2_efimmap_to_mbi(mbi, (const struct multiboot2_tag_efi_mmap *)mb2_tag); diff --git a/hypervisor/boot/multiboot/multiboot_priv.h b/hypervisor/boot/multiboot/multiboot_priv.h index bb19a58a8..926493384 100644 --- a/hypervisor/boot/multiboot/multiboot_priv.h +++ b/hypervisor/boot/multiboot/multiboot_priv.h @@ -89,7 +89,7 @@ static inline bool boot_from_multiboot2(uint32_t magic) return (magic == MULTIBOOT2_INFO_MAGIC); } -int32_t multiboot2_to_acrn_mbi(struct acrn_multiboot_info *mbi, void *mb2_info, char *sig); +int32_t multiboot2_to_acrn_mbi(struct acrn_multiboot_info *mbi, void *mb2_info); #endif static inline bool boot_from_multiboot1(uint32_t magic, uint32_t info)