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 <heinrich.schuchardt@canonical.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Heinrich Schuchardt 2023-11-21 15:41:27 +01:00 committed by Tom Rini
parent 049ee90903
commit bda020e762
2 changed files with 11 additions and 1 deletions

View file

@ -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];
};

View file

@ -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);