diff --git a/usr.sbin/bhyve/e820.h b/usr.sbin/bhyve/e820.h --- a/usr.sbin/bhyve/e820.h +++ b/usr.sbin/bhyve/e820.h @@ -44,5 +44,6 @@ uint64_t e820_alloc(const uint64_t address, const uint64_t length, const uint64_t alignment, const enum e820_memory_type type, const enum e820_allocation_strategy strategy); +void e820_dump_table(void); struct qemu_fwcfg_item *e820_get_fwcfg_item(void); int e820_init(struct vmctx *const ctx); diff --git a/usr.sbin/bhyve/e820.c b/usr.sbin/bhyve/e820.c --- a/usr.sbin/bhyve/e820.c +++ b/usr.sbin/bhyve/e820.c @@ -53,6 +53,41 @@ static TAILQ_HEAD(e820_table, e820_element) e820_table = TAILQ_HEAD_INITIALIZER( e820_table); +static const char * +e820_get_type_name(const enum e820_memory_type type) +{ + switch (type) { + case E820_TYPE_MEMORY: + return "RAM "; + case E820_TYPE_RESERVED: + return "Reserved"; + case E820_TYPE_ACPI: + return "ACPI "; + case E820_TYPE_NVS: + return "NVS "; + default: + return "Unknown "; + } +} + +void +e820_dump_table(void) +{ + struct e820_element *element; + uint64_t i; + + fprintf(stderr, "E820 map:\n\r"); + + i = 0; + TAILQ_FOREACH(element, &e820_table, chain) { + fprintf(stderr, " (%4lu) [ %16lx, %16lx] %s\n\r", i, + element->base, element->end, + e820_get_type_name(element->type)); + + ++i; + } +} + struct qemu_fwcfg_item * e820_get_fwcfg_item(void) {