diff options
author | Patrick Rudolph <patrick.rudolph@9elements.com> | 2019-08-08 12:47:30 +0200 |
---|---|---|
committer | Patrick Rudolph <siro@das-labor.org> | 2019-12-12 13:16:57 +0000 |
commit | 32bae49435bc6eb2f590ad685ff63076c5c16436 (patch) | |
tree | 21cbe01250bf2e0a4f75161636124450250af599 /src/arch | |
parent | 9fe3d692c741a873317d0b1738b12145ff9c800e (diff) |
acpigen: Add methods for mutex operations
Tested on Linux 5.2:
Dumped and decoded the ACPI tables using iasl.
Change-Id: I79310b0f9e2297cf8428d11598935164caf95968
Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/37637
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Felix Held <felix-coreboot@felixheld.de>
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/x86/acpigen.c | 31 | ||||
-rw-r--r-- | src/arch/x86/include/arch/acpigen.h | 15 |
2 files changed, 46 insertions, 0 deletions
diff --git a/src/arch/x86/acpigen.c b/src/arch/x86/acpigen.c index 1d75889018..cc724a0cc1 100644 --- a/src/arch/x86/acpigen.c +++ b/src/arch/x86/acpigen.c @@ -403,6 +403,37 @@ void acpigen_write_opregion(struct opregion *opreg) acpigen_write_integer(opreg->regionlen); } +/* + * Generate ACPI AML code for Mutex + * Arg0: Pointer to name of mutex + * Arg1: Initial value of mutex + */ +void acpigen_write_mutex(const char *name, const uint8_t flags) +{ + /* MutexOp */ + acpigen_emit_ext_op(MUTEX_OP); + /* NameString 4 chars only */ + acpigen_emit_simple_namestring(name); + acpigen_emit_byte(flags); +} + +void acpigen_write_acquire(const char *name, const uint16_t val) +{ + /* AcquireOp */ + acpigen_emit_ext_op(ACQUIRE_OP); + /* NameString 4 chars only */ + acpigen_emit_simple_namestring(name); + acpigen_emit_word(val); +} + +void acpigen_write_release(const char *name) +{ + /* ReleaseOp */ + acpigen_emit_ext_op(RELEASE_OP); + /* NameString 4 chars only */ + acpigen_emit_simple_namestring(name); +} + static void acpigen_write_field_length(uint32_t len) { uint8_t i, j; diff --git a/src/arch/x86/include/arch/acpigen.h b/src/arch/x86/include/arch/acpigen.h index 6fd9f73e05..8b8c873fb5 100644 --- a/src/arch/x86/include/arch/acpigen.h +++ b/src/arch/x86/include/arch/acpigen.h @@ -411,6 +411,21 @@ void acpigen_write_rom(void *bios, const size_t length); */ void acpigen_write_opregion(struct opregion *opreg); /* + * Generate ACPI AML code for Mutex + * This function takes mutex name and initial value. + */ +void acpigen_write_mutex(const char *name, const uint8_t flags); +/* + * Generate ACPI AML code for Acquire + * This function takes mutex name and privilege value. + */ +void acpigen_write_acquire(const char *name, const uint16_t val); +/* + * Generate ACPI AML code for Release + * This function takes mutex name. + */ +void acpigen_write_release(const char *name); +/* * Generate ACPI AML code for Field * This function takes input region name, fieldlist, count & flags. */ |