Initialize framebuffer earlier and reset video screen mode to circumvent buggy firmwares
This commit is contained in:
parent
848731c9e6
commit
945b323606
@ -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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user