mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-04-29 20:24:00 +00:00
The coding guideline rule C-TY-12 requires that 'all type conversions shall be explicit'. Especially implicit cases on the signedness of variables shall be avoided. This patch either adds explicit type casts or adjust local variable types to make sure that Booleans, signed and unsigned integers are not used mixedly. This patch has no semantic changes. Tracked-On: #6776 Signed-off-by: Junjie Mao <junjie.mao@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
80 lines
1.7 KiB
C
80 lines
1.7 KiB
C
/*
|
|
* Copyright (C) 2021 Intel Corporation.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#include <types.h>
|
|
#include <errno.h>
|
|
#include <asm/pgtable.h>
|
|
#include <boot.h>
|
|
#include <rtl.h>
|
|
#include <logmsg.h>
|
|
|
|
static struct acrn_boot_info acrn_bi = { 0 };
|
|
|
|
/**
|
|
* @pre (p_start != NULL) && (p_end != NULL)
|
|
*/
|
|
void get_boot_mods_range(uint64_t *p_start, uint64_t *p_end)
|
|
{
|
|
uint32_t i;
|
|
uint64_t start = ~0UL, end = 0UL;
|
|
struct acrn_boot_info *abi = get_acrn_boot_info();
|
|
|
|
for (i = 0; i < abi->mods_count; i++) {
|
|
if (hva2hpa(abi->mods[i].start) < start) {
|
|
start = hva2hpa(abi->mods[i].start);
|
|
}
|
|
if (hva2hpa(abi->mods[i].start + abi->mods[i].size) > end) {
|
|
end = hva2hpa(abi->mods[i].start + abi->mods[i].size);
|
|
}
|
|
}
|
|
*p_start = start;
|
|
*p_end = end;
|
|
}
|
|
|
|
void init_acrn_boot_info(uint32_t *registers)
|
|
{
|
|
(void)init_multiboot_info(registers);
|
|
/* TODO: add more boot protocol support here */
|
|
}
|
|
|
|
int32_t sanitize_acrn_boot_info(struct acrn_boot_info *abi)
|
|
{
|
|
int32_t abi_status = 0;
|
|
|
|
if (abi->mods_count == 0U) {
|
|
pr_err("no boot module info found");
|
|
abi_status = -EINVAL;
|
|
}
|
|
|
|
if (abi->mmap_entries == 0U) {
|
|
pr_err("no boot mmap info found");
|
|
abi_status = -EINVAL;
|
|
}
|
|
|
|
printf("%s environment detected.\n", boot_from_uefi(abi) ? "UEFI" : "Non-UEFI");
|
|
if (boot_from_uefi(abi) && ((abi->uefi_info.memmap == 0U) || (abi->uefi_info.memmap_hi != 0U))) {
|
|
pr_err("no efi memmap found below 4GB space!");
|
|
abi_status = -EINVAL;
|
|
}
|
|
|
|
if (abi->loader_name[0] == '\0') {
|
|
pr_err("no bootloader name found!");
|
|
abi_status = -EINVAL;
|
|
} else {
|
|
printf("%s Bootloader: %s\n", abi->protocol_name, abi->loader_name);
|
|
}
|
|
|
|
return abi_status;
|
|
}
|
|
|
|
/*
|
|
* @post retval != NULL
|
|
*/
|
|
struct acrn_boot_info *get_acrn_boot_info(void)
|
|
{
|
|
return &acrn_bi;
|
|
}
|