diff options
author | Igor Mammedov <imammedo@redhat.com> | 2019-05-02 16:51:57 +0200 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2019-05-20 18:40:02 -0400 |
commit | 97256e799fedd47aee8ceb6bad69e6f3e6b339f3 (patch) | |
tree | 5942362fc64e541ef81b6e5cf342a03f107ee9c1 | |
parent | a37d5472b3d3ae0d8dc47ed5371c4ac505b32996 (diff) |
tests: acpi: add a way to start tests with UEFI firmware
For testcase to use UEFI firmware, one needs to provide and specify
firmware and varstore blob names in test_data { uefi_fl1, uefi_fl2 }
fields respectively and RAM start address plus size where to look for
test structure signature. Additionally testcase should specify
bootable cdrom image from uefi-boot-images with EFI test utility.
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Message-Id: <1556808723-226478-10-git-send-email-imammedo@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
-rw-r--r-- | tests/bios-tables-test.c | 52 |
1 files changed, 35 insertions, 17 deletions
diff --git a/tests/bios-tables-test.c b/tests/bios-tables-test.c index 4d13a3cce6..84e1ce2972 100644 --- a/tests/bios-tables-test.c +++ b/tests/bios-tables-test.c @@ -26,6 +26,11 @@ typedef struct { const char *machine; const char *variant; + const char *uefi_fl1; + const char *uefi_fl2; + const char *cd; + const uint64_t ram_start; + const uint64_t scan_len; uint64_t rsdp_addr; uint8_t rsdp_table[36 /* ACPI 2.0+ RSDP size */]; GArray *tables; @@ -77,13 +82,6 @@ static void free_test_data(test_data *data) g_array_free(data->tables, true); } -static void test_acpi_rsdp_address(test_data *data) -{ - uint32_t off = acpi_find_rsdp_address(data->qts); - g_assert_cmphex(off, <, 0x100000); - data->rsdp_addr = off; -} - static void test_acpi_rsdp_table(test_data *data) { uint8_t *rsdp_table = data->rsdp_table; @@ -524,21 +522,41 @@ static void test_smbios_structs(test_data *data) static void test_acpi_one(const char *params, test_data *data) { char *args; - - /* Disable kernel irqchip to be able to override apic irq0. */ - args = g_strdup_printf("-machine %s,accel=%s,kernel-irqchip=off " - "-net none -display none %s " - "-drive id=hd0,if=none,file=%s,format=raw " - "-device ide-hd,drive=hd0 ", - data->machine, "kvm:tcg", - params ? params : "", disk); + bool use_uefi = data->uefi_fl1 && data->uefi_fl2; + + if (use_uefi) { + /* + * TODO: convert '-drive if=pflash' to new syntax (see e33763be7cd3) + * when arm/virt boad starts to support it. + */ + args = g_strdup_printf("-machine %s,accel=%s -nodefaults -nographic " + "-drive if=pflash,format=raw,file=%s,readonly " + "-drive if=pflash,format=raw,file=%s,snapshot=on -cdrom %s %s", + data->machine, "kvm:tcg", data->uefi_fl1, data->uefi_fl2, + data->cd, params ? params : ""); + + } else { + /* Disable kernel irqchip to be able to override apic irq0. */ + args = g_strdup_printf("-machine %s,accel=%s,kernel-irqchip=off " + "-net none -display none %s " + "-drive id=hd0,if=none,file=%s,format=raw " + "-device ide-hd,drive=hd0 ", + data->machine, "kvm:tcg", params ? params : "", disk); + } data->qts = qtest_init(args); - boot_sector_test(data->qts); + if (use_uefi) { + g_assert(data->scan_len); + data->rsdp_addr = acpi_find_rsdp_address_uefi(data->qts, + data->ram_start, data->scan_len); + } else { + boot_sector_test(data->qts); + data->rsdp_addr = acpi_find_rsdp_address(data->qts); + g_assert_cmphex(data->rsdp_addr, <, 0x100000); + } data->tables = g_array_new(false, true, sizeof(AcpiSdtTable)); - test_acpi_rsdp_address(data); test_acpi_rsdp_table(data); test_acpi_rxsdt_table(data); test_acpi_fadt_table(data); |