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