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;
|
uint64_t top_addr_space = CONFIG_PLATFORM_RAM_SIZE + PLATFORM_LO_MMIO_SIZE;
|
||||||
|
|
||||||
struct acrn_boot_info *abi = get_acrn_boot_info();
|
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",
|
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++) {
|
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;
|
abi_status = -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (abi->mi_mmap_entries == 0U) {
|
if (abi->mmap_entries == 0U) {
|
||||||
pr_err("no boot mmap info found");
|
pr_err("no boot mmap info found");
|
||||||
abi_status = -EINVAL;
|
abi_status = -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,19 @@ struct abi_module {
|
||||||
const char string[MAX_MOD_STRING_SIZE];
|
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 {
|
struct acrn_boot_info {
|
||||||
|
|
||||||
char protocol_name[MAX_PROTOCOL_NAME_SIZE];
|
char protocol_name[MAX_PROTOCOL_NAME_SIZE];
|
||||||
|
@ -40,8 +53,8 @@ struct acrn_boot_info {
|
||||||
uint32_t mods_count;
|
uint32_t mods_count;
|
||||||
struct abi_module mods[MAX_MODULE_NUM];
|
struct abi_module mods[MAX_MODULE_NUM];
|
||||||
|
|
||||||
uint32_t mi_mmap_entries;
|
uint32_t mmap_entries;
|
||||||
struct multiboot_mmap mi_mmap_entry[MAX_MMAP_ENTRIES];
|
struct abi_mmap mmap_entry[MAX_MMAP_ENTRIES];
|
||||||
|
|
||||||
const void *mi_acpi_rsdp_va;
|
const void *mi_acpi_rsdp_va;
|
||||||
struct efi_info mi_efi_info;
|
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),
|
(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)));
|
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) {
|
if (abi->mmap_entries > MAX_MMAP_ENTRIES) {
|
||||||
abi->mi_mmap_entries = MAX_MMAP_ENTRIES;
|
abi->mmap_entries = MAX_MMAP_ENTRIES;
|
||||||
}
|
}
|
||||||
|
|
||||||
(void)memcpy_s((void *)(&abi->mi_mmap_entry[0]),
|
for (i = 0U; i < abi->mmap_entries; i++) {
|
||||||
(abi->mi_mmap_entries * sizeof(struct multiboot_mmap)),
|
abi->mmap_entry[i].baseaddr = (mmap + i)->baseaddr;
|
||||||
mmap, (abi->mi_mmap_entries * sizeof(struct multiboot_mmap)));
|
abi->mmap_entry[i].length = (mmap + i)->length;
|
||||||
|
abi->mmap_entry[i].type = (mmap + i)->type;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
abi->mi_mmap_entries = 0U;
|
abi->mmap_entries = 0U;
|
||||||
}
|
}
|
||||||
|
|
||||||
abi->mods_count = mbi->mi_mods_count;
|
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;
|
struct multiboot2_mmap_entry *mb2_mmap = (struct multiboot2_mmap_entry *)mb2_tag_mmap->entries;
|
||||||
|
|
||||||
/* multiboot2 mmap tag header occupied 16 bytes */
|
/* multiboot2 mmap tag header occupied 16 bytes */
|
||||||
abi->mi_mmap_entries = (mb2_tag_mmap->size - 16U) / sizeof(struct multiboot2_mmap_entry);
|
abi->mmap_entries = (mb2_tag_mmap->size - 16U) / sizeof(struct multiboot2_mmap_entry);
|
||||||
if (abi->mi_mmap_entries > MAX_MMAP_ENTRIES) {
|
if (abi->mmap_entries > MAX_MMAP_ENTRIES) {
|
||||||
abi->mi_mmap_entries = MAX_MMAP_ENTRIES;
|
abi->mmap_entries = MAX_MMAP_ENTRIES;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0U; i < abi->mi_mmap_entries; i++) {
|
for (i = 0U; i < abi->mmap_entries; i++) {
|
||||||
abi->mi_mmap_entry[i].baseaddr = (mb2_mmap + i)->addr;
|
abi->mmap_entry[i].baseaddr = (mb2_mmap + i)->addr;
|
||||||
abi->mi_mmap_entry[i].length = (mb2_mmap + i)->len;
|
abi->mmap_entry[i].length = (mb2_mmap + i)->len;
|
||||||
abi->mi_mmap_entry[i].type = (mb2_mmap + i)->type;
|
abi->mmap_entry[i].type = (mb2_mmap + i)->type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue