diff --git a/BOOT/ENVIRON/APP/BOOTMGR/EFI/efientry.c b/BOOT/ENVIRON/APP/BOOTMGR/EFI/efientry.c index 4c717ee..a4fe761 100644 --- a/BOOT/ENVIRON/APP/BOOTMGR/EFI/efientry.c +++ b/BOOT/ENVIRON/APP/BOOTMGR/EFI/efientry.c @@ -14,6 +14,7 @@ Abstract: --*/ #include "bootmgr.h" +#include "efilib.h" EFI_STATUS EFIAPI diff --git a/BOOT/ENVIRON/APP/BOOTMGR/bootmgr.c b/BOOT/ENVIRON/APP/BOOTMGR/bootmgr.c index f36c183..d08f144 100644 --- a/BOOT/ENVIRON/APP/BOOTMGR/bootmgr.c +++ b/BOOT/ENVIRON/APP/BOOTMGR/bootmgr.c @@ -38,7 +38,9 @@ Return Value: --*/ { - /* TODO: Implement BmMain() */ + (VOID)Parameters; + + /* Not implemented */ return STATUS_SUCCESS; } diff --git a/BOOT/ENVIRON/INC/bootmgr.h b/BOOT/ENVIRON/INC/bootmgr.h new file mode 100644 index 0000000..d940869 --- /dev/null +++ b/BOOT/ENVIRON/INC/bootmgr.h @@ -0,0 +1,34 @@ +/*++ + +Copyright (c) 2024, Quinn Stephens. +Provided under the BSD 3-Clause license. + +Module Name: + + bootmgr.h + +Abstract: + + Boot manager definitions. + +--*/ + +#ifndef _BOOTMGR_H +#define _BOOTMGR_H + +#include + +#define BOOT_APPLICATION_PARAMETERS_SIGNATURE 0x50504120544f4f42 /* "BOOT APP" */ +#define BOOT_APPLICATION_PARAMETERS_VERSION 2 + +typedef struct { + ULONGLONG Signature; + ULONG Version; +} BOOT_APPLICATION_PARAMETERS, *PBOOT_APPLICATION_PARAMETERS; + +NTSTATUS +BmMain ( + IN PBOOT_APPLICATION_PARAMETERS Parameters + ); + +#endif diff --git a/BOOT/ENVIRON/INC/efilib.h b/BOOT/ENVIRON/INC/efilib.h new file mode 100644 index 0000000..e648d14 --- /dev/null +++ b/BOOT/ENVIRON/INC/efilib.h @@ -0,0 +1,34 @@ +/*++ + +Copyright (c) 2024, Quinn Stephens. +Provided under the BSD 3-Clause license. + +Module Name: + + efilib.h + +Abstract: + + Boot manager EFI library definitions. + +--*/ + +#ifndef _EFILIB_H +#define _EFILIB_H + +#include +#include "bootmgr.h" +#include "efi.h" + +PBOOT_APPLICATION_PARAMETERS +EfiInitCreateInputParameters ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ); + +EFI_STATUS +EfiGetEfiStatusCode ( + IN NTSTATUS Status + ); + +#endif diff --git a/BOOT/ENVIRON/LIB/EFI/efiinit.c b/BOOT/ENVIRON/LIB/EFI/efiinit.c new file mode 100644 index 0000000..e399fdd --- /dev/null +++ b/BOOT/ENVIRON/LIB/EFI/efiinit.c @@ -0,0 +1,58 @@ +/*++ + +Copyright (c) 2024, Quinn Stephens. +Provided under the BSD 3-Clause license. + +Module Name: + + efiinit.c + +Abstract: + + Provides EFI initialization utilities. + +--*/ + +#include "bootmgr.h" +#include "efi.h" + +UCHAR EfiInitScratch[2048]; + +PBOOT_APPLICATION_PARAMETERS +EfiInitCreateInputParameters ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) + +/*++ + +Routine Description: + + Creates the input parameter structure for the boot application. + +Arguments: + + ImageHandle - Handle for the boot manager image. + + SystemTable - Pointer to the EFI system table. + +Return Value: + + Pointer to parameter structure on success or NULL on failure. + +--*/ + +{ + ULONG ScratchUsed = 0; + PBOOT_APPLICATION_PARAMETERS InputParameters; + + (VOID)ImageHandle; + (VOID)SystemTable; + + InputParameters = (PBOOT_APPLICATION_PARAMETERS)(&EfiInitScratch[ScratchUsed]); + InputParameters->Signature = BOOT_APPLICATION_PARAMETERS_SIGNATURE; + InputParameters->Version = BOOT_APPLICATION_PARAMETERS_VERSION; + ScratchUsed += sizeof(BOOT_APPLICATION_PARAMETERS); + + return InputParameters; +} diff --git a/BOOT/ENVIRON/LIB/EFI/efistatus.c b/BOOT/ENVIRON/LIB/EFI/efistatus.c index 1a8eb85..fe878d7 100644 --- a/BOOT/ENVIRON/LIB/EFI/efistatus.c +++ b/BOOT/ENVIRON/LIB/EFI/efistatus.c @@ -14,6 +14,7 @@ Abstract: --*/ #include "bootmgr.h" +#include "efi.h" EFI_STATUS EfiGetEfiStatusCode (