| // SPDX-License-Identifier: GPL-2.0-or-later |
| /* |
| * Tests for acpi command |
| */ |
| |
| #include <linux/bitops.h> |
| #include <test/cmd.h> |
| #include <test/ut.h> |
| |
| #define HAVE_RSDP BIT(0) |
| #define HAVE_XSDT BIT(1) |
| #define HAVE_FADT BIT(2) |
| #define HAVE_ALL (HAVE_RSDP | HAVE_XSDT | HAVE_FADT) |
| |
| /** |
| * cmd_test_acpi() - test the acpi command |
| */ |
| static int cmd_test_acpi(struct unit_test_state *uts) |
| { |
| unsigned int actual = 0; |
| int ret; |
| |
| /* |
| * Check that some mandatory ACPI tables exist: |
| * - RSDP |
| * - RSDT or XSDT |
| * - FADT |
| */ |
| ut_assertok(run_commandf("acpi list")); |
| ut_assert_nextline("Name Base Size Detail"); |
| ut_assert_nextline("---- ---------------- ----- ----------------------------"); |
| for (;;) { |
| ret = console_record_readline(uts->actual_str, sizeof(uts->actual_str)); |
| if (ret == -ENOENT) { |
| ut_asserteq(HAVE_ALL, actual); |
| |
| return 0; |
| } |
| if (ret < 0) |
| ut_asserteq(0, ret); |
| |
| if (!strncmp("RSDP", uts->actual_str, 4)) |
| actual |= HAVE_RSDP; |
| else if (!strncmp("RSDT", uts->actual_str, 4)) |
| actual |= HAVE_XSDT; |
| else if (!strncmp("XSDT", uts->actual_str, 4)) |
| actual |= HAVE_XSDT; |
| else if (!strncmp("FACP", uts->actual_str, 4)) |
| actual |= HAVE_FADT; |
| } |
| } |
| CMD_TEST(cmd_test_acpi, UTF_CONSOLE); |