diff --git a/paw/stos/head/ke/bpal.h b/paw/stos/head/ke/bpal.h index f7bcb95..133e401 100644 --- a/paw/stos/head/ke/bpal.h +++ b/paw/stos/head/ke/bpal.h @@ -73,6 +73,7 @@ typedef struct { * * @KernelBase: Kernel load base * @Framebuffer: Framebuffer info + * @RsdpBase: ACPI RSDP base * @MemEntryIdx: Callback to get memory map entry by index * @ModuleLookup: Lookup a module * @CommandLine: Kernel command line @@ -80,6 +81,7 @@ typedef struct { typedef struct { UPTR KernelBase; BPAL_FRAMEBUFFER Framebuffer; + VOID *RsdpBase; ST_STATUS(*MemEntryIdx)(USIZE Idx, MEMMAP_ENTRY *Result); ST_STATUS(*ModuleLookup)(CHAR *Path, BPAL_MODULE *Result); const CHAR *CommandLine; diff --git a/paw/stos/ke/bpal/proto/limine.c b/paw/stos/ke/bpal/proto/limine.c index d9d9603..f22bb51 100644 --- a/paw/stos/ke/bpal/proto/limine.c +++ b/paw/stos/ke/bpal/proto/limine.c @@ -65,6 +65,13 @@ static struct limine_executable_cmdline_request CmdLineReq = { .revision = 0 }; +/* RSDP request */ +static struct limine_rsdp_response *RsdpResp = NULL; +static volatile struct limine_rsdp_request RsdpReq = { + .id = LIMINE_RSDP_REQUEST_ID, + .revision = 0 +}; + static ST_STATUS LimineModuleLookup(CHAR *Path, BPAL_MODULE *Result) { @@ -144,6 +151,7 @@ KeBpalLimineInit(BPAL_HANDLE *Handle) FbResp = FbReq.response; MapResp = MapReq.response; CmdLineResp = CmdLineReq.response; + RsdpResp = RsdpReq.response; DTRACE( "slut handed control by %s %s\n", @@ -171,4 +179,5 @@ KeBpalLimineInit(BPAL_HANDLE *Handle) Handle->KernelBase = HHDMResp->offset; Handle->MemEntryIdx = LimineMemEntryIdx; Handle->ModuleLookup = LimineModuleLookup; + Handle->RsdpBase = RsdpResp->address; }