summaryrefslogtreecommitdiff
path: root/kc/boot/kc_main.c
diff options
context:
space:
mode:
authorAda Christine <adachristine18@gmail.com>2022-02-21 18:17:37 +0000
committerAda Christine <adachristine18@gmail.com>2022-02-21 18:17:37 +0000
commit4fa48a2a7814c2f7d3992533313df283c3aa2652 (patch)
tree0a1b852ab9f5c0ffb8275f6df961eeb707786f45 /kc/boot/kc_main.c
parent472b54a1e2e00f43030cb6ba84e35ff18ab76e3c (diff)
graphics mode support
Diffstat (limited to 'kc/boot/kc_main.c')
-rw-r--r--kc/boot/kc_main.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/kc/boot/kc_main.c b/kc/boot/kc_main.c
index c503d9f..1686ce4 100644
--- a/kc/boot/kc_main.c
+++ b/kc/boot/kc_main.c
@@ -149,6 +149,31 @@ static void create_kernel_maps(Elf64_Ehdr *ehdr, void *base)
static void collect_video_data(void)
{
+ EFI_GUID gop_guid = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
+ EFI_STATUS status;
+ EFI_GRAPHICS_OUTPUT_PROTOCOL *gop_interface;
+
+ status = e_bs->LocateProtocol(&gop_guid, NULL, (void **)&gop_interface);
+
+ if (EFI_ERROR(status))
+ {
+ plog(L"found no graphics devices\r\n");
+ }
+ else
+ {
+ plog(L"found graphics device\r\n");
+ EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *mode = gop_interface->Mode;
+ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *info = mode->Info;
+
+ boot_data.video_data.buffer.base = mode->FrameBufferBase;
+ boot_data.video_data.buffer.size = mode->FrameBufferSize;
+
+ boot_data.video_data.width = info->HorizontalResolution;
+ boot_data.video_data.height = info->VerticalResolution;
+ boot_data.video_data.pitch = info->PixelsPerScanLine;
+ boot_data.video_data.format = info->PixelFormat;
+ boot_data.video_data.mask = info->PixelInformation;
+ }
}
static void collect_acpi_data(void)