summaryrefslogtreecommitdiff
path: root/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.c
diff options
context:
space:
mode:
Diffstat (limited to 'PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.c')
-rw-r--r--PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.c119
1 files changed, 119 insertions, 0 deletions
diff --git a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.c b/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.c
new file mode 100644
index 0000000..d41cba3
--- /dev/null
+++ b/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.c
@@ -0,0 +1,119 @@
+/** @file
+ This library supports a Boot Services table library implementation that allows code dependent
+ upon UefiBootServicesTableLib to operate in an isolated execution environment such as within
+ the context of a host-based unit test framework.
+
+ The unit test should initialize the Boot Services database with any required elements
+ (e.g. protocols, events, handles, etc.) prior to the services being invoked by code under test.
+
+ It is strongly recommended to clean any global databases (e.g. protocol, event, handles, etc.) after
+ every unit test so the tests execute in a predictable manner from a clean state.
+
+ Copyright (c) Microsoft Corporation
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "UefiBootServicesTableLibUnitTest.h"
+
+EFI_HANDLE gImageHandle = NULL;
+EFI_SYSTEM_TABLE *gST = NULL;
+
+STATIC EFI_BOOT_SERVICES mBootServices = {
+ {
+ EFI_BOOT_SERVICES_SIGNATURE, // Signature
+ EFI_BOOT_SERVICES_REVISION, // Revision
+ sizeof (EFI_BOOT_SERVICES), // HeaderSize
+ 0, // CRC32
+ 0 // Reserved
+ },
+ (EFI_RAISE_TPL) UnitTestRaiseTpl, // RaiseTPL
+ (EFI_RESTORE_TPL) UnitTestRestoreTpl, // RestoreTPL
+ (EFI_ALLOCATE_PAGES) UnitTestAllocatePages, // AllocatePages
+ (EFI_FREE_PAGES) UnitTestFreePages, // FreePages
+ (EFI_GET_MEMORY_MAP) UnitTestGetMemoryMap, // GetMemoryMap
+ (EFI_ALLOCATE_POOL) UnitTestAllocatePool, // AllocatePool
+ (EFI_FREE_POOL) UnitTestFreePool, // FreePool
+ (EFI_CREATE_EVENT) UnitTestCreateEvent, // CreateEvent
+ (EFI_SET_TIMER) UnitTestSetTimer, // SetTimer
+ (EFI_WAIT_FOR_EVENT) UnitTestWaitForEvent, // WaitForEvent
+ (EFI_SIGNAL_EVENT) UnitTestSignalEvent, // SignalEvent
+ (EFI_CLOSE_EVENT) UnitTestCloseEvent, // CloseEvent
+ (EFI_CHECK_EVENT) UnitTestCheckEvent, // CheckEvent
+ (EFI_INSTALL_PROTOCOL_INTERFACE) UnitTestInstallProtocolInterface, // InstallProtocolInterface
+ (EFI_REINSTALL_PROTOCOL_INTERFACE) UnitTestReinstallProtocolInterface, // ReinstallProtocolInterface
+ (EFI_UNINSTALL_PROTOCOL_INTERFACE) UnitTestUninstallProtocolInterface, // UninstallProtocolInterface
+ (EFI_HANDLE_PROTOCOL) UnitTestHandleProtocol, // HandleProtocol
+ (VOID *) NULL, // Reserved
+ (EFI_REGISTER_PROTOCOL_NOTIFY) UnitTestRegisterProtocolNotify, // RegisterProtocolNotify
+ (EFI_LOCATE_HANDLE) UnitTestLocateHandle, // LocateHandle
+ (EFI_LOCATE_DEVICE_PATH) UnitTestLocateDevicePath, // LocateDevicePath
+ (EFI_INSTALL_CONFIGURATION_TABLE) UnitTestInstallConfigurationTable, // InstallConfigurationTable
+ (EFI_IMAGE_LOAD) UnitTestLoadImage, // LoadImage
+ (EFI_IMAGE_START) UnitTestStartImage, // StartImage
+ (EFI_EXIT) UnitTestExit, // Exit
+ (EFI_IMAGE_UNLOAD) UnitTestUnloadImage, // UnloadImage
+ (EFI_EXIT_BOOT_SERVICES) UnitTestExitBootServices, // ExitBootServices
+ (EFI_GET_NEXT_MONOTONIC_COUNT) UnitTestGetNextMonotonicCount, // GetNextMonotonicCount
+ (EFI_STALL) UnitTestStall, // Stall
+ (EFI_SET_WATCHDOG_TIMER) UnitTestSetWatchdogTimer, // SetWatchdogTimer
+ (EFI_CONNECT_CONTROLLER) UnitTestConnectController, // ConnectController
+ (EFI_DISCONNECT_CONTROLLER) UnitTestDisconnectController, // DisconnectController
+ (EFI_OPEN_PROTOCOL) UnitTestOpenProtocol, // OpenProtocol
+ (EFI_CLOSE_PROTOCOL) UnitTestCloseProtocol, // CloseProtocol
+ (EFI_OPEN_PROTOCOL_INFORMATION) UnitTestOpenProtocolInformation, // OpenProtocolInformation
+ (EFI_PROTOCOLS_PER_HANDLE) UnitTestProtocolsPerHandle, // ProtocolsPerHandle
+ (EFI_LOCATE_HANDLE_BUFFER) UnitTestLocateHandleBuffer, // LocateHandleBuffer
+ (EFI_LOCATE_PROTOCOL) UnitTestLocateProtocol, // LocateProtocol
+ (EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) UnitTestInstallMultipleProtocolInterfaces, // InstallMultipleProtocolInterfaces
+ (EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) UnitTestUninstallMultipleProtocolInterfaces, // UninstallMultipleProtocolInterfaces
+ (EFI_CALCULATE_CRC32) UnitTestCalculateCrc32, // CalculateCrc32
+ (EFI_COPY_MEM) CopyMem, // CopyMem
+ (EFI_SET_MEM) SetMem, // SetMem
+ (EFI_CREATE_EVENT_EX) UnitTestCreateEventEx // CreateEventEx
+};
+
+EFI_BOOT_SERVICES *gBS = &mBootServices;
+
+/**
+ The constructor function caches the pointer of Boot Services Table.
+
+ The constructor function caches the pointer of Boot Services Table through System Table.
+ It will ASSERT() if the pointer of System Table is NULL.
+ It will ASSERT() if the pointer of Boot Services Table is NULL.
+ It will always return EFI_SUCCESS.
+
+ @param ImageHandle The firmware allocated handle for the EFI image.
+ @param SystemTable A pointer to the EFI System Table.
+
+ @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.
+
+**/
+EFI_STATUS
+EFIAPI
+UefiBootServicesTableLibConstructor (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ //
+ // Cache the Image Handle
+ //
+ gImageHandle = ImageHandle;
+ ASSERT (gImageHandle != NULL);
+
+ //
+ // Cache pointer to the EFI System Table
+ //
+
+ // Note: The system table is not implemented
+ gST = NULL;
+
+ //
+ // Cache pointer to the EFI Boot Services Table
+ //
+ gBS = SystemTable->BootServices;
+ ASSERT (gBS != NULL);
+
+ return EFI_SUCCESS;
+}