EFI v2.10 documents the following about EFI events: | // EFI_EVENT: Handle to an event structure. Type VOID * | | typedef | EFI_STATUS | (EFIAPI *EFI_WAIT_FOR_EVENT) ( | IN UINTN NumberOfEvents, | IN EFI_EVENT *Event, | OUT UINTN *Index | ); | | typedef struct _EFI_SIMPLE_TEXT_INPUT_PROTOCOL { | EFI_INPUT_RESET Reset; | EFI_INPUT_READ_KEY ReadKeyStroke; | EFI_EVENT WaitForKey; | } EFI_SIMPLE_TEXT_INPUT_PROTOCOL; To sum up, wait_for_event takes the number of events to wait for and a pointer to an EFI_EVENT array of that size. Because we define efi_event as void *, it went unnoticed that we passed a plain pointer instead of a pointer to a pointer like the API expects. With the using of an opaque type in the follow-up commit, this will trigger a warning, so we fix this here in anticipation. I am not sure how this went unnoticed so far, but the efi-stdio console driver behaves as one would expect in Qemu. Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- drivers/serial/efi-stdio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/serial/efi-stdio.c b/drivers/serial/efi-stdio.c index c8c84270093e..d31de5f53796 100644 --- a/drivers/serial/efi-stdio.c +++ b/drivers/serial/efi-stdio.c @@ -87,7 +87,7 @@ static int efi_read_key(struct efi_console_priv *priv, bool wait) /* wait until key is pressed */ if (wait) - BS->wait_for_event(1, priv->in->wait_for_key, &index); + BS->wait_for_event(1, &priv->in->wait_for_key, &index); if (priv->inex) { efiret = priv->inex->read_key_stroke_ex(priv->inex, &kd); -- 2.39.2