1*32640292SAndy Fiddaman /*- 2*32640292SAndy Fiddaman * SPDX-License-Identifier: BSD-2-Clause 3*32640292SAndy Fiddaman * 4*32640292SAndy Fiddaman * Copyright (c) 2021 Beckhoff Automation GmbH & Co. KG 5*32640292SAndy Fiddaman * Author: Corvin Köhne <c.koehne@beckhoff.com> 6*32640292SAndy Fiddaman */ 7*32640292SAndy Fiddaman 8*32640292SAndy Fiddaman #pragma once 9*32640292SAndy Fiddaman 10*32640292SAndy Fiddaman #include <vmmapi.h> 11*32640292SAndy Fiddaman 12*32640292SAndy Fiddaman #include "qemu_fwcfg.h" 13*32640292SAndy Fiddaman 14*32640292SAndy Fiddaman enum e820_memory_type { 15*32640292SAndy Fiddaman E820_TYPE_MEMORY = 1, 16*32640292SAndy Fiddaman E820_TYPE_RESERVED = 2, 17*32640292SAndy Fiddaman E820_TYPE_ACPI = 3, 18*32640292SAndy Fiddaman E820_TYPE_NVS = 4 19*32640292SAndy Fiddaman }; 20*32640292SAndy Fiddaman 21*32640292SAndy Fiddaman enum e820_allocation_strategy { 22*32640292SAndy Fiddaman /* allocate any address */ 23*32640292SAndy Fiddaman E820_ALLOCATE_ANY, 24*32640292SAndy Fiddaman /* allocate lowest address larger than address */ 25*32640292SAndy Fiddaman E820_ALLOCATE_LOWEST, 26*32640292SAndy Fiddaman /* allocate highest address lower than address */ 27*32640292SAndy Fiddaman E820_ALLOCATE_HIGHEST, 28*32640292SAndy Fiddaman /* allocate a specific address */ 29*32640292SAndy Fiddaman E820_ALLOCATE_SPECIFIC 30*32640292SAndy Fiddaman }; 31*32640292SAndy Fiddaman 32*32640292SAndy Fiddaman struct e820_entry { 33*32640292SAndy Fiddaman uint64_t base; 34*32640292SAndy Fiddaman uint64_t length; 35*32640292SAndy Fiddaman uint32_t type; 36*32640292SAndy Fiddaman } __packed; 37*32640292SAndy Fiddaman 38*32640292SAndy Fiddaman #define E820_ALIGNMENT_NONE 1 39*32640292SAndy Fiddaman 40*32640292SAndy Fiddaman uint64_t e820_alloc(const uint64_t address, const uint64_t length, 41*32640292SAndy Fiddaman const uint64_t alignment, const enum e820_memory_type type, 42*32640292SAndy Fiddaman const enum e820_allocation_strategy strategy); 43*32640292SAndy Fiddaman void e820_dump_table(void); 44*32640292SAndy Fiddaman struct qemu_fwcfg_item *e820_get_fwcfg_item(void); 45*32640292SAndy Fiddaman int e820_init(struct vmctx *const ctx); 46