]>
Commit | Line | Data |
---|---|---|
f739fcd8 | 1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
623b3a57 HS |
2 | /* |
3 | * EFI application loader | |
4 | * | |
5 | * Copyright (c) 2017 Heinrich Schuchardt <[email protected]> | |
623b3a57 HS |
6 | */ |
7 | ||
8 | #ifndef _EFI_SELFTEST_H | |
9 | #define _EFI_SELFTEST_H | |
10 | ||
11 | #include <common.h> | |
12 | #include <efi.h> | |
13 | #include <efi_api.h> | |
d78e40d6 | 14 | #include <efi_loader.h> |
623b3a57 HS |
15 | #include <linker_lists.h> |
16 | ||
e67e7249 HS |
17 | #define EFI_ST_SUCCESS 0 |
18 | #define EFI_ST_FAILURE 1 | |
a9a25cc3 | 19 | #define EFI_ST_SUCCESS_STR L"SUCCESS" |
7fec249b HS |
20 | |
21 | /** | |
22 | * efi_st_printf() - print a message | |
23 | * | |
24 | * @...: format string followed by fields to print | |
853540c8 HS |
25 | */ |
26 | #define efi_st_printf(...) \ | |
27 | (efi_st_printc(-1, __VA_ARGS__)) | |
28 | ||
7fec249b HS |
29 | /** |
30 | * efi_st_error() - prints an error message | |
623b3a57 | 31 | * |
7fec249b | 32 | * @...: format string followed by fields to print |
623b3a57 HS |
33 | */ |
34 | #define efi_st_error(...) \ | |
853540c8 HS |
35 | (efi_st_printc(EFI_LIGHTRED, "%s(%u):\nERROR: ", __FILE__, __LINE__), \ |
36 | efi_st_printc(EFI_LIGHTRED, __VA_ARGS__)) | |
623b3a57 | 37 | |
7fec249b HS |
38 | /** |
39 | * efi_st_todo() - prints a TODO message | |
927ca890 | 40 | * |
7fec249b | 41 | * @...: format string followed by fields to print |
927ca890 HS |
42 | */ |
43 | #define efi_st_todo(...) \ | |
853540c8 HS |
44 | (efi_st_printc(EFI_YELLOW, "%s(%u):\nTODO: ", __FILE__, __LINE__), \ |
45 | efi_st_printc(EFI_YELLOW, __VA_ARGS__)) \ | |
927ca890 | 46 | |
7fec249b HS |
47 | /** |
48 | * enum efi_test_phase - phase when test will be executed | |
49 | * | |
623b3a57 HS |
50 | * A test may be setup and executed at boottime, |
51 | * it may be setup at boottime and executed at runtime, | |
52 | * or it may be setup and executed at runtime. | |
53 | */ | |
54 | enum efi_test_phase { | |
7fec249b HS |
55 | /** |
56 | * @EFI_EXECUTE_BEFORE_BOOTTIME_EXIT: - execute before ExitBootServices | |
57 | * | |
58 | * Setup, execute, and teardown are executed before ExitBootServices(). | |
59 | */ | |
623b3a57 | 60 | EFI_EXECUTE_BEFORE_BOOTTIME_EXIT = 1, |
7fec249b HS |
61 | /** |
62 | * @EFI_SETUP_BEFORE_BOOTTIME_EXIT: - setup before ExitBootServices | |
63 | * | |
64 | * Setup is executed before ExitBootServices() while execute, and | |
65 | * teardown are executed after ExitBootServices(). | |
66 | */ | |
623b3a57 | 67 | EFI_SETUP_BEFORE_BOOTTIME_EXIT, |
7fec249b HS |
68 | /** |
69 | * @EFI_SETUP_AFTER_BOOTTIME_EXIT: - setup after ExitBootServices | |
70 | * | |
71 | * Setup, execute, and teardown are executed after ExitBootServices(). | |
72 | */ | |
623b3a57 HS |
73 | EFI_SETUP_AFTER_BOOTTIME_EXIT, |
74 | }; | |
75 | ||
76 | extern struct efi_simple_text_output_protocol *con_out; | |
3e603ec7 | 77 | extern struct efi_simple_text_input_protocol *con_in; |
623b3a57 | 78 | |
7fec249b HS |
79 | /** |
80 | * efi_st_exit_boot_services() - exit the boot services | |
623b3a57 | 81 | * |
7fec249b HS |
82 | * * The size of the memory map is determined. |
83 | * * Pool memory is allocated to copy the memory map. | |
84 | * * The memory map is copied and the map key is obtained. | |
85 | * * The map key is used to exit the boot services. | |
623b3a57 HS |
86 | */ |
87 | void efi_st_exit_boot_services(void); | |
88 | ||
7fec249b HS |
89 | /** |
90 | * efi_st_printc() - print a colored message | |
623b3a57 | 91 | * |
7fec249b HS |
92 | * @color: color, see constants in efi_api.h, use -1 for no color |
93 | * @fmt: printf style format string | |
94 | * @...: arguments to be printed | |
623b3a57 | 95 | */ |
853540c8 HS |
96 | void efi_st_printc(int color, const char *fmt, ...) |
97 | __attribute__ ((format (__printf__, 2, 3))); | |
623b3a57 | 98 | |
262ff411 | 99 | /** |
7fec249b | 100 | * efi_st_translate_char() - translate a Unicode character to a string |
262ff411 | 101 | * |
7fec249b | 102 | * @code: Unicode character |
262ff411 HS |
103 | * Return: string |
104 | */ | |
105 | u16 *efi_st_translate_char(u16 code); | |
106 | ||
107 | /** | |
108 | * efi_st_translate_code() - translate a scan code to a human readable string | |
109 | * | |
7fec249b HS |
110 | * This function translates the scan code returned by the simple text input |
111 | * protocol to a human readable string, e.g. 0x04 is translated to L"Left". | |
112 | * | |
113 | * @code: scan code | |
114 | * Return: Unicode string | |
262ff411 HS |
115 | */ |
116 | u16 *efi_st_translate_code(u16 code); | |
117 | ||
7fec249b HS |
118 | /** |
119 | * efi_st_strcmp_16_8() - compare an u16 string to a char string | |
120 | * | |
121 | * This function compares each u16 value to the char value at the same | |
122 | * position. This function is only useful for ANSI strings. | |
d78e40d6 HS |
123 | * |
124 | * @buf1: u16 string | |
125 | * @buf2: char string | |
7fec249b | 126 | * Return: 0 if both buffers contain equivalent strings |
d78e40d6 HS |
127 | */ |
128 | int efi_st_strcmp_16_8(const u16 *buf1, const char *buf2); | |
129 | ||
7fec249b HS |
130 | /** |
131 | * efi_st_get_key() - reads an Unicode character from the input device | |
623b3a57 | 132 | * |
7fec249b | 133 | * Return: Unicode character |
623b3a57 HS |
134 | */ |
135 | u16 efi_st_get_key(void); | |
136 | ||
137 | /** | |
138 | * struct efi_unit_test - EFI unit test | |
139 | * | |
7fec249b | 140 | * The &struct efi_unit_test structure provides a interface to an EFI unit test. |
623b3a57 | 141 | * |
7fec249b | 142 | * @name: name of the unit test used in the user interface |
623b3a57 | 143 | * @phase: specifies when setup and execute are executed |
7fec249b HS |
144 | * @setup: set up function of the unit test |
145 | * @execute: execute function of the unit test | |
146 | * @teardown: tear down function of the unit test | |
147 | * @on_request: flag indicating that the test shall only be executed on request | |
623b3a57 HS |
148 | */ |
149 | struct efi_unit_test { | |
150 | const char *name; | |
151 | const enum efi_test_phase phase; | |
152 | int (*setup)(const efi_handle_t handle, | |
153 | const struct efi_system_table *systable); | |
154 | int (*execute)(void); | |
155 | int (*teardown)(void); | |
d78e40d6 | 156 | bool on_request; |
623b3a57 HS |
157 | }; |
158 | ||
7fec249b HS |
159 | /** |
160 | * EFI_UNIT_TEST() - macro to declare a new EFI unit test | |
161 | * | |
162 | * The macro EFI_UNIT_TEST() declares an EFI unit test using the &struct | |
163 | * efi_unit_test structure. The test is added to a linker generated list which | |
164 | * is evaluated by the 'bootefi selftest' command. | |
165 | * | |
166 | * @__name: string identifying the unit test in the linker generated list | |
167 | */ | |
623b3a57 HS |
168 | #define EFI_UNIT_TEST(__name) \ |
169 | ll_entry_declare(struct efi_unit_test, __name, efi_unit_test) | |
170 | ||
171 | #endif /* _EFI_SELFTEST_H */ |