Initialize framebuffer earlier and reset video screen mode to circumvent buggy firmwares
All checks were successful
Builds / ExectOS (i686) (push) Successful in 34s
Builds / ExectOS (amd64) (push) Successful in 35s

This commit is contained in:
Rafal Kupiec 2024-03-15 15:46:45 +01:00
parent 848731c9e6
commit 945b323606
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4

View File

@ -252,7 +252,9 @@ XtpBootSequence(IN PEFI_FILE_HANDLE BootDir,
IN PXTBL_BOOT_PARAMETERS Parameters) IN PXTBL_BOOT_PARAMETERS Parameters)
{ {
EFI_GUID LoadedImageGuid = EFI_LOADED_IMAGE_PROTOCOL_GUID; EFI_GUID LoadedImageGuid = EFI_LOADED_IMAGE_PROTOCOL_GUID;
EFI_GUID FrameBufGuid = XT_FRAMEBUFFER_PROTOCOL_GUID;
PKERNEL_INITIALIZATION_BLOCK KernelParameters; PKERNEL_INITIALIZATION_BLOCK KernelParameters;
PXTBL_FRAMEBUFFER_PROTOCOL FrameBufProtocol;
PPECOFF_IMAGE_CONTEXT ImageContext = NULL; PPECOFF_IMAGE_CONTEXT ImageContext = NULL;
PEFI_LOADED_IMAGE_PROTOCOL ImageProtocol; PEFI_LOADED_IMAGE_PROTOCOL ImageProtocol;
PVOID VirtualAddress, VirtualMemoryArea; PVOID VirtualAddress, VirtualMemoryArea;
@ -264,6 +266,18 @@ XtpBootSequence(IN PEFI_FILE_HANDLE BootDir,
/* Initialize XTOS startup sequence */ /* Initialize XTOS startup sequence */
XtLdrProtocol->Debug.Print(L"Initializing XTOS startup sequence\n"); 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 */ /* Set base virtual memory area for the kernel mappings */
VirtualMemoryArea = (PVOID)KSEG0_BASE; VirtualMemoryArea = (PVOID)KSEG0_BASE;
VirtualAddress = (PVOID)(KSEG0_BASE + KSEG0_KERNEL_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); Status = XtLdrProtocol->Protocol.Open(&ProtocolHandle, (PVOID*)&FrameBufProtocol, &FrameBufGuid);
if(Status == STATUS_EFI_SUCCESS) if(Status == STATUS_EFI_SUCCESS)
{ {
/* Make sure FrameBuffer is initialized */ /* Get FrameBuffer information */
FrameBufProtocol->Initialize();
FrameBufProtocol->GetDisplayInformation(FrameBufInfo); FrameBufProtocol->GetDisplayInformation(FrameBufInfo);
/* Store information about FrameBuffer device */ /* Store information about FrameBuffer device */