1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-10-22 10:31:56 +02:00

efi_console: set up events

Set up a timer event and the WaitForKey event.
In the notify function of the timer event check for console input
and signal the WaitForKey event accordingly.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
xypron.glpk@gmx.de
2017-07-18 20:17:22 +02:00
committed by Alexander Graf
parent bfc724625f
commit 91be9a77b7
4 changed files with 46 additions and 3 deletions

View File

@@ -421,8 +421,46 @@ static efi_status_t EFIAPI efi_cin_read_key_stroke(
return EFI_EXIT(EFI_SUCCESS);
}
const struct efi_simple_input_interface efi_con_in = {
struct efi_simple_input_interface efi_con_in = {
.reset = efi_cin_reset,
.read_key_stroke = efi_cin_read_key_stroke,
.wait_for_key = NULL,
};
static struct efi_event *console_timer_event;
static void efi_key_notify(struct efi_event *event, void *context)
{
}
static void efi_console_timer_notify(struct efi_event *event, void *context)
{
EFI_ENTRY("%p, %p", event, context);
if (tstc())
efi_signal_event(efi_con_in.wait_for_key);
EFI_EXIT(EFI_SUCCESS);
}
/* This gets called from do_bootefi_exec(). */
int efi_console_register(void)
{
efi_status_t r;
r = efi_create_event(EVT_NOTIFY_WAIT, TPL_CALLBACK,
efi_key_notify, NULL, &efi_con_in.wait_for_key);
if (r != EFI_SUCCESS) {
printf("ERROR: Failed to register WaitForKey event\n");
return r;
}
r = efi_create_event(EVT_TIMER | EVT_NOTIFY_SIGNAL, TPL_CALLBACK,
efi_console_timer_notify, NULL,
&console_timer_event);
if (r != EFI_SUCCESS) {
printf("ERROR: Failed to register console event\n");
return r;
}
/* 5000 ns cycle is sufficient for 2 MBaud */
r = efi_set_timer(console_timer_event, EFI_TIMER_PERIODIC, 50);
if (r != EFI_SUCCESS)
printf("ERROR: Failed to set console timer\n");
return r;
}