]>
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" |
853540c8 HS |
20 | /* |
21 | * Prints a message. | |
22 | */ | |
23 | #define efi_st_printf(...) \ | |
24 | (efi_st_printc(-1, __VA_ARGS__)) | |
25 | ||
623b3a57 HS |
26 | /* |
27 | * Prints an error message. | |
28 | * | |
29 | * @... format string followed by fields to print | |
30 | */ | |
31 | #define efi_st_error(...) \ | |
853540c8 HS |
32 | (efi_st_printc(EFI_LIGHTRED, "%s(%u):\nERROR: ", __FILE__, __LINE__), \ |
33 | efi_st_printc(EFI_LIGHTRED, __VA_ARGS__)) | |
623b3a57 | 34 | |
927ca890 HS |
35 | /* |
36 | * Prints a TODO message. | |
37 | * | |
38 | * @... format string followed by fields to print | |
39 | */ | |
40 | #define efi_st_todo(...) \ | |
853540c8 HS |
41 | (efi_st_printc(EFI_YELLOW, "%s(%u):\nTODO: ", __FILE__, __LINE__), \ |
42 | efi_st_printc(EFI_YELLOW, __VA_ARGS__)) \ | |
927ca890 | 43 | |
623b3a57 HS |
44 | /* |
45 | * A test may be setup and executed at boottime, | |
46 | * it may be setup at boottime and executed at runtime, | |
47 | * or it may be setup and executed at runtime. | |
48 | */ | |
49 | enum efi_test_phase { | |
50 | EFI_EXECUTE_BEFORE_BOOTTIME_EXIT = 1, | |
51 | EFI_SETUP_BEFORE_BOOTTIME_EXIT, | |
52 | EFI_SETUP_AFTER_BOOTTIME_EXIT, | |
53 | }; | |
54 | ||
55 | extern struct efi_simple_text_output_protocol *con_out; | |
3e603ec7 | 56 | extern struct efi_simple_text_input_protocol *con_in; |
623b3a57 HS |
57 | |
58 | /* | |
59 | * Exit the boot services. | |
60 | * | |
61 | * The size of the memory map is determined. | |
62 | * Pool memory is allocated to copy the memory map. | |
63 | * The memory amp is copied and the map key is obtained. | |
64 | * The map key is used to exit the boot services. | |
65 | */ | |
66 | void efi_st_exit_boot_services(void); | |
67 | ||
68 | /* | |
853540c8 | 69 | * Print a colored message |
623b3a57 | 70 | * |
853540c8 HS |
71 | * @color color, see constants in efi_api.h, use -1 for no color |
72 | * @fmt printf format | |
73 | * @... arguments to be printed | |
74 | * on return position of terminating zero word | |
623b3a57 | 75 | */ |
853540c8 HS |
76 | void efi_st_printc(int color, const char *fmt, ...) |
77 | __attribute__ ((format (__printf__, 2, 3))); | |
623b3a57 | 78 | |
262ff411 HS |
79 | /** |
80 | * efi_st_translate_char() - translate a unicode character to a string | |
81 | * | |
82 | * @code: unicode character | |
83 | * Return: string | |
84 | */ | |
85 | u16 *efi_st_translate_char(u16 code); | |
86 | ||
87 | /** | |
88 | * efi_st_translate_code() - translate a scan code to a human readable string | |
89 | * | |
90 | * @code: unicode character | |
91 | * Return: string | |
92 | */ | |
93 | u16 *efi_st_translate_code(u16 code); | |
94 | ||
d78e40d6 HS |
95 | /* |
96 | * Compare an u16 string to a char string. | |
97 | * | |
98 | * @buf1: u16 string | |
99 | * @buf2: char string | |
100 | * @return: 0 if both buffers contain the same bytes | |
101 | */ | |
102 | int efi_st_strcmp_16_8(const u16 *buf1, const char *buf2); | |
103 | ||
623b3a57 HS |
104 | /* |
105 | * Reads an Unicode character from the input device. | |
106 | * | |
107 | * @return: Unicode character | |
108 | */ | |
109 | u16 efi_st_get_key(void); | |
110 | ||
111 | /** | |
112 | * struct efi_unit_test - EFI unit test | |
113 | * | |
114 | * An efi_unit_test provides a interface to an EFI unit test. | |
115 | * | |
116 | * @name: name of unit test | |
117 | * @phase: specifies when setup and execute are executed | |
118 | * @setup: set up the unit test | |
119 | * @teardown: tear down the unit test | |
120 | * @execute: execute the unit test | |
d78e40d6 | 121 | * @on_request: test is only executed on request |
623b3a57 HS |
122 | */ |
123 | struct efi_unit_test { | |
124 | const char *name; | |
125 | const enum efi_test_phase phase; | |
126 | int (*setup)(const efi_handle_t handle, | |
127 | const struct efi_system_table *systable); | |
128 | int (*execute)(void); | |
129 | int (*teardown)(void); | |
d78e40d6 | 130 | bool on_request; |
623b3a57 HS |
131 | }; |
132 | ||
133 | /* Declare a new EFI unit test */ | |
134 | #define EFI_UNIT_TEST(__name) \ | |
135 | ll_entry_declare(struct efi_unit_test, __name, efi_unit_test) | |
136 | ||
137 | #endif /* _EFI_SELFTEST_H */ |