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> 15 #include <linker_lists.h> 16 17 #define EFI_ST_SUCCESS 0 18 #define EFI_ST_FAILURE 1 19 20 /* 21 * Prints an error message. 22 * 23 * @... format string followed by fields to print 24 */ 25 #define efi_st_error(...) \ 26 (efi_st_printf("%s(%u):\nERROR: ", __FILE__, __LINE__), \ 27 efi_st_printf(__VA_ARGS__)) \ 28 29 /* 30 * A test may be setup and executed at boottime, 31 * it may be setup at boottime and executed at runtime, 32 * or it may be setup and executed at runtime. 33 */ 34 enum efi_test_phase { 35 EFI_EXECUTE_BEFORE_BOOTTIME_EXIT = 1, 36 EFI_SETUP_BEFORE_BOOTTIME_EXIT, 37 EFI_SETUP_AFTER_BOOTTIME_EXIT, 38 }; 39 40 extern struct efi_simple_text_output_protocol *con_out; 41 extern struct efi_simple_input_interface *con_in; 42 43 /* 44 * Exit the boot services. 45 * 46 * The size of the memory map is determined. 47 * Pool memory is allocated to copy the memory map. 48 * The memory amp is copied and the map key is obtained. 49 * The map key is used to exit the boot services. 50 */ 51 void efi_st_exit_boot_services(void); 52 53 /* 54 * Print a pointer to an u16 string 55 * 56 * @pointer: pointer 57 * @buf: pointer to buffer address 58 * on return position of terminating zero word 59 */ 60 void efi_st_printf(const char *fmt, ...) 61 __attribute__ ((format (__printf__, 1, 2))); 62 63 /* 64 * Compare memory. 65 * We cannot use lib/string.c due to different CFLAGS values. 66 * 67 * @buf1: first buffer 68 * @buf2: second buffer 69 * @length: number of bytes to compare 70 * @return: 0 if both buffers contain the same bytes 71 */ 72 int efi_st_memcmp(const void *buf1, const void *buf2, size_t length); 73 74 /* 75 * Reads an Unicode character from the input device. 76 * 77 * @return: Unicode character 78 */ 79 u16 efi_st_get_key(void); 80 81 /** 82 * struct efi_unit_test - EFI unit test 83 * 84 * An efi_unit_test provides a interface to an EFI unit test. 85 * 86 * @name: name of unit test 87 * @phase: specifies when setup and execute are executed 88 * @setup: set up the unit test 89 * @teardown: tear down the unit test 90 * @execute: execute the unit test 91 */ 92 struct efi_unit_test { 93 const char *name; 94 const enum efi_test_phase phase; 95 int (*setup)(const efi_handle_t handle, 96 const struct efi_system_table *systable); 97 int (*execute)(void); 98 int (*teardown)(void); 99 }; 100 101 /* Declare a new EFI unit test */ 102 #define EFI_UNIT_TEST(__name) \ 103 ll_entry_declare(struct efi_unit_test, __name, efi_unit_test) 104 105 #endif /* _EFI_SELFTEST_H */ 106