HV: modularization: use abi_mmap struct in acrn boot info
Use more generic abi_mmap struct to replace multiboot_mmap struct in acrn_boot_info; Tracked-On: #5661 Signed-off-by: Victor Sun <victor.sun@intel.com> Reviewed-by: Jason Chen CJ <jason.cj.chen@intel.com>
This commit is contained in:
parent
c59ea6c250
commit
82a1d4406c
|
@ -104,12 +104,12 @@ void init_e820(void)
|
|||
uint64_t top_addr_space = CONFIG_PLATFORM_RAM_SIZE + PLATFORM_LO_MMIO_SIZE;
|
||||
|
||||
struct acrn_boot_info *abi = get_acrn_boot_info();
|
||||
struct multiboot_mmap *mmap = abi->mi_mmap_entry;
|
||||
struct abi_mmap *mmap = abi->mmap_entry;
|
||||
|
||||
hv_e820_entries_nr = abi->mi_mmap_entries;
|
||||
hv_e820_entries_nr = abi->mmap_entries;
|
||||
|
||||
dev_dbg(DBG_LEVEL_E820, "mmap addr 0x%x entries %d\n",
|
||||
abi->mi_mmap_entry, hv_e820_entries_nr);
|
||||
abi->mmap_entry, hv_e820_entries_nr);
|
||||
|
||||
|
||||
for (i = 0U; i < hv_e820_entries_nr; i++) {
|
||||
|
|
|
@ -28,7 +28,7 @@ int32_t sanitize_acrn_boot_info(struct acrn_boot_info *abi)
|
|||
abi_status = -EINVAL;
|
||||
}
|
||||
|
||||
if (abi->mi_mmap_entries == 0U) {
|
||||
if (abi->mmap_entries == 0U) {
|
||||
pr_err("no boot mmap info found");
|
||||
abi_status = -EINVAL;
|
||||
}
|
||||
|
|
|
@ -31,6 +31,19 @@ struct abi_module {
|
|||
const char string[MAX_MOD_STRING_SIZE];
|
||||
};
|
||||
|
||||
/* ABI memory map types, compatible to Multiboot/Multiboot2/E820; */
|
||||
#define MMAP_TYPE_RAM 1U
|
||||
#define MMAP_TYPE_RESERVED 2U
|
||||
#define MMAP_TYPE_ACPI_RECLAIM 3U
|
||||
#define MMAP_TYPE_ACPI_NVS 4U
|
||||
#define MMAP_TYPE_UNUSABLE 5U
|
||||
|
||||
struct abi_mmap {
|
||||
uint64_t baseaddr;
|
||||
uint64_t length;
|
||||
uint32_t type;
|
||||
};
|
||||
|
||||
struct acrn_boot_info {
|
||||
|
||||
char protocol_name[MAX_PROTOCOL_NAME_SIZE];
|
||||
|
@ -40,8 +53,8 @@ struct acrn_boot_info {
|
|||
uint32_t mods_count;
|
||||
struct abi_module mods[MAX_MODULE_NUM];
|
||||
|
||||
uint32_t mi_mmap_entries;
|
||||
struct multiboot_mmap mi_mmap_entry[MAX_MMAP_ENTRIES];
|
||||
uint32_t mmap_entries;
|
||||
struct abi_mmap mmap_entry[MAX_MMAP_ENTRIES];
|
||||
|
||||
const void *mi_acpi_rsdp_va;
|
||||
struct efi_info mi_efi_info;
|
||||
|
|
|
@ -26,20 +26,21 @@ int32_t multiboot_to_acrn_bi(struct acrn_boot_info *abi, void *mb_info) {
|
|||
(char *)hpa2hva_early((uint64_t)mbi->mi_loader_name),
|
||||
strnlen_s((char *)hpa2hva_early((uint64_t)mbi->mi_loader_name), (MAX_LOADER_NAME_SIZE - 1U)));
|
||||
|
||||
abi->mi_mmap_entries = mbi->mi_mmap_length / sizeof(struct multiboot_mmap);
|
||||
abi->mmap_entries = mbi->mi_mmap_length / sizeof(struct multiboot_mmap);
|
||||
|
||||
if (((mbi->mi_flags & MULTIBOOT_INFO_HAS_MMAP) != 0U) && (abi->mi_mmap_entries != 0U) && (mmap != NULL)) {
|
||||
if (((mbi->mi_flags & MULTIBOOT_INFO_HAS_MMAP) != 0U) && (abi->mmap_entries != 0U) && (mmap != NULL)) {
|
||||
|
||||
if (abi->mi_mmap_entries > MAX_MMAP_ENTRIES) {
|
||||
abi->mi_mmap_entries = MAX_MMAP_ENTRIES;
|
||||
if (abi->mmap_entries > MAX_MMAP_ENTRIES) {
|
||||
abi->mmap_entries = MAX_MMAP_ENTRIES;
|
||||
}
|
||||
|
||||
(void)memcpy_s((void *)(&abi->mi_mmap_entry[0]),
|
||||
(abi->mi_mmap_entries * sizeof(struct multiboot_mmap)),
|
||||
mmap, (abi->mi_mmap_entries * sizeof(struct multiboot_mmap)));
|
||||
|
||||
for (i = 0U; i < abi->mmap_entries; i++) {
|
||||
abi->mmap_entry[i].baseaddr = (mmap + i)->baseaddr;
|
||||
abi->mmap_entry[i].length = (mmap + i)->length;
|
||||
abi->mmap_entry[i].type = (mmap + i)->type;
|
||||
}
|
||||
} else {
|
||||
abi->mi_mmap_entries = 0U;
|
||||
abi->mmap_entries = 0U;
|
||||
}
|
||||
|
||||
abi->mods_count = mbi->mi_mods_count;
|
||||
|
|
|
@ -19,15 +19,15 @@ static void mb2_mmap_to_abi(struct acrn_boot_info *abi, const struct multiboot2_
|
|||
struct multiboot2_mmap_entry *mb2_mmap = (struct multiboot2_mmap_entry *)mb2_tag_mmap->entries;
|
||||
|
||||
/* multiboot2 mmap tag header occupied 16 bytes */
|
||||
abi->mi_mmap_entries = (mb2_tag_mmap->size - 16U) / sizeof(struct multiboot2_mmap_entry);
|
||||
if (abi->mi_mmap_entries > MAX_MMAP_ENTRIES) {
|
||||
abi->mi_mmap_entries = MAX_MMAP_ENTRIES;
|
||||
abi->mmap_entries = (mb2_tag_mmap->size - 16U) / sizeof(struct multiboot2_mmap_entry);
|
||||
if (abi->mmap_entries > MAX_MMAP_ENTRIES) {
|
||||
abi->mmap_entries = MAX_MMAP_ENTRIES;
|
||||
}
|
||||
|
||||
for (i = 0U; i < abi->mi_mmap_entries; i++) {
|
||||
abi->mi_mmap_entry[i].baseaddr = (mb2_mmap + i)->addr;
|
||||
abi->mi_mmap_entry[i].length = (mb2_mmap + i)->len;
|
||||
abi->mi_mmap_entry[i].type = (mb2_mmap + i)->type;
|
||||
for (i = 0U; i < abi->mmap_entries; i++) {
|
||||
abi->mmap_entry[i].baseaddr = (mb2_mmap + i)->addr;
|
||||
abi->mmap_entry[i].length = (mb2_mmap + i)->len;
|
||||
abi->mmap_entry[i].type = (mb2_mmap + i)->type;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue