From 945b32360678f0b56e5d654153f17acd54a3fef2 Mon Sep 17 00:00:00 2001 From: Rafal Kupiec Date: Fri, 15 Mar 2024 15:46:45 +0100 Subject: [PATCH] Initialize framebuffer earlier and reset video screen mode to circumvent buggy firmwares --- xtldr/modules/xtos_o/xtos.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/xtldr/modules/xtos_o/xtos.c b/xtldr/modules/xtos_o/xtos.c index 904fbc5..0ad41e8 100644 --- a/xtldr/modules/xtos_o/xtos.c +++ b/xtldr/modules/xtos_o/xtos.c @@ -252,7 +252,9 @@ XtpBootSequence(IN PEFI_FILE_HANDLE BootDir, IN PXTBL_BOOT_PARAMETERS Parameters) { EFI_GUID LoadedImageGuid = EFI_LOADED_IMAGE_PROTOCOL_GUID; + EFI_GUID FrameBufGuid = XT_FRAMEBUFFER_PROTOCOL_GUID; PKERNEL_INITIALIZATION_BLOCK KernelParameters; + PXTBL_FRAMEBUFFER_PROTOCOL FrameBufProtocol; PPECOFF_IMAGE_CONTEXT ImageContext = NULL; PEFI_LOADED_IMAGE_PROTOCOL ImageProtocol; PVOID VirtualAddress, VirtualMemoryArea; @@ -264,6 +266,18 @@ XtpBootSequence(IN PEFI_FILE_HANDLE BootDir, /* Initialize XTOS startup sequence */ XtLdrProtocol->Debug.Print(L"Initializing XTOS startup sequence\n"); + /* Load FrameBuffer protocol */ + Status = XtLdrProtocol->Protocol.Open(&ProtocolHandle, (PVOID*)&FrameBufProtocol, &FrameBufGuid); + if(Status == STATUS_EFI_SUCCESS) + { + /* Make sure FrameBuffer is initialized */ + FrameBufProtocol->Initialize(); + FrameBufProtocol->SetScreenResolution(0, 0); + } + + /* Close FrameBuffer protocol */ + XtLdrProtocol->Protocol.Close(ProtocolHandle, &FrameBufGuid); + /* Set base virtual memory area for the kernel mappings */ VirtualMemoryArea = (PVOID)KSEG0_BASE; VirtualAddress = (PVOID)(KSEG0_BASE + KSEG0_KERNEL_BASE); @@ -438,8 +452,7 @@ XtpInitializeLoaderBlock(IN PXTBL_PAGE_MAPPING PageMap, Status = XtLdrProtocol->Protocol.Open(&ProtocolHandle, (PVOID*)&FrameBufProtocol, &FrameBufGuid); if(Status == STATUS_EFI_SUCCESS) { - /* Make sure FrameBuffer is initialized */ - FrameBufProtocol->Initialize(); + /* Get FrameBuffer information */ FrameBufProtocol->GetDisplayInformation(FrameBufInfo); /* Store information about FrameBuffer device */