diff options
author | Freya Murphy <freya@freyacat.org> | 2025-04-19 16:36:51 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2025-04-19 16:37:54 -0400 |
commit | 472ec944d2ed81d0304cc6cac80946a6a44776be (patch) | |
tree | f6cae641c143a0b45bb289d9d9fc6145706025b0 /kernel/drivers/gpu/gop.c | |
parent | set mmap limit (diff) | |
download | comus-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.c | 27 |
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; +} |