diff options
author | Corvin Köhne <corvink@FreeBSD.org> | 2022-11-04 11:30:37 +0000 |
---|---|---|
committer | Corvin Köhne <corvink@FreeBSD.org> | 2022-11-15 07:27:06 +0000 |
commit | 22a2e94f3805195bf8195c81f7fda4157ebae372 (patch) | |
tree | 504fcae533389e385b6d9f4f4ee97c92bbc71dc4 /usr.sbin | |
parent | ac3c2b3e38fb03b0d0e26ffa0527735575984ba2 (diff) | |
download | src-22a2e94f3805195bf8195c81f7fda4157ebae372.tar.gz src-22a2e94f3805195bf8195c81f7fda4157ebae372.zip |
Diffstat (limited to 'usr.sbin')
-rw-r--r-- | usr.sbin/bhyve/acpi.c | 52 |
1 files changed, 28 insertions, 24 deletions
diff --git a/usr.sbin/bhyve/acpi.c b/usr.sbin/bhyve/acpi.c index 55c8c9cb35fc..e823d2d41357 100644 --- a/usr.sbin/bhyve/acpi.c +++ b/usr.sbin/bhyve/acpi.c @@ -61,6 +61,7 @@ __FBSDID("$FreeBSD$"); #include <sys/errno.h> #include <sys/stat.h> +#include <err.h> #include <paths.h> #include <stdarg.h> #include <stdio.h> @@ -838,18 +839,26 @@ static int basl_load(struct vmctx *ctx, int fd, uint64_t off) { struct stat sb; - void *gaddr; + void *addr; if (fstat(fd, &sb) < 0) return (errno); - gaddr = paddr_guest2host(ctx, basl_acpi_base + off, sb.st_size); - if (gaddr == NULL) + addr = calloc(1, sb.st_size); + if (addr == NULL) return (EFAULT); - if (read(fd, gaddr, sb.st_size) < 0) + if (read(fd, addr, sb.st_size) < 0) return (errno); + struct basl_table *table; + + uint8_t name[ACPI_NAMESEG_SIZE + 1] = { 0 }; + memcpy(name, addr, sizeof(name) - 1 /* last char is '\0' */); + BASL_EXEC( + basl_table_create(&table, ctx, name, BASL_TABLE_ALIGNMENT, off)); + BASL_EXEC(basl_table_append_bytes(table, addr, sb.st_size)); + return (0); } @@ -968,30 +977,25 @@ acpi_build(struct vmctx *ctx, int ncpu) if (getenv("BHYVE_ACPI_KEEPTMPS")) basl_keep_temps = 1; - err = basl_make_templates(); + BASL_EXEC(basl_init()); + + BASL_EXEC(basl_make_templates()); /* * Run through all the ASL files, compiling them and * copying them into guest memory */ - if (err == 0) - err = basl_compile(ctx, basl_fwrite_rsdp, 0); - if (err == 0) - err = basl_compile(ctx, basl_fwrite_rsdt, RSDT_OFFSET); - if (err == 0) - err = basl_compile(ctx, basl_fwrite_xsdt, XSDT_OFFSET); - if (err == 0) - err = basl_compile(ctx, basl_fwrite_madt, MADT_OFFSET); - if (err == 0) - err = basl_compile(ctx, basl_fwrite_fadt, FADT_OFFSET); - if (err == 0) - err = basl_compile(ctx, basl_fwrite_hpet, HPET_OFFSET); - if (err == 0) - err = basl_compile(ctx, basl_fwrite_mcfg, MCFG_OFFSET); - if (err == 0) - err = basl_compile(ctx, basl_fwrite_facs, FACS_OFFSET); - if (err == 0) - err = basl_compile(ctx, basl_fwrite_dsdt, DSDT_OFFSET); + BASL_EXEC(basl_compile(ctx, basl_fwrite_rsdp, 0)); + BASL_EXEC(basl_compile(ctx, basl_fwrite_rsdt, RSDT_OFFSET)); + BASL_EXEC(basl_compile(ctx, basl_fwrite_xsdt, XSDT_OFFSET)); + BASL_EXEC(basl_compile(ctx, basl_fwrite_madt, MADT_OFFSET)); + BASL_EXEC(basl_compile(ctx, basl_fwrite_fadt, FADT_OFFSET)); + BASL_EXEC(basl_compile(ctx, basl_fwrite_hpet, HPET_OFFSET)); + BASL_EXEC(basl_compile(ctx, basl_fwrite_mcfg, MCFG_OFFSET)); + BASL_EXEC(basl_compile(ctx, basl_fwrite_facs, FACS_OFFSET)); + BASL_EXEC(basl_compile(ctx, basl_fwrite_dsdt, DSDT_OFFSET)); + + BASL_EXEC(basl_finish()); - return (err); + return (0); } |