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>
This commit is contained in:
Patrick Rudolph 2019-08-08 12:47:30 +02:00 committed by Patrick Rudolph
parent 9fe3d692c7
commit 32bae49435
2 changed files with 46 additions and 0 deletions

View File

@ -403,6 +403,37 @@ void acpigen_write_opregion(struct opregion *opreg)
acpigen_write_integer(opreg->regionlen); 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) static void acpigen_write_field_length(uint32_t len)
{ {
uint8_t i, j; uint8_t i, j;

View File

@ -410,6 +410,21 @@ void acpigen_write_rom(void *bios, const size_t length);
* length. * length.
*/ */
void acpigen_write_opregion(struct opregion *opreg); 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 * Generate ACPI AML code for Field
* This function takes input region name, fieldlist, count & flags. * This function takes input region name, fieldlist, count & flags.