summaryrefslogtreecommitdiff
path: root/sys/arch
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch')
-rw-r--r--sys/arch/amd64/stand/efiboot/efiboot.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/sys/arch/amd64/stand/efiboot/efiboot.c b/sys/arch/amd64/stand/efiboot/efiboot.c
index 085a2c768ae..7151e22a16a 100644
--- a/sys/arch/amd64/stand/efiboot/efiboot.c
+++ b/sys/arch/amd64/stand/efiboot/efiboot.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: efiboot.c,v 1.23 2017/08/07 19:34:53 kettenis Exp $ */
+/* $OpenBSD: efiboot.c,v 1.24 2017/10/06 04:52:22 yasuoka Exp $ */
/*
* Copyright (c) 2015 YASUOKA Masahiko <yasuoka@yasuoka.net>
@@ -59,6 +59,8 @@ static void efi_heap_init(void);
static void efi_memprobe_internal(void);
static void efi_video_init(void);
static void efi_video_reset(void);
+static EFI_STATUS
+ efi_gop_setmode(EFI_GRAPHICS_OUTPUT *gop, int mode);
EFI_STATUS efi_main(EFI_HANDLE, EFI_SYSTEM_TABLE *);
void (*run_i386)(u_long, u_long, int, int, int, int, int, int, int, int)
@@ -699,6 +701,18 @@ static EFI_GUID smbios_guid = SMBIOS_TABLE_GUID;
#define efi_guidcmp(_a, _b) memcmp((_a), (_b), sizeof(EFI_GUID))
+static EFI_STATUS
+efi_gop_setmode(EFI_GRAPHICS_OUTPUT *gop, int mode)
+{
+ EFI_STATUS status;
+
+ status = EFI_CALL(gop->SetMode, gop, mode);
+ if (EFI_ERROR(status) || gop->Mode->Mode != mode)
+ printf("GOP SetMode() failed (%d)\n", status);
+
+ return (status);
+}
+
void
efi_makebootargs(void)
{
@@ -708,7 +722,7 @@ efi_makebootargs(void)
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
*gopi;
bios_efiinfo_t ei;
- int bestmode = -1;
+ int curmode, bestmode = -1;
UINTN sz, gopsiz, bestsiz = 0;
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
*info;
@@ -746,9 +760,9 @@ efi_makebootargs(void)
}
}
if (bestmode >= 0) {
- status = EFI_CALL(gop->SetMode, gop, bestmode);
- if (EFI_ERROR(status) && gop->Mode->Mode != bestmode)
- printf("GOP setmode failed(%d)\n", status);
+ curmode = gop->Mode->Mode;
+ if (efi_gop_setmode(gop, bestmode) != EFI_SUCCESS)
+ (void)efi_gop_setmode(gop, curmode);
}
gopi = gop->Mode->Info;