From f4eda2d429ecd85a99008c6c4fc74cf81b2f1498 Mon Sep 17 00:00:00 2001 From: Corey Minyard Date: Fri, 10 Jun 2016 04:15:43 -0500 Subject: [PATCH] bios: Add tests for the IPMI ACPI and SMBIOS entries Signed-off-by: Corey Minyard Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- tests/acpi-test-data/pc/DSDT.ipmikcs | Bin 0 -> 5575 bytes tests/acpi-test-data/q35/DSDT.ipmibt | Bin 0 -> 8340 bytes tests/bios-tables-test.c | 60 +++++++++++++++++++++++++-- 3 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 tests/acpi-test-data/pc/DSDT.ipmikcs create mode 100644 tests/acpi-test-data/q35/DSDT.ipmibt diff --git a/tests/acpi-test-data/pc/DSDT.ipmikcs b/tests/acpi-test-data/pc/DSDT.ipmikcs new file mode 100644 index 0000000000000000000000000000000000000000..f10cd9e296c942b66d6f2404f1a95fe5cc4a6796 GIT binary patch literal 5575 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 d`4@+8ml^1a?_D%uAR3qA#rsdt_tables_addr[i + 1]; /* fadt is first */ test_dst_table(&ssdt_table, addr); g_array_append_val(data->tables, ssdt_table); @@ -661,7 +663,6 @@ static void test_smbios_structs(test_data *data) uint32_t addr = ep_table->structure_table_address; int i, len, max_len = 0; uint8_t type, prv, crt; - uint8_t required_struct_types[] = {0, 1, 3, 4, 16, 17, 19, 32, 127}; /* walk the smbios tables */ for (i = 0; i < ep_table->number_of_structures; i++) { @@ -701,8 +702,8 @@ static void test_smbios_structs(test_data *data) g_assert_cmpuint(ep_table->max_structure_size, ==, max_len); /* required struct types must all be present */ - for (i = 0; i < ARRAY_SIZE(required_struct_types); i++) { - g_assert(test_bit(required_struct_types[i], struct_bitmap)); + for (i = 0; i < data->required_struct_types_len; i++) { + g_assert(test_bit(data->required_struct_types[i], struct_bitmap)); } } @@ -742,6 +743,10 @@ static void test_acpi_one(const char *params, test_data *data) g_free(args); } +static uint8_t base_required_struct_types[] = { + 0, 1, 3, 4, 16, 17, 19, 32, 127 +}; + static void test_acpi_piix4_tcg(void) { test_data data; @@ -751,6 +756,8 @@ static void test_acpi_piix4_tcg(void) */ memset(&data, 0, sizeof(data)); data.machine = MACHINE_PC; + data.required_struct_types = base_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types); test_acpi_one("-machine accel=tcg", &data); free_test_data(&data); } @@ -762,6 +769,8 @@ static void test_acpi_piix4_tcg_bridge(void) memset(&data, 0, sizeof(data)); data.machine = MACHINE_PC; data.variant = ".bridge"; + data.required_struct_types = base_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types); test_acpi_one("-machine accel=tcg -device pci-bridge,chassis_nr=1", &data); free_test_data(&data); } @@ -772,6 +781,8 @@ static void test_acpi_q35_tcg(void) memset(&data, 0, sizeof(data)); data.machine = MACHINE_Q35; + data.required_struct_types = base_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types); test_acpi_one("-machine q35,accel=tcg", &data); free_test_data(&data); } @@ -783,11 +794,50 @@ static void test_acpi_q35_tcg_bridge(void) memset(&data, 0, sizeof(data)); data.machine = MACHINE_Q35; data.variant = ".bridge"; + data.required_struct_types = base_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types); test_acpi_one("-machine q35,accel=tcg -device pci-bridge,chassis_nr=1", &data); free_test_data(&data); } +static uint8_t ipmi_required_struct_types[] = { + 0, 1, 3, 4, 16, 17, 19, 32, 38, 127 +}; + +static void test_acpi_q35_tcg_ipmi(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_Q35; + data.variant = ".ipmibt"; + data.required_struct_types = ipmi_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(ipmi_required_struct_types); + test_acpi_one("-machine q35,accel=tcg -device ipmi-bmc-sim,id=bmc0" + " -device isa-ipmi-bt,bmc=bmc0", + &data); + free_test_data(&data); +} + +static void test_acpi_piix4_tcg_ipmi(void) +{ + test_data data; + + /* Supplying -machine accel argument overrides the default (qtest). + * This is to make guest actually run. + */ + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_PC; + data.variant = ".ipmikcs"; + data.required_struct_types = ipmi_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(ipmi_required_struct_types); + test_acpi_one("-machine accel=tcg -device ipmi-bmc-sim,id=bmc0" + " -device isa-ipmi-kcs,irq=0,bmc=bmc0", + &data); + free_test_data(&data); +} + int main(int argc, char *argv[]) { const char *arch = qtest_get_arch(); @@ -804,6 +854,8 @@ int main(int argc, char *argv[]) qtest_add_func("acpi/piix4/tcg/bridge", test_acpi_piix4_tcg_bridge); qtest_add_func("acpi/q35/tcg", test_acpi_q35_tcg); qtest_add_func("acpi/q35/tcg/bridge", test_acpi_q35_tcg_bridge); + qtest_add_func("acpi/piix4/tcg/ipmi", test_acpi_piix4_tcg_ipmi); + qtest_add_func("acpi/q35/tcg/ipmi", test_acpi_q35_tcg_ipmi); } ret = g_test_run(); boot_sector_cleanup(disk); -- 2.50.1