stos: Handle pre BPAL kernel knots

Signed-off-by: Chloe M. <chloe@mensia.org>
This commit is contained in:
Chloe M.
2026-06-23 05:45:35 +00:00
parent 81d5f13a30
commit 5c522ffc7f
4 changed files with 31 additions and 6 deletions
+5
View File
@@ -97,6 +97,11 @@ VOID KeBpalInit(VOID);
*/ */
VOID KeBpalGetHandle(BPAL_HANDLE *Result); VOID KeBpalGetHandle(BPAL_HANDLE *Result);
/*
* Returns true if the BPAL is initialized
*/
BOOLEAN KeBpalIsInit(VOID);
/* /*
* Obtain the kernel load virtual memory base * Obtain the kernel load virtual memory base
*/ */
+5 -3
View File
@@ -14,12 +14,14 @@
/* /*
* Valid knot reasons * Valid knot reasons
* *
* @KNOT_MISC: Misc. reason * @KNOT_MISC: Misc. reason
* @KNOT_UNBOUND_RSRC: Unbounded resource * @KNOT_UNBOUND_RSRC: Unbounded resource
* @KNOT_BAD_BOOT_PROTO: Bad boot protocol
*/ */
typedef enum { typedef enum {
KNOT_MISC, KNOT_MISC,
KNOT_UNBOUND_RSRC KNOT_UNBOUND_RSRC,
KNOT_BAD_BOOT_PROTO
} KNOT_REASON; } KNOT_REASON;
/* /*
+14 -1
View File
@@ -7,6 +7,7 @@
*/ */
#include <ke/bpal.h> #include <ke/bpal.h>
#include <ke/knot.h>
#include <stdef.h> #include <stdef.h>
#include <string.h> #include <string.h>
@@ -17,6 +18,7 @@
#endif /* !_BOOT_PROTO */ #endif /* !_BOOT_PROTO */
static BPAL_HANDLE BpalHandle; static BPAL_HANDLE BpalHandle;
static BOOLEAN IsInit = false;
VOID VOID
KeBpalGetHandle(BPAL_HANDLE *Result) KeBpalGetHandle(BPAL_HANDLE *Result)
@@ -28,6 +30,12 @@ KeBpalGetHandle(BPAL_HANDLE *Result)
*Result = BpalHandle; *Result = BpalHandle;
} }
BOOLEAN
KeBpalIsInit(VOID)
{
return IsInit;
}
VOID VOID
KeBpalInit(VOID) KeBpalInit(VOID)
{ {
@@ -37,9 +45,14 @@ KeBpalInit(VOID)
case 'l': case 'l':
if (RtlMemCmp(BootProto, "limine", 6) == 0) { if (RtlMemCmp(BootProto, "limine", 6) == 0) {
KeBpalLimineInit(&BpalHandle); KeBpalLimineInit(&BpalHandle);
IsInit = true;
return; return;
} }
} }
/* TODO: PANIC HERE */ KeKnot(
KNOT_BAD_BOOT_PROTO,
"got bad boot protocol '%s'\n",
BootProto
);
} }
+7 -2
View File
@@ -7,6 +7,7 @@
*/ */
#include <drivers/bootvid/fbio.h> #include <drivers/bootvid/fbio.h>
#include <ke/bpal.h>
#include <ex/trace.h> #include <ex/trace.h>
#include <ke/knot.h> #include <ke/knot.h>
@@ -18,7 +19,8 @@
/* Reason lookup table */ /* Reason lookup table */
static const CHAR *ReasonTable[] = { static const CHAR *ReasonTable[] = {
[KNOT_MISC] = "unspecified reason", [KNOT_MISC] = "unspecified reason",
[KNOT_UNBOUND_RSRC] = "unbounded resource" [KNOT_UNBOUND_RSRC] = "unbounded resource",
[KNOT_BAD_BOOT_PROTO] = "bad boot protocol"
}; };
/* Globals */ /* Globals */
@@ -40,7 +42,10 @@ KiKnot(KNOT_REASON Reason, const CHAR *Fmt, ...)
{ {
va_start(Ap, Fmt); va_start(Ap, Fmt);
FmtPrintf(KnotBuf, sizeof(KnotBuf), Fmt, Ap); FmtPrintf(KnotBuf, sizeof(KnotBuf), Fmt, Ap);
BootVidInitCons(&KnotAttr);
if (KeBpalIsInit()) {
BootVidInitCons(&KnotAttr);
}
TRACE("\033[H\033[2J"); TRACE("\033[H\033[2J");
TRACE(KnotMessage); TRACE(KnotMessage);