mirror of https://github.com/acidanthera/audk.git
120 lines
7.4 KiB
C
120 lines
7.4 KiB
C
/** @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 "UnitTestUefiBootServicesTableLib.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
|
|
UnitTestUefiBootServicesTableLibConstructor (
|
|
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;
|
|
}
|