1 // SPDX-License-Identifier: GPL-2.0+
3 * efi_selftest_textinput
5 * Copyright (c) 2018 Heinrich Schuchardt <xypron.glpk@gmx.de>
7 * Provides a unit test for the EFI_SIMPLE_TEXT_INPUT_PROTOCOL.
8 * The unicode character and the scan code are printed for text
9 * input. To run the test:
11 * setenv efi_selftest text input
15 #include <efi_selftest.h>
17 static struct efi_boot_services *boottime;
22 * @handle: handle of the loaded image
23 * @systable: system table
24 * @return: EFI_ST_SUCCESS for success
26 static int setup(const efi_handle_t handle,
27 const struct efi_system_table *systable)
29 boottime = systable->boottime;
31 return EFI_ST_SUCCESS;
37 * @return: EFI_ST_SUCCESS for success
39 static int execute(void)
41 struct efi_input_key input_key = {0};
44 efi_st_printf("Waiting for your input\n");
45 efi_st_printf("To terminate type 'x'\n");
48 /* Wait for next key */
50 ret = con_in->read_key_stroke(con_in, &input_key);
51 } while (ret == EFI_NOT_READY);
53 /* Allow 5 minutes until time out */
54 boottime->set_watchdog_timer(300, 0, 0, NULL);
56 efi_st_printf("Unicode char %u (%ps), scan code %u (%ps)\n",
57 (unsigned int)input_key.unicode_char,
58 efi_st_translate_char(input_key.unicode_char),
59 (unsigned int)input_key.scan_code,
60 efi_st_translate_code(input_key.scan_code));
62 switch (input_key.unicode_char) {
65 return EFI_ST_SUCCESS;
70 EFI_UNIT_TEST(textinput) = {
72 .phase = EFI_EXECUTE_BEFORE_BOOTTIME_EXIT,