/*++ Copyright (c) 2024, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: efifw.c Abstract: Provides EFI firmware utilities. --*/ #include #include "bootlib.h" #include "efi.h" BOOT_FIRMWARE_DATA EfiFirmwareData; PBOOT_FIRMWARE_DATA EfiFirmwareParameters; 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 - Which stage of initialization to perform. Stage 0: Initialize global firmware-related data and pointers. Once this stage is complete, ConsolePrint() and ConsolePrintf() can be used. FirmwareData - Pointer to BOOT_FIRMWARE_DATA. 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) { RtlCopyMemory(&EfiFirmwareData, FirmwareData, sizeof(BOOT_FIRMWARE_DATA)); EfiFirmwareParameters = &EfiFirmwareData; EfiST = FirmwareData->SystemTable; EfiBS = EfiST->BootServices; EfiRT = EfiST->RuntimeServices; EfiConOut = EfiST->ConOut; EfiConIn = EfiST->ConIn; } // // TODO: Implement stage 1 initialization. // return STATUS_SUCCESS; }