acpi: Add a table start

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>
This commit is contained in:
Simon Glass 2021-12-01 09:02:46 -07:00
parent 383bf1bc9e
commit fb746fdec6
2 changed files with 6 additions and 3 deletions

View 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);
}

View 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;