summaryrefslogtreecommitdiff
path: root/kernel/drivers/gpu/gop.c
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-04-19 16:36:51 -0400
committerFreya Murphy <freya@freyacat.org>2025-04-19 16:37:54 -0400
commit472ec944d2ed81d0304cc6cac80946a6a44776be (patch)
treef6cae641c143a0b45bb289d9d9fc6145706025b0 /kernel/drivers/gpu/gop.c
parentset mmap limit (diff)
downloadcomus-472ec944d2ed81d0304cc6cac80946a6a44776be.tar.gz
comus-472ec944d2ed81d0304cc6cac80946a6a44776be.tar.bz2
comus-472ec944d2ed81d0304cc6cac80946a6a44776be.zip
UEFI and republicans
Diffstat (limited to 'kernel/drivers/gpu/gop.c')
-rw-r--r--kernel/drivers/gpu/gop.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/kernel/drivers/gpu/gop.c b/kernel/drivers/gpu/gop.c
new file mode 100644
index 0000000..47da952
--- /dev/null
+++ b/kernel/drivers/gpu/gop.c
@@ -0,0 +1,27 @@
+#include <lib.h>
+#include <comus/asm.h>
+#include <comus/drivers/gpu.h>
+#include <comus/drivers/gpu/gop.h>
+#include <comus/efi.h>
+#include <efi.h>
+
+struct gpu gop_dev = { 0 };
+
+static EFI_GRAPHICS_OUTPUT_PROTOCOL *gop;
+
+int gop_init(struct gpu **gpu_dev)
+{
+ gop = efi_get_gop();
+ if (gop == NULL || gop->Mode == NULL)
+ return 1;
+
+ gop_dev.name = "GOP";
+ gop_dev.width = gop->Mode->Info->HorizontalResolution;
+ gop_dev.height = gop->Mode->Info->VerticalResolution;
+ gop_dev.bit_depth = 32; // we only allow 8bit color in efi/gop.c
+ gop_dev.framebuffer = kmapaddr((void *)gop->Mode->FrameBufferBase, NULL,
+ gop->Mode->FrameBufferSize, F_WRITEABLE);
+ *gpu_dev = &gop_dev;
+
+ return 1;
+}