xref: /illumos-gate/usr/src/cmd/bhyve/e820.h (revision 32640292339b07090f10ce34d455f98711077343)
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