acrn-hypervisor/hypervisor/include/arch/x86/asm/e820.h
Shuo A Liu d965f6e6a1 hv: Enlarge E820_MAX_ENTRIES to 64
e820_alloc_memory() splits one E820 entry into two entries. With vEPT
enabled, e820_alloc_memory() is called one more. On some platforms, the
e820 entries might exceed 32.

Enlarge E820_MAX_ENTRIES to 64. Please note, it must be less than 128
due to constrain of zeropage. Linux kernel defines it as 128.

Tracked-On: #6168
Signed-off-by: Shuo A Liu <shuo.a.liu@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
2021-06-09 10:07:05 +08:00

48 lines
1.2 KiB
C

/*
* Copyright (C) 2018 Intel Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef E820_H
#define E820_H
#include <types.h>
/* E820 memory types */
#define E820_TYPE_RAM 1U /* EFI 1, 2, 3, 4, 5, 6, 7 */
#define E820_TYPE_RESERVED 2U
/* EFI 0, 11, 12, 13 (everything not used elsewhere) */
#define E820_TYPE_ACPI_RECLAIM 3U /* EFI 9 */
#define E820_TYPE_ACPI_NVS 4U /* EFI 10 */
#define E820_TYPE_UNUSABLE 5U /* EFI 8 */
#define E820_MAX_ENTRIES 64U
/** Defines a single entry in an E820 memory map. */
struct e820_entry {
/** The base address of the memory range. */
uint64_t baseaddr;
/** The length of the memory range. */
uint64_t length;
/** The type of memory region. */
uint32_t type;
} __packed;
struct mem_range {
uint64_t mem_bottom;
uint64_t mem_top;
uint64_t total_mem_size;
};
/* HV read multiboot header to get e820 entries info and calc total RAM info */
void init_e820(void);
uint64_t e820_alloc_memory(uint32_t size_arg, uint64_t max_addr);
/* get total number of the e820 entries */
uint32_t get_e820_entries_count(void);
/* get the e802 entiries */
const struct e820_entry *get_e820_entry(void);
#endif