]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
acpi: Add a table start
authorSimon Glass <sjg@chromium.org>
Wed, 1 Dec 2021 16:02:46 +0000 (09:02 -0700)
committerSimon Glass <sjg@chromium.org>
Tue, 25 Jan 2022 18:44:36 +0000 (11:44 -0700)
It is useful to record the start of an ACPI table so that offsets from
that point can be easily calculated.

Add this to the context and set it before calling the writer method.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/core/acpi.c
include/dm/acpi.h

index e988a65ec515c38c615bb3dc88fe3b3fca1ad514..5425e4d0402c7b9e7f21be9b2312426ee1f10f52 100644 (file)
@@ -266,19 +266,18 @@ int acpi_recurse_method(struct acpi_ctx *ctx, struct udevice *parent,
 
        func = acpi_get_method(parent, method);
        if (func) {
-               void *start = ctx->current;
-
                log_debug("- method %d, %s %p\n", method, parent->name, func);
                ret = device_of_to_plat(parent);
                if (ret)
                        return log_msg_ret("ofdata", ret);
+               ctx->tab_start = ctx->current;
                ret = func(parent, ctx);
                if (ret)
                        return log_msg_ret("func", ret);
 
                /* Add the item to the internal list */
                if (type != TYPE_NONE) {
-                       ret = acpi_add_item(ctx, parent, type, start);
+                       ret = acpi_add_item(ctx, parent, type, ctx->tab_start);
                        if (ret)
                                return log_msg_ret("add", ret);
                }
index 0fa239eb3a898811a14d0a51c0eb3ddef93eb3e8..a2da57fe22470c71f920e7f3dc97f811597b2470 100644 (file)
@@ -43,6 +43,9 @@ enum acpi_dump_option {
  *
  * @base: Base address of ACPI tables
  * @current: Current address for writing
+ * @tab_start: Address of start of the table being written. This is set up
+ * before the writer or driver method is called. It must not be changed by the
+ * method
  * @rsdp: Pointer to the Root System Description Pointer, typically used when
  *     adding a new table. The RSDP holds pointers to the RSDT and XSDT.
  * @rsdt: Pointer to the Root System Description Table
@@ -56,6 +59,7 @@ enum acpi_dump_option {
 struct acpi_ctx {
        void *base;
        void *current;
+       void *tab_start;
        struct acpi_rsdp *rsdp;
        struct acpi_rsdt *rsdt;
        struct acpi_xsdt *xsdt;