Provide only necessary framebuffer information to the kernel
This commit is contained in:
@@ -55,7 +55,9 @@ FbGetDisplayDriver(OUT PEFI_GRAPHICS_PROTOCOL Protocol)
|
||||
*/
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
FbGetDisplayInformation(OUT PXTBL_FRAMEBUFFER_INFORMATION FbInfo)
|
||||
FbGetDisplayInformation(OUT PEFI_PHYSICAL_ADDRESS FrameBufferBase,
|
||||
OUT PULONG_PTR FrameBufferSize,
|
||||
OUT PXTBL_FRAMEBUFFER_MODE_INFORMATION ModeInfo)
|
||||
{
|
||||
/* Check if framebuffer is initialized */
|
||||
if(!FbpDisplayInfo.Initialized)
|
||||
@@ -64,19 +66,21 @@ FbGetDisplayInformation(OUT PXTBL_FRAMEBUFFER_INFORMATION FbInfo)
|
||||
return STATUS_EFI_NOT_READY;
|
||||
}
|
||||
|
||||
/* Copy framebuffer information */
|
||||
FbInfo->ModeInfo.BitsPerPixel = FbpDisplayInfo.ModeInfo.BitsPerPixel;
|
||||
FbInfo->ModeInfo.BytesPerPixel = FbpDisplayInfo.ModeInfo.BytesPerPixel;
|
||||
FbInfo->ModeInfo.PixelFormat = FbpDisplayInfo.ModeInfo.PixelFormat;
|
||||
FbInfo->ModeInfo.PixelInformation = FbpDisplayInfo.ModeInfo.PixelInformation;
|
||||
FbInfo->ModeInfo.PixelsPerScanLine = FbpDisplayInfo.ModeInfo.PixelsPerScanLine;
|
||||
FbInfo->ModeInfo.Width = FbpDisplayInfo.ModeInfo.Width;
|
||||
FbInfo->ModeInfo.Height = FbpDisplayInfo.ModeInfo.Height;
|
||||
FbInfo->ModeInfo.Pitch = FbpDisplayInfo.ModeInfo.Pitch;
|
||||
FbInfo->FrameBufferBase = FbpDisplayInfo.FrameBufferBase;
|
||||
FbInfo->FrameBufferSize = FbpDisplayInfo.FrameBufferSize;
|
||||
FbInfo->Protocol = FbpDisplayInfo.Protocol;
|
||||
FbInfo->Initialized = FbpDisplayInfo.Initialized;
|
||||
/* Set basic framebuffer information */
|
||||
*FrameBufferBase = FbpDisplayInfo.FrameBufferBase;
|
||||
*FrameBufferSize = FbpDisplayInfo.FrameBufferSize;
|
||||
|
||||
/* Set framebuffer mode information */
|
||||
ModeInfo->Width = FbpDisplayInfo.ModeInfo.Width;
|
||||
ModeInfo->Height = FbpDisplayInfo.ModeInfo.Height;
|
||||
ModeInfo->Depth = FbpDisplayInfo.ModeInfo.Depth;
|
||||
ModeInfo->RefreshRate = FbpDisplayInfo.ModeInfo.RefreshRate;
|
||||
ModeInfo->BitsPerPixel = FbpDisplayInfo.ModeInfo.BitsPerPixel;
|
||||
ModeInfo->BytesPerPixel = FbpDisplayInfo.ModeInfo.BytesPerPixel;
|
||||
ModeInfo->PixelsPerScanLine = FbpDisplayInfo.ModeInfo.PixelsPerScanLine;
|
||||
ModeInfo->Pitch = FbpDisplayInfo.ModeInfo.Pitch;
|
||||
ModeInfo->PixelFormat = FbpDisplayInfo.ModeInfo.PixelFormat;
|
||||
ModeInfo->PixelInformation = FbpDisplayInfo.ModeInfo.PixelInformation;
|
||||
|
||||
/* Return success */
|
||||
return STATUS_EFI_SUCCESS;
|
||||
|
@@ -20,7 +20,9 @@ FbGetDisplayDriver(OUT PEFI_GRAPHICS_PROTOCOL Protocol);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
FbGetDisplayInformation(OUT PXTBL_FRAMEBUFFER_INFORMATION FbInfo);
|
||||
FbGetDisplayInformation(OUT PEFI_PHYSICAL_ADDRESS FrameBufferBase,
|
||||
OUT PULONG_PTR FrameBufferSize,
|
||||
OUT PXTBL_FRAMEBUFFER_MODE_INFORMATION ModeInfo);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
|
@@ -38,17 +38,18 @@ XTBL_BOOT_PROTOCOL XtBootProtocol;
|
||||
XTCDECL
|
||||
VOID
|
||||
XtGetDisplayInformation(OUT PLOADER_GRAPHICS_INFORMATION_BLOCK InformationBlock,
|
||||
IN PXTBL_FRAMEBUFFER_INFORMATION FrameBufferInfo)
|
||||
IN PEFI_PHYSICAL_ADDRESS FrameBufferBase,
|
||||
IN PULONG_PTR FrameBufferSize,
|
||||
IN PXTBL_FRAMEBUFFER_MODE_INFORMATION FrameBufferModeInfo)
|
||||
{
|
||||
InformationBlock->Initialized = FrameBufferInfo->Initialized;
|
||||
InformationBlock->Protocol = FrameBufferInfo->Protocol;
|
||||
InformationBlock->Address = (PVOID)FrameBufferInfo->FrameBufferBase;
|
||||
InformationBlock->BufferSize = FrameBufferInfo->FrameBufferSize;
|
||||
InformationBlock->Width = FrameBufferInfo->ModeInfo.Width;
|
||||
InformationBlock->Height = FrameBufferInfo->ModeInfo.Height;
|
||||
InformationBlock->BitsPerPixel = FrameBufferInfo->ModeInfo.BitsPerPixel;
|
||||
InformationBlock->PixelsPerScanLine = FrameBufferInfo->ModeInfo.PixelsPerScanLine;
|
||||
InformationBlock->Pitch = FrameBufferInfo->ModeInfo.Pitch;
|
||||
InformationBlock->Initialized = TRUE;
|
||||
InformationBlock->Address = (PVOID)*FrameBufferBase;
|
||||
InformationBlock->BufferSize = *FrameBufferSize;
|
||||
InformationBlock->Width = FrameBufferModeInfo->Width;
|
||||
InformationBlock->Height = FrameBufferModeInfo->Height;
|
||||
InformationBlock->BitsPerPixel = FrameBufferModeInfo->BitsPerPixel;
|
||||
InformationBlock->PixelsPerScanLine = FrameBufferModeInfo->PixelsPerScanLine;
|
||||
InformationBlock->Pitch = FrameBufferModeInfo->Pitch;
|
||||
}
|
||||
|
||||
XTCDECL
|
||||
@@ -417,10 +418,11 @@ XtpInitializeLoaderBlock(IN PXTBL_PAGE_MAPPING PageMap,
|
||||
{
|
||||
EFI_GUID FrameBufGuid = XT_FRAMEBUFFER_PROTOCOL_GUID;
|
||||
PXTBL_FRAMEBUFFER_PROTOCOL FrameBufProtocol;
|
||||
PXTBL_FRAMEBUFFER_INFORMATION FrameBufInfo = NULL;
|
||||
XTBL_FRAMEBUFFER_MODE_INFORMATION FbModeInfo;
|
||||
PKERNEL_INITIALIZATION_BLOCK LoaderBlock;
|
||||
EFI_PHYSICAL_ADDRESS Address;
|
||||
EFI_PHYSICAL_ADDRESS Address, FbAddress;
|
||||
// PVOID RuntimeServices;
|
||||
ULONG_PTR FbSize;
|
||||
EFI_STATUS Status;
|
||||
EFI_HANDLE ProtocolHandle;
|
||||
UINT BlockPages, FrameBufferPages;
|
||||
@@ -453,16 +455,17 @@ XtpInitializeLoaderBlock(IN PXTBL_PAGE_MAPPING PageMap,
|
||||
if(Status == STATUS_EFI_SUCCESS)
|
||||
{
|
||||
/* Get FrameBuffer information */
|
||||
FrameBufProtocol->GetDisplayInformation(FrameBufInfo);
|
||||
|
||||
/* Store information about FrameBuffer device */
|
||||
XtGetDisplayInformation(&LoaderBlock->LoaderInformation.FrameBuffer, FrameBufInfo);
|
||||
Status = FrameBufProtocol->GetDisplayInformation(&FbAddress, &FbSize, &FbModeInfo);
|
||||
if(Status == STATUS_EFI_SUCCESS)
|
||||
{
|
||||
/* Store information about FrameBuffer device */
|
||||
XtGetDisplayInformation(&LoaderBlock->LoaderInformation.FrameBuffer, &FbAddress, &FbSize, &FbModeInfo);
|
||||
}
|
||||
}
|
||||
else
|
||||
if(Status != STATUS_EFI_SUCCESS)
|
||||
{
|
||||
/* No FrameBuffer available */
|
||||
LoaderBlock->LoaderInformation.FrameBuffer.Initialized = FALSE;
|
||||
LoaderBlock->LoaderInformation.FrameBuffer.Protocol = NONE;
|
||||
}
|
||||
|
||||
/* Close FrameBuffer protocol */
|
||||
|
Reference in New Issue
Block a user