]>
Commit | Line | Data |
---|---|---|
8c588a58 HS |
1 | // SPDX-License-Identifier: GPL-2.0+ |
2 | /* | |
3 | * efi_selftest_rtc | |
4 | * | |
5 | * Copyright (c) 2018 Heinrich Schuchardt <[email protected]> | |
6 | * | |
7 | * Test the real time clock runtime services. | |
8 | */ | |
9 | ||
10 | #include <efi_selftest.h> | |
11 | ||
12 | #define EFI_ST_NO_RTC "Could not read real time clock\n" | |
13 | ||
14 | static struct efi_runtime_services *runtime; | |
15 | ||
16 | /* | |
17 | * Setup unit test. | |
18 | * | |
19 | * @handle: handle of the loaded image | |
20 | * @systable: system table | |
21 | * @return: EFI_ST_SUCCESS for success | |
22 | */ | |
23 | static int setup(const efi_handle_t handle, | |
24 | const struct efi_system_table *systable) | |
25 | { | |
26 | runtime = systable->runtime; | |
27 | return EFI_ST_SUCCESS; | |
28 | } | |
29 | ||
30 | /* | |
31 | * Execute unit test. | |
32 | * | |
33 | * Display current time. | |
34 | * | |
35 | * @return: EFI_ST_SUCCESS for success | |
36 | */ | |
37 | static int execute(void) | |
38 | { | |
39 | efi_status_t ret; | |
40 | struct efi_time tm; | |
41 | ||
42 | /* Display current time */ | |
43 | ret = runtime->get_time(&tm, NULL); | |
44 | if (ret != EFI_SUCCESS) { | |
45 | #ifdef CONFIG_CMD_DATE | |
46 | efi_st_error(EFI_ST_NO_RTC); | |
47 | return EFI_ST_FAILURE; | |
48 | #else | |
49 | efi_st_todo(EFI_ST_NO_RTC); | |
50 | return EFI_ST_SUCCESS; | |
51 | #endif | |
52 | } else { | |
53 | efi_st_printf("Time according to real time clock: " | |
54 | "%.4u-%.2u-%.2u %.2u:%.2u:%.2u\n", | |
55 | tm.year, tm.month, tm.day, | |
56 | tm.hour, tm.minute, tm.second); | |
57 | } | |
58 | ||
59 | return EFI_ST_SUCCESS; | |
60 | } | |
61 | ||
62 | EFI_UNIT_TEST(rtc) = { | |
63 | .name = "real time clock", | |
64 | .phase = EFI_EXECUTE_BEFORE_BOOTTIME_EXIT, | |
65 | .setup = setup, | |
66 | .execute = execute, | |
67 | }; |