/* * Copyright (c) 2026, Chloe M. * Provided under the BSD-3 clause. * * Description: Boot protocol abstraction layer * Author: Chloe M. */ #include #include #include #include #ifndef _BOOT_PROTO #error "Boot protocol must be defined" #else #define BOOT_PROTO _BOOT_PROTO #endif /* !_BOOT_PROTO */ static BPAL_HANDLE BpalHandle; static BOOLEAN IsInit = false; VOID KeBpalGetHandle(BPAL_HANDLE *Result) { if (Result == NULL) { return; } *Result = BpalHandle; } BOOLEAN KeBpalIsInit(VOID) { return IsInit; } VOID KeBpalInit(VOID) { const CHAR *BootProto = BOOT_PROTO; switch (*BootProto) { case 'l': if (RtlMemCmp(BootProto, "limine", 6) == 0) { KeBpalLimineInit(&BpalHandle); IsInit = true; return; } } KeKnot( KNOT_BAD_BOOT_PROTO, "got bad boot protocol '%s'\n", BootProto ); }