diff options
author | Furquan Shaikh <furquan@google.com> | 2020-04-27 23:06:30 -0700 |
---|---|---|
committer | Furquan Shaikh <furquan@google.com> | 2020-04-29 08:43:52 +0000 |
commit | 2c213d35b0cdcc6def4431c736c5bc64abe160fb (patch) | |
tree | 4642f33d63ebdc211aad1431770caab05ea86caf | |
parent | f510c75d649ba7e4f8a441174b8d9c0b7e0c7c9b (diff) | |
download | coreboot-2c213d35b0cdcc6def4431c736c5bc64abe160fb.tar.xz |
arch/x86/acpigen: Add helpers for Store() and If (Lequal (...))
This change adds the following acpigen helpers:
a. acpigen_write_store_op_to_namestr: This generates ACPI code for
storing an ACPI OP to name string
b. acpigen_write_if_lequal_namestr_int: This generates ACPI code for
checking if operand1 and operand2 are equal where operand1 is
namestring and operand2 is an integer.
Change-Id: I84c158361c0725c2927f06be35391e61f627a453
Signed-off-by: Furquan Shaikh <furquan@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/40783
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
-rw-r--r-- | src/arch/x86/acpigen.c | 22 | ||||
-rw-r--r-- | src/arch/x86/include/arch/acpigen.h | 2 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/arch/x86/acpigen.c b/src/arch/x86/acpigen.c index 715c38b598..82654e18dd 100644 --- a/src/arch/x86/acpigen.c +++ b/src/arch/x86/acpigen.c @@ -1186,6 +1186,14 @@ void acpigen_write_store_ops(uint8_t src, uint8_t dst) acpigen_emit_byte(dst); } +/* Store (src, "namestr") */ +void acpigen_write_store_op_to_namestr(uint8_t src, const char *dst) +{ + acpigen_write_store(); + acpigen_emit_byte(src); + acpigen_emit_namestring(dst); +} + /* Or (arg1, arg2, res) */ void acpigen_write_or(uint8_t arg1, uint8_t arg2, uint8_t res) { @@ -1274,6 +1282,20 @@ void acpigen_write_if_lequal_op_int(uint8_t op, uint64_t val) acpigen_write_integer(val); } +/* + * Generates ACPI code for checking if operand1 and operand2 are equal, where, + * operand1 is namestring and operand2 is an integer. + * + * If (Lequal ("namestr", val)) + */ +void acpigen_write_if_lequal_namestr_int(const char *namestr, uint64_t val) +{ + acpigen_write_if(); + acpigen_emit_byte(LEQUAL_OP); + acpigen_emit_namestring(namestr); + acpigen_write_integer(val); +} + void acpigen_write_else(void) { acpigen_emit_byte(ELSE_OP); diff --git a/src/arch/x86/include/arch/acpigen.h b/src/arch/x86/include/arch/acpigen.h index 0eee7ffea7..3a74db11e9 100644 --- a/src/arch/x86/include/arch/acpigen.h +++ b/src/arch/x86/include/arch/acpigen.h @@ -351,6 +351,7 @@ void acpigen_write_power_res(const char *name, uint8_t level, uint16_t order, void acpigen_write_sleep(uint64_t sleep_ms); void acpigen_write_store(void); void acpigen_write_store_ops(uint8_t src, uint8_t dst); +void acpigen_write_store_op_to_namestr(uint8_t src, const char *dst); void acpigen_write_or(uint8_t arg1, uint8_t arg2, uint8_t res); void acpigen_write_xor(uint8_t arg1, uint8_t arg2, uint8_t res); void acpigen_write_and(uint8_t arg1, uint8_t arg2, uint8_t res); @@ -361,6 +362,7 @@ void acpigen_write_debug_op(uint8_t op); void acpigen_write_if(void); void acpigen_write_if_and(uint8_t arg1, uint8_t arg2); void acpigen_write_if_lequal_op_int(uint8_t op, uint64_t val); +void acpigen_write_if_lequal_namestr_int(const char *namestr, uint64_t val); void acpigen_write_else(void); void acpigen_write_to_buffer(uint8_t src, uint8_t dst); void acpigen_write_to_integer(uint8_t src, uint8_t dst); |