efi_loader: fix SetMode()

Correct the check of the mode number in SetMode() service of the simple
text output protocol.

Clear the screen in SetMode().

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
Heinrich Schuchardt 2019-06-14 07:20:51 +02:00
parent c5b63bec2f
commit 2ad238fcc4
1 changed files with 14 additions and 17 deletions

View File

@ -316,23 +316,6 @@ static efi_status_t EFIAPI efi_cout_query_mode(
return EFI_EXIT(EFI_SUCCESS);
}
static efi_status_t EFIAPI efi_cout_set_mode(
struct efi_simple_text_output_protocol *this,
unsigned long mode_number)
{
EFI_ENTRY("%p, %ld", this, mode_number);
if (mode_number > efi_con_mode.max_mode)
return EFI_EXIT(EFI_UNSUPPORTED);
efi_con_mode.mode = mode_number;
efi_con_mode.cursor_column = 0;
efi_con_mode.cursor_row = 0;
return EFI_EXIT(EFI_SUCCESS);
}
static const struct {
unsigned int fg;
unsigned int bg;
@ -378,6 +361,20 @@ static efi_status_t EFIAPI efi_cout_clear_screen(
return EFI_EXIT(EFI_SUCCESS);
}
static efi_status_t EFIAPI efi_cout_set_mode(
struct efi_simple_text_output_protocol *this,
unsigned long mode_number)
{
EFI_ENTRY("%p, %ld", this, mode_number);
if (mode_number >= efi_con_mode.max_mode)
return EFI_EXIT(EFI_UNSUPPORTED);
efi_con_mode.mode = mode_number;
EFI_CALL(efi_cout_clear_screen(this));
return EFI_EXIT(EFI_SUCCESS);
}
static efi_status_t EFIAPI efi_cout_reset(
struct efi_simple_text_output_protocol *this,
char extended_verification)