diff options
author | Tim Wawrzynczak <twawrzynczak@chromium.org> | 2021-07-01 11:18:50 -0600 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2021-07-12 07:34:44 +0000 |
commit | c4ca2f63967c3ab274d068d50f98df584014101a (patch) | |
tree | 5dd9dd78999a117049b5de3c9ef8cfe85f20009f | |
parent | f16a5ec87104c6ab83a85ababdf9d2f43940ab5c (diff) |
acpi: Add function to simplify If (CondRefOf (..)) sequences
The new function is called acpigen_write_if_cond_refof(), and it must
be paired with a following acpigen_write_if_end() call.
Change-Id: I6e192a569f550ecb77ad264275d52f219eacaca1
Signed-off-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/56003
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
-rw-r--r-- | src/acpi/acpigen.c | 15 | ||||
-rw-r--r-- | src/include/acpi/acpigen.h | 2 |
2 files changed, 17 insertions, 0 deletions
diff --git a/src/acpi/acpigen.c b/src/acpi/acpigen.c index 9818dc296c..8320b6cacc 100644 --- a/src/acpi/acpigen.c +++ b/src/acpi/acpigen.c @@ -1501,6 +1501,21 @@ void acpigen_write_if_lequal_namestr_int(const char *namestr, uint64_t val) acpigen_write_integer(val); } +/* + * Generates ACPI code to check at runtime if an object named `namestring` + * exists, and leaves the If scope open to continue execute code when this + * is true. NOTE: Requires matching acpigen_write_if_end(). + * + * If (CondRefOf (NAME)) + */ +void acpigen_write_if_cond_ref_of(const char *namestring) +{ + acpigen_write_if(); + acpigen_emit_ext_op(COND_REFOF_OP); + acpigen_emit_namestring(namestring); + acpigen_emit_byte(ZERO_OP); /* ignore COND_REFOF_OP destination */ +} + /* Closes previously opened if statement and generates ACPI code for else statement. */ void acpigen_write_else(void) { diff --git a/src/include/acpi/acpigen.h b/src/include/acpi/acpigen.h index 2d0bb77d79..09ec4bce61 100644 --- a/src/include/acpi/acpigen.h +++ b/src/include/acpi/acpigen.h @@ -415,6 +415,8 @@ inline void acpigen_write_if_end(void) { acpigen_pop_len(); } +/* Emits If (CondRefOf(NAME)) */ +void acpigen_write_if_cond_ref_of(const char *namestring); void acpigen_write_else(void); void acpigen_write_shiftleft_op_int(uint8_t src_result, uint64_t count); void acpigen_write_to_buffer(uint8_t src, uint8_t dst); |