stos: Handle pre BPAL kernel knots
Signed-off-by: Chloe M. <chloe@mensia.org>
This commit is contained in:
@@ -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
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user