diff --git a/BOOT/ENVIRON/INC/bootlib.h b/BOOT/ENVIRON/INC/bootlib.h index bb79085..82e0313 100644 --- a/BOOT/ENVIRON/INC/bootlib.h +++ b/BOOT/ENVIRON/INC/bootlib.h @@ -23,6 +23,17 @@ typedef struct { ULONG Flags; } BOOT_LIBRARY_PARAMETERS, *PBOOT_LIBRARY_PARAMETERS; +VOID +ConsolePrint ( + IN PWSTR String + ); + +VOID +ConsolePrintf ( + IN PWSTR Format, + ... + ); + ULONG BlGetBootOptionSize ( IN PBOOT_APPLICATION_ENTRY_OPTION Option @@ -33,6 +44,12 @@ BlGetBootOptionListSize ( IN PBOOT_APPLICATION_ENTRY_OPTION Options ); +NTSTATUS +BlpFwInitialize ( + IN ULONG Stage, + IN PBOOT_FIRMWARE_DATA FirmwareData + ); + NTSTATUS BlInitializeLibrary ( IN PBOOT_INPUT_PARAMETERS InputParameters, diff --git a/BOOT/ENVIRON/LIB/EFI/efifw.c b/BOOT/ENVIRON/LIB/EFI/efifw.c new file mode 100644 index 0000000..0df46c0 --- /dev/null +++ b/BOOT/ENVIRON/LIB/EFI/efifw.c @@ -0,0 +1,64 @@ +/*++ + +Copyright (c) 2024, Quinn Stephens. +Provided under the BSD 3-Clause license. + +Module Name: + + efifw.c + +Abstract: + + Provides EFI firmware utilities. + +--*/ + +#include "bootlib.h" +#include "bootmgr.h" + +EFI_SYSTEM_TABLE *EfiST; +EFI_BOOT_SERVICES *EfiBS; +EFI_RUNTIME_SERVICES *EfiRT; +SIMPLE_TEXT_OUTPUT_INTERFACE *EfiConOut; +SIMPLE_INPUT_INTERFACE *EfiConIn; + +NTSTATUS +BlpFwInitialize ( + IN ULONG Stage, + IN PBOOT_FIRMWARE_DATA FirmwareData + ) + +/*++ + +Routine Description: + + Internal routine to initialize the boot library. + +Arguments: + + Stage - 0 or 1. + + FirmwareData - firmware data structure to use for initialization. + +Return Value: + + STATUS_SUCCESS if successful, + STATUS_INVALID_PARAMETER if FirmwareData is invalid. + +--*/ + +{ + if (FirmwareData == NULL || FirmwareData->Version == 0) { + return STATUS_INVALID_PARAMETER; + } + + if (Stage == 0) { + EfiST = FirmwareData->SystemTable; + EfiBS = EfiST->BootServices; + EfiRT = EfiST->RuntimeServices; + EfiConOut = EfiST->ConOut; + EfiConIn = EfiST->ConIn; + } + + return STATUS_SUCCESS; +} diff --git a/BOOT/ENVIRON/LIB/bootlib.c b/BOOT/ENVIRON/LIB/bootlib.c index 5b1b1fa..827220b 100644 --- a/BOOT/ENVIRON/LIB/bootlib.c +++ b/BOOT/ENVIRON/LIB/bootlib.c @@ -128,6 +128,9 @@ Return Value: --*/ { + NTSTATUS Status; + PBOOT_FIRMWARE_DATA FirmwareData; + (VOID)LibraryParameters; // @@ -139,6 +142,15 @@ Return Value: return STATUS_INVALID_PARAMETER; } + // + // Initialize firmware library. + // + FirmwareData = (PBOOT_FIRMWARE_DATA)((PUCHAR)InputParameters + InputParameters->FirmwareDataOffset); + Status = BlpFwInitialize(0, FirmwareData); + if (!NT_SUCCESS(Status)) { + return Status; + } + return STATUS_SUCCESS; }