summaryrefslogtreecommitdiff
path: root/arch/x86
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2021-12-01 09:02:49 -0700
committerSimon Glass <sjg@chromium.org>2022-01-25 11:44:36 -0700
commit31c27eb83084e77921b82e7e631ecd6ae8b904da (patch)
tree86e723f085caabbfd47c4a0a5cd1783f87fcf1c8 /arch/x86
parentcc1f8c39882c5100ec07dfa46e32ff395d792b94 (diff)
x86: Use the ACPI table writer
Use the new ACPI writer to write the ACPI tables. At present this is all done in one monolithic function. Future work will split this out. Unfortunately the QFW write_acpi_tables() function conflicts with the 'writer' version, so disable that for sandbox. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/lib/acpi_table.c21
1 files changed, 4 insertions, 17 deletions
diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c
index f57323b5c3..321faaeb18 100644
--- a/arch/x86/lib/acpi_table.c
+++ b/arch/x86/lib/acpi_table.c
@@ -503,10 +503,10 @@ static int acpi_create_ssdt(struct acpi_ctx *ctx,
/*
* QEMU's version of write_acpi_tables is defined in drivers/misc/qfw.c
*/
-ulong write_acpi_tables(ulong start_addr)
+static int write_acpi_tables_x86(struct acpi_ctx *ctx,
+ const struct acpi_writer *entry)
{
const int thl = sizeof(struct acpi_table_header);
- struct acpi_ctx *ctx;
struct acpi_facs *facs;
struct acpi_table_header *dsdt;
struct acpi_fadt *fadt;
@@ -516,22 +516,11 @@ ulong write_acpi_tables(ulong start_addr)
struct acpi_madt *madt;
struct acpi_csrt *csrt;
struct acpi_spcr *spcr;
- void *start;
int aml_len;
ulong addr;
int ret;
int i;
- ctx = malloc(sizeof(*ctx));
- if (!ctx)
- return log_msg_ret("mem", -ENOMEM);
-
- start = map_sysmem(start_addr, 0);
-
- debug("ACPI: Writing ACPI tables at %lx\n", start_addr);
-
- acpi_reset_items();
- acpi_setup_ctx(ctx, start);
acpi_setup_base_tables(ctx);
debug("ACPI: * FACS\n");
@@ -674,14 +663,12 @@ ulong write_acpi_tables(ulong start_addr)
acpi_write_dev_tables(ctx);
- addr = map_to_sysmem(ctx->current);
- debug("current = %lx\n", addr);
-
acpi_rsdp_addr = (unsigned long)ctx->rsdp;
debug("ACPI: done\n");
- return addr;
+ return 0;
}
+ACPI_WRITER(x86, NULL, write_acpi_tables_x86, 0);
ulong acpi_get_rsdp_addr(void)
{