From 800568f996664a97290160b4f0db96d3c791fff0 Mon Sep 17 00:00:00 2001 From: "Chloe M." Date: Mon, 22 Jun 2026 02:40:50 +0000 Subject: [PATCH] stos: bpal: Add framebuffer info request Signed-off-by: Chloe M. --- paw/stos/head/ke/bpal.h | 19 +++++++++++++++++++ paw/stos/ke/bpal/proto/limine.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/paw/stos/head/ke/bpal.h b/paw/stos/head/ke/bpal.h index d3ac26d..2f9471f 100644 --- a/paw/stos/head/ke/bpal.h +++ b/paw/stos/head/ke/bpal.h @@ -11,13 +11,32 @@ #include +/* + * Represents a framebuffer + */ +typedef struct { + VOID *Address; + UQUAD Width; + UQUAD Height; + UQUAD Pitch; + SHORT Bpp; + UCHAR RedMaskSize; + UCHAR RedMaskShift; + UCHAR GreenMaskSize; + UCHAR GreenMaskShift; + UCHAR BlueMaskSize; + UCHAR BlueMaskShift; +} BPAL_FRAMEBUFFER; + /* * Boot protocol abstraction handle * * @KernelBase: Kernel load base + * @Framebuffer: Framebuffer info */ typedef struct { UPTR KernelBase; + BPAL_FRAMEBUFFER Framebuffer; } BPAL_HANDLE; /* diff --git a/paw/stos/ke/bpal/proto/limine.c b/paw/stos/ke/bpal/proto/limine.c index e9c6e62..cf37900 100644 --- a/paw/stos/ke/bpal/proto/limine.c +++ b/paw/stos/ke/bpal/proto/limine.c @@ -10,9 +10,18 @@ #include #include +#define FRAMEBUFFER FbResp->framebuffers[0] + #define DTRACE(Fmt, ...) \ TRACE("[ BPAL ]: " Fmt, ##__VA_ARGS__) +/* Framebuffer request */ +static struct limine_framebuffer_response *FbResp = NULL; +static struct limine_framebuffer_request FbReq = { + .id = LIMINE_FRAMEBUFFER_REQUEST_ID, + .revision = 0 +}; + /* HHDM request */ static struct limine_hhdm_response *HHDMResp = NULL; static volatile struct limine_hhdm_request HHDMReq = { @@ -34,12 +43,35 @@ static struct limine_bootloader_performance_request LoaderPerReq = { .revision = 0 }; +VOID +BpalInitFramebuffer(BPAL_HANDLE *Handle) +{ + BPAL_FRAMEBUFFER *Framebuffer; + + if (Handle == NULL) { + return; + } + + Framebuffer = &Handle->Framebuffer; + Framebuffer->Address = FRAMEBUFFER->address; + Framebuffer->Width = FRAMEBUFFER->width; + Framebuffer->Height = FRAMEBUFFER->height; + Framebuffer->Pitch = FRAMEBUFFER->pitch; + Framebuffer->RedMaskSize = FRAMEBUFFER->red_mask_size; + Framebuffer->RedMaskShift = FRAMEBUFFER->red_mask_shift; + Framebuffer->GreenMaskSize = FRAMEBUFFER->green_mask_size; + Framebuffer->GreenMaskShift = FRAMEBUFFER->green_mask_shift; + Framebuffer->BlueMaskSize = FRAMEBUFFER->blue_mask_size; + Framebuffer->BlueMaskShift = FRAMEBUFFER->blue_mask_shift; +} + VOID KeBpalLimineInit(BPAL_HANDLE *Handle) { LoaderInfoResp = LoaderInfoReq.response; LoaderPerfResp = LoaderPerReq.response; HHDMResp = HHDMReq.response; + FbResp = FbReq.response; DTRACE( "slut handed control by %s %s\n", @@ -57,5 +89,6 @@ KeBpalLimineInit(BPAL_HANDLE *Handle) LoaderPerfResp->exec_usec ); + BpalInitFramebuffer(Handle); Handle->KernelBase = HHDMResp->offset; }