Rework of EFI FrameBuffer module
All checks were successful
Builds / ExectOS (amd64) (push) Successful in 33s
Builds / ExectOS (i686) (push) Successful in 29s

This commit is contained in:
2024-01-28 15:03:55 +01:00
parent 4a67bc1230
commit 3c0a43d55a
13 changed files with 622 additions and 504 deletions

View File

@@ -11,7 +11,7 @@
/* XTOS module information */
XTBL_MODINFO = L"XTOS boot protocol support";
XTBL_MODDEPS = {L"fb_o", L"pecoff"};
XTBL_MODDEPS = {L"framebuf", L"pecoff"};
/* EFI XT Loader Protocol */
PXTBL_LOADER_PROTOCOL XtLdrProtocol;
@@ -22,6 +22,32 @@ PXTBL_EXECUTABLE_IMAGE_PROTOCOL XtPeCoffProtocol;
/* XTOS Boot Protocol */
XTBL_BOOT_PROTOCOL XtBootProtocol;
/**
* Returns information about frame buffer in XTOS compatible format.
*
* @param InformationBlock
* A pointer to memory area containing XT structure where all the information will be stored.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTCDECL
VOID
XtGetDisplayInformation(OUT PLOADER_GRAPHICS_INFORMATION_BLOCK InformationBlock,
IN PXTBL_FRAMEBUFFER_INFORMATION FrameBufferInfo)
{
InformationBlock->Initialized = FrameBufferInfo->Initialized;
InformationBlock->Protocol = FrameBufferInfo->Protocol;
InformationBlock->Address = (PVOID)(ULONG_PTR)FrameBufferInfo->FrameBufferBase;
InformationBlock->BufferSize = FrameBufferInfo->FrameBufferSize;
InformationBlock->Width = FrameBufferInfo->Width;
InformationBlock->Height = FrameBufferInfo->Height;
InformationBlock->BitsPerPixel = FrameBufferInfo->BitsPerPixel;
InformationBlock->PixelsPerScanLine = FrameBufferInfo->PixelsPerScanLine;
InformationBlock->Pitch = FrameBufferInfo->Pitch;
}
/**
* Starts the operating system according to the provided parameters using XTOS boot protocol.
*
@@ -324,7 +350,8 @@ XtpInitializeLoaderBlock(IN PXTBL_PAGE_MAPPING PageMap,
IN PXTBL_BOOT_PARAMETERS Parameters)
{
EFI_GUID FrameBufGuid = XT_FRAMEBUFFER_PROTOCOL_GUID;
PXT_FRAMEBUFFER_PROTOCOL FrameBufProtocol;
PXTBL_FRAMEBUFFER_PROTOCOL FrameBufProtocol;
PXTBL_FRAMEBUFFER_INFORMATION FrameBufInfo = NULL;
PKERNEL_INITIALIZATION_BLOCK LoaderBlock;
EFI_PHYSICAL_ADDRESS Address;
// PVOID RuntimeServices;
@@ -361,10 +388,10 @@ XtpInitializeLoaderBlock(IN PXTBL_PAGE_MAPPING PageMap,
{
/* Make sure FrameBuffer is initialized */
FrameBufProtocol->Initialize();
FrameBufProtocol->GetDisplayInformation(FrameBufInfo);
/* Store information about FrameBuffer device */
FrameBufProtocol->GetDisplayInformation(&LoaderBlock->LoaderInformation.FrameBuffer);
// FrameBufProtocol->PrintDisplayInformation();
XtGetDisplayInformation(&LoaderBlock->LoaderInformation.FrameBuffer, FrameBufInfo);
}
else
{