diff options
author | Joursoir <chat@joursoir.net> | 2022-03-25 18:37:48 +0300 |
---|---|---|
committer | Joursoir <chat@joursoir.net> | 2022-03-25 18:38:36 +0300 |
commit | 01a6d8366c5c3bf8c52f666a1c302fea035185da (patch) | |
tree | 52a53ef4dddf0f1ccbd0efed820234368e43279f | |
parent | e425501ea7af0e2cf0397b46bf65f9275f2a5659 (diff) | |
download | umt-01a6d8366c5c3bf8c52f666a1c302fea035185da.tar.gz umt-01a6d8366c5c3bf8c52f666a1c302fea035185da.tar.bz2 umt-01a6d8366c5c3bf8c52f666a1c302fea035185da.zip |
main: add graphics context
-rw-r--r-- | UefiMonitorTest/UefiMonitorTest.c | 36 | ||||
-rw-r--r-- | UefiMonitorTest/UefiMonitorTest.h | 32 |
2 files changed, 68 insertions, 0 deletions
diff --git a/UefiMonitorTest/UefiMonitorTest.c b/UefiMonitorTest/UefiMonitorTest.c index 7cdff88..2d27013 100644 --- a/UefiMonitorTest/UefiMonitorTest.c +++ b/UefiMonitorTest/UefiMonitorTest.c @@ -10,6 +10,39 @@ #include <Protocol/GraphicsOutput.h> +#include "UefiMonitorTest.h" + +STATIC +VOID +PrepareGraphicsInfo ( + IN GRAPHICS_CONTEXT *Graphics, + IN EFI_GRAPHICS_OUTPUT_PROTOCOL *Gop + ) +{ + ASSERT (Graphics != NULL); + ASSERT (Gop != NULL); + + Graphics->Gop = Gop; + Graphics->Base = (UINT8 *)Gop->Mode->FrameBufferBase; + Graphics->Width = Gop->Mode->Info->HorizontalResolution; + Graphics->Height = Gop->Mode->Info->VerticalResolution; + Graphics->PixelWidth = 4; // A pixel is 32-bits + Graphics->Pitch = Graphics->PixelWidth * Gop->Mode->Info->PixelsPerScanLine; + + DEBUG (( + DEBUG_INFO, + "GOP information:\n" + "Mode: %d\n" + "Support a physical frame buffer: %s\n" + "Framebuffer address, size: %x, %d\n" + "Screen width x height: %d x %d\n", + Gop->Mode->Mode, + (Gop->Mode->Info->PixelFormat == PixelBltOnly) ? L"NO" : L"YES", + Gop->Mode->FrameBufferBase, Gop->Mode->FrameBufferSize, + Gop->Mode->Info->HorizontalResolution, Gop->Mode->Info->VerticalResolution + )); +} + STATIC EFI_GRAPHICS_OUTPUT_PROTOCOL * GetGraphicsOutputProtocol ( @@ -57,6 +90,7 @@ UefiMain ( ) { EFI_GRAPHICS_OUTPUT_PROTOCOL *Gop; + GRAPHICS_CONTEXT Graphics; Gop = GetGraphicsOutputProtocol (); if (Gop == NULL) { @@ -64,5 +98,7 @@ UefiMain ( return EFI_NOT_FOUND; } + PrepareGraphicsInfo (&Graphics, Gop); + return EFI_SUCCESS; } diff --git a/UefiMonitorTest/UefiMonitorTest.h b/UefiMonitorTest/UefiMonitorTest.h new file mode 100644 index 0000000..d6306bc --- /dev/null +++ b/UefiMonitorTest/UefiMonitorTest.h @@ -0,0 +1,32 @@ +#ifndef UEFI_MONITOR_TEST_H +#define UEFI_MONITOR_TEST_H + +typedef struct { + /// + /// The EFI_GRAPHICS_OUTPUT_PROTOCOL instance. + /// + EFI_GRAPHICS_OUTPUT_PROTOCOL *Gop; + /// + /// Base address of graphics linear frame buffer. + /// Starts from the upper left pixel. + /// + UINT8 *Base; + /// + /// The size of video screen in pixels in the X dimension. + /// + UINT32 Width; + /// + /// The size of video screen in pixels in the Y dimension. + /// + UINT32 Height; + /// + /// The size of pixel color in bytes. + /// + UINT32 PixelWidth; + /// + /// Amount of bytes you should skip to go one pixel down. + /// + UINT32 Pitch; +} GRAPHICS_CONTEXT; + +#endif /* UEFI_MONITOR_TEST_H */ |