mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-12-17 18:32:40 +00:00
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>
82 lines
1.9 KiB
C
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 */
|