]>
Commit | Line | Data |
---|---|---|
623b3a57 HS |
1 | /* |
2 | * EFI application loader | |
3 | * | |
4 | * Copyright (c) 2017 Heinrich Schuchardt <[email protected]> | |
5 | * | |
6 | * SPDX-License-Identifier: GPL-2.0+ | |
7 | */ | |
8 | ||
9 | #ifndef _EFI_SELFTEST_H | |
10 | #define _EFI_SELFTEST_H | |
11 | ||
12 | #include <common.h> | |
13 | #include <efi.h> | |
14 | #include <efi_api.h> | |
d78e40d6 | 15 | #include <efi_loader.h> |
623b3a57 HS |
16 | #include <linker_lists.h> |
17 | ||
e67e7249 HS |
18 | #define EFI_ST_SUCCESS 0 |
19 | #define EFI_ST_FAILURE 1 | |
20 | ||
853540c8 HS |
21 | /* |
22 | * Prints a message. | |
23 | */ | |
24 | #define efi_st_printf(...) \ | |
25 | (efi_st_printc(-1, __VA_ARGS__)) | |
26 | ||
623b3a57 HS |
27 | /* |
28 | * Prints an error message. | |
29 | * | |
30 | * @... format string followed by fields to print | |
31 | */ | |
32 | #define efi_st_error(...) \ | |
853540c8 HS |
33 | (efi_st_printc(EFI_LIGHTRED, "%s(%u):\nERROR: ", __FILE__, __LINE__), \ |
34 | efi_st_printc(EFI_LIGHTRED, __VA_ARGS__)) | |
623b3a57 | 35 | |
927ca890 HS |
36 | /* |
37 | * Prints a TODO message. | |
38 | * | |
39 | * @... format string followed by fields to print | |
40 | */ | |
41 | #define efi_st_todo(...) \ | |
853540c8 HS |
42 | (efi_st_printc(EFI_YELLOW, "%s(%u):\nTODO: ", __FILE__, __LINE__), \ |
43 | efi_st_printc(EFI_YELLOW, __VA_ARGS__)) \ | |
927ca890 | 44 | |
623b3a57 HS |
45 | /* |
46 | * A test may be setup and executed at boottime, | |
47 | * it may be setup at boottime and executed at runtime, | |
48 | * or it may be setup and executed at runtime. | |
49 | */ | |
50 | enum efi_test_phase { | |
51 | EFI_EXECUTE_BEFORE_BOOTTIME_EXIT = 1, | |
52 | EFI_SETUP_BEFORE_BOOTTIME_EXIT, | |
53 | EFI_SETUP_AFTER_BOOTTIME_EXIT, | |
54 | }; | |
55 | ||
56 | extern struct efi_simple_text_output_protocol *con_out; | |
57 | extern struct efi_simple_input_interface *con_in; | |
58 | ||
59 | /* | |
60 | * Exit the boot services. | |
61 | * | |
62 | * The size of the memory map is determined. | |
63 | * Pool memory is allocated to copy the memory map. | |
64 | * The memory amp is copied and the map key is obtained. | |
65 | * The map key is used to exit the boot services. | |
66 | */ | |
67 | void efi_st_exit_boot_services(void); | |
68 | ||
69 | /* | |
853540c8 | 70 | * Print a colored message |
623b3a57 | 71 | * |
853540c8 HS |
72 | * @color color, see constants in efi_api.h, use -1 for no color |
73 | * @fmt printf format | |
74 | * @... arguments to be printed | |
75 | * on return position of terminating zero word | |
623b3a57 | 76 | */ |
853540c8 HS |
77 | void efi_st_printc(int color, const char *fmt, ...) |
78 | __attribute__ ((format (__printf__, 2, 3))); | |
623b3a57 | 79 | |
5ca23ed5 HS |
80 | /* |
81 | * Compare memory. | |
82 | * We cannot use lib/string.c due to different CFLAGS values. | |
83 | * | |
84 | * @buf1: first buffer | |
85 | * @buf2: second buffer | |
86 | * @length: number of bytes to compare | |
87 | * @return: 0 if both buffers contain the same bytes | |
88 | */ | |
89 | int efi_st_memcmp(const void *buf1, const void *buf2, size_t length); | |
90 | ||
d78e40d6 HS |
91 | /* |
92 | * Compare an u16 string to a char string. | |
93 | * | |
94 | * @buf1: u16 string | |
95 | * @buf2: char string | |
96 | * @return: 0 if both buffers contain the same bytes | |
97 | */ | |
98 | int efi_st_strcmp_16_8(const u16 *buf1, const char *buf2); | |
99 | ||
623b3a57 HS |
100 | /* |
101 | * Reads an Unicode character from the input device. | |
102 | * | |
103 | * @return: Unicode character | |
104 | */ | |
105 | u16 efi_st_get_key(void); | |
106 | ||
107 | /** | |
108 | * struct efi_unit_test - EFI unit test | |
109 | * | |
110 | * An efi_unit_test provides a interface to an EFI unit test. | |
111 | * | |
112 | * @name: name of unit test | |
113 | * @phase: specifies when setup and execute are executed | |
114 | * @setup: set up the unit test | |
115 | * @teardown: tear down the unit test | |
116 | * @execute: execute the unit test | |
d78e40d6 | 117 | * @on_request: test is only executed on request |
623b3a57 HS |
118 | */ |
119 | struct efi_unit_test { | |
120 | const char *name; | |
121 | const enum efi_test_phase phase; | |
122 | int (*setup)(const efi_handle_t handle, | |
123 | const struct efi_system_table *systable); | |
124 | int (*execute)(void); | |
125 | int (*teardown)(void); | |
d78e40d6 | 126 | bool on_request; |
623b3a57 HS |
127 | }; |
128 | ||
129 | /* Declare a new EFI unit test */ | |
130 | #define EFI_UNIT_TEST(__name) \ | |
131 | ll_entry_declare(struct efi_unit_test, __name, efi_unit_test) | |
132 | ||
133 | #endif /* _EFI_SELFTEST_H */ |