[BOOT:LIB] Implement BlpFwInitialize()

This commit is contained in:
Quinn Stephens 2024-08-24 16:32:22 -04:00
parent 874d95ae4c
commit 5235ebdfa4
3 changed files with 93 additions and 0 deletions

View File

@ -23,6 +23,17 @@ typedef struct {
ULONG Flags; ULONG Flags;
} BOOT_LIBRARY_PARAMETERS, *PBOOT_LIBRARY_PARAMETERS; } BOOT_LIBRARY_PARAMETERS, *PBOOT_LIBRARY_PARAMETERS;
VOID
ConsolePrint (
IN PWSTR String
);
VOID
ConsolePrintf (
IN PWSTR Format,
...
);
ULONG ULONG
BlGetBootOptionSize ( BlGetBootOptionSize (
IN PBOOT_APPLICATION_ENTRY_OPTION Option IN PBOOT_APPLICATION_ENTRY_OPTION Option
@ -33,6 +44,12 @@ BlGetBootOptionListSize (
IN PBOOT_APPLICATION_ENTRY_OPTION Options IN PBOOT_APPLICATION_ENTRY_OPTION Options
); );
NTSTATUS
BlpFwInitialize (
IN ULONG Stage,
IN PBOOT_FIRMWARE_DATA FirmwareData
);
NTSTATUS NTSTATUS
BlInitializeLibrary ( BlInitializeLibrary (
IN PBOOT_INPUT_PARAMETERS InputParameters, IN PBOOT_INPUT_PARAMETERS InputParameters,

View File

@ -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;
}

View File

@ -128,6 +128,9 @@ Return Value:
--*/ --*/
{ {
NTSTATUS Status;
PBOOT_FIRMWARE_DATA FirmwareData;
(VOID)LibraryParameters; (VOID)LibraryParameters;
// //
@ -139,6 +142,15 @@ Return Value:
return STATUS_INVALID_PARAMETER; 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; return STATUS_SUCCESS;
} }