diff options
| author | Heinrich Schuchardt <[email protected]> | 2023-11-21 15:41:27 +0100 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2023-12-13 18:39:06 -0500 |
| commit | bda020e762c4c391e4bf13fd73c093e757f92b3e (patch) | |
| tree | d0be5fcb67802fa0c7fe2ff46d3cd2715f602d83 | |
| parent | 049ee9090399679826a6294098efc2242f5e63ad (diff) | |
acpi: fix struct acpi_xsdt
The size of the ACPI table header is not a multiple of 8. We have to mark
struct acpi_xsdt as packed to correctly access field Entry.
Add a unit test for the offsets of field Entry in the RSDT and XSDT tables.
Signed-off-by: Heinrich Schuchardt <[email protected]>
Reviewed-by: Simon Glass <[email protected]>
| -rw-r--r-- | include/acpi/acpi_table.h | 2 | ||||
| -rw-r--r-- | test/dm/acpi.c | 10 |
2 files changed, 11 insertions, 1 deletions
diff --git a/include/acpi/acpi_table.h b/include/acpi/acpi_table.h index a3b67259e64..20ac3b51ba7 100644 --- a/include/acpi/acpi_table.h +++ b/include/acpi/acpi_table.h @@ -80,7 +80,7 @@ struct acpi_rsdt { }; /* XSDT (Extended System Description Table) */ -struct acpi_xsdt { +struct __packed acpi_xsdt { struct acpi_table_header header; u64 entry[MAX_ACPI_TABLES]; }; diff --git a/test/dm/acpi.c b/test/dm/acpi.c index 5236b3994e2..7e661ee1166 100644 --- a/test/dm/acpi.c +++ b/test/dm/acpi.c @@ -747,3 +747,13 @@ static int dm_test_acpi_find_table(struct unit_test_state *uts) return 0; } DM_TEST(dm_test_acpi_find_table, 0); + +/* Test offsets in RSDT, XSDT */ +static int dm_test_acpi_offsets(struct unit_test_state *uts) +{ + ut_asserteq(36, offsetof(struct acpi_rsdt, entry)); + ut_asserteq(36, offsetof(struct acpi_xsdt, entry)); + + return 0; +} +DM_TEST(dm_test_acpi_offsets, 0); |
