Files
acrn-hypervisor/hypervisor/boot/include/boot.h
Victor Sun c09e55c376 HV: modularizatoin: use abi_efi_info struct in acrn boot info
Previousely the efi_info structure in acrn_boot_info struct is defined as
same as Linux kernel so that the native efi info from host could be passed
to SOS zeropage with memcpy() api directly. Now replace it with abi_efi_info
struct to make the content more generic;

Tracked-On: #5661

Signed-off-by: Victor Sun <victor.sun@intel.com>
Reviewed-by: Jason Chen CJ <jason.cj.chen@intel.com>
2021-06-04 16:29:33 +08:00

82 lines
1.9 KiB
C

/*
* Copyright (C) 2018 Intel Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef BOOT_H
#define BOOT_H
#include <multiboot_std.h>
#include <efi.h>
#include <vm_configurations.h>
/* TODO: MAX_MMAP_ENTRIES shall be config by config tool, and same as E820_MAX_ENTRIES */
#define MAX_MMAP_ENTRIES 32U
#define MAX_BOOTARGS_SIZE 2048U
#define MAX_LOADER_NAME_SIZE 32U
#define MAX_MOD_STRING_SIZE 2048U
/* The modules in multiboot are: Pre-launched VM: kernel/ramdisk/acpi; SOS VM: kernel/ramdisk */
#define MAX_MODULE_NUM (3U * PRE_VM_NUM + 2U * SOS_VM_NUM)
/* The vACPI module size is fixed to 1MB */
#define ACPI_MODULE_SIZE MEM_1M
struct abi_module {
void *start; /* HVA */
uint32_t 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 abi_efi_info {
const void *system_table;
const void *memmap;
uint32_t memmap_size;
uint32_t memdesc_size;
uint32_t memdesc_version;
};
struct acrn_boot_info {
const char cmdline[MAX_BOOTARGS_SIZE];
const char loader_name[MAX_LOADER_NAME_SIZE];
uint32_t mods_count;
struct abi_module mods[MAX_MODULE_NUM];
uint32_t mmap_entries;
struct abi_mmap mmap_entry[MAX_MMAP_ENTRIES];
const void *mi_acpi_rsdp_va;
struct abi_efi_info efi_info;
};
static inline bool boot_from_uefi(struct acrn_boot_info *abi)
{
return (abi->efi_info.system_table != NULL);
}
int32_t init_multiboot_info(uint32_t *registers);
int32_t init_multiboot2_info(uint32_t *registers);
void init_acrn_boot_info(uint32_t *registers);
int32_t sanitize_acrn_boot_info(struct acrn_boot_info *abi);
struct acrn_boot_info *get_acrn_boot_info(void);
#endif /* BOOT_H */