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