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