From 92d75be20b2b209f2da8448d1e2f0644cdba3a41 Mon Sep 17 00:00:00 2001 From: Felix Held Date: Wed, 26 Feb 2025 19:05:59 +0100 Subject: [PATCH] src/acpigen: implement acpigen_write_create[_buffer]_bit_field Implement functions to write the AML bytes corresponding to CreateBitField for both OP buffers and named buffers. TEST=Calling 'acpigen_write_create_buffer_bit_field' results in the AML code sequence being written which decompiles to ASL as expected. Change-Id: Ia5c06c2e8564b64de386871b2faf79c433e5a1da Signed-off-by: Felix Held Reviewed-on: https://review.coreboot.org/c/coreboot/+/86630 Reviewed-by: Matt DeVillier Tested-by: build bot (Jenkins) --- src/acpi/acpigen.c | 10 ++++++++++ src/include/acpi/acpigen.h | 2 ++ 2 files changed, 12 insertions(+) diff --git a/src/acpi/acpigen.c b/src/acpi/acpigen.c index eaf95e018f..e577d8f96c 100644 --- a/src/acpi/acpigen.c +++ b/src/acpi/acpigen.c @@ -2461,6 +2461,11 @@ static void _create_field(uint8_t aml_op, uint8_t srcop, size_t byte_offset, con acpigen_emit_namestring(name); } +void acpigen_write_create_bit_field(uint8_t op, size_t bit_offset, const char *name) +{ + _create_field(CREATE_BIT_OP, op, bit_offset, name); +} + void acpigen_write_create_byte_field(uint8_t op, size_t byte_offset, const char *name) { _create_field(CREATE_BYTE_OP, op, byte_offset, name); @@ -2490,6 +2495,11 @@ static void _create_buffer_field(uint8_t aml_op, const char *src_buf, size_t byt acpigen_emit_namestring(field); } +void acpigen_write_create_buffer_bit_field(const char *src_buf, size_t bit_offset, const char *field) +{ + _create_buffer_field(CREATE_BIT_OP, src_buf, bit_offset, field); +} + void acpigen_write_create_buffer_byte_field(const char *src_buf, size_t byte_offset, const char *field) { _create_buffer_field(CREATE_BYTE_OP, src_buf, byte_offset, field); diff --git a/src/include/acpi/acpigen.h b/src/include/acpi/acpigen.h index 56b4f780f7..a83be04048 100644 --- a/src/include/acpi/acpigen.h +++ b/src/include/acpi/acpigen.h @@ -535,10 +535,12 @@ void acpigen_write_pld(const struct acpi_pld *pld); void acpigen_write_ADR(uint64_t adr); struct soundwire_address; void acpigen_write_ADR_soundwire_device(const struct soundwire_address *address); +void acpigen_write_create_bit_field(uint8_t op, size_t bit_offset, const char *name); void acpigen_write_create_byte_field(uint8_t op, size_t byte_offset, const char *name); void acpigen_write_create_word_field(uint8_t op, size_t byte_offset, const char *name); void acpigen_write_create_dword_field(uint8_t op, size_t byte_offset, const char *name); void acpigen_write_create_qword_field(uint8_t op, size_t byte_offset, const char *name); +void acpigen_write_create_buffer_bit_field(const char *src_buf, size_t bit_offset, const char *field); void acpigen_write_create_buffer_byte_field(const char *src_buf, size_t byte_offset, const char *name); void acpigen_write_create_buffer_word_field(const char *src_buf, size_t byte_offset, const char *name); void acpigen_write_create_buffer_dword_field(const char *src_buf, size_t byte_offset, const char *name);