// SPDX-License-Identifier: GPL-2.0+
/*
 * QEMU x86 specific E820 table generation
 *
 * (C) Copyright 2015 Miao Yan <yanmiaobest@gmail.com>
 * (C) Copyright 2019 Bin Meng <bmeng.cn@gmail.com>
 */

#include <common.h>
#include <env_internal.h>
#include <asm/e820.h>
#include <asm/arch/qemu.h>

DECLARE_GLOBAL_DATA_PTR;

unsigned int install_e820_map(unsigned int max_entries,
			      struct e820_entry *entries)
{
	u64 high_mem_size;
	int n = 0;

	entries[n].addr = 0;
	entries[n].size = ISA_START_ADDRESS;
	entries[n].type = E820_RAM;
	n++;

	entries[n].addr = ISA_START_ADDRESS;
	entries[n].size = ISA_END_ADDRESS - ISA_START_ADDRESS;
	entries[n].type = E820_RESERVED;
	n++;

	/*
	 * since we use memalign(malloc) to allocate high memory for
	 * storing ACPI tables, we need to reserve them in e820 tables,
	 * otherwise kernel will reclaim them and data will be corrupted
	 */
	entries[n].addr = ISA_END_ADDRESS;
	entries[n].size = gd->relocaddr - TOTAL_MALLOC_LEN - ISA_END_ADDRESS;
	entries[n].type = E820_RAM;
	n++;

	/* for simplicity, reserve entire malloc space */
	entries[n].addr = gd->relocaddr - TOTAL_MALLOC_LEN;
	entries[n].size = TOTAL_MALLOC_LEN;
	entries[n].type = E820_RESERVED;
	n++;

	entries[n].addr = gd->relocaddr;
	entries[n].size = qemu_get_low_memory_size() - gd->relocaddr;
	entries[n].type = E820_RESERVED;
	n++;

	entries[n].addr = CONFIG_PCIE_ECAM_BASE;
	entries[n].size = CONFIG_PCIE_ECAM_SIZE;
	entries[n].type = E820_RESERVED;
	n++;

	high_mem_size = qemu_get_high_memory_size();
	if (high_mem_size) {
		entries[n].addr = SZ_4G;
		entries[n].size = high_mem_size;
		entries[n].type = E820_RAM;
		n++;
	}

	return n;
}
