public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Michael Kubacki" <mikuback@linux.microsoft.com>
To: devel@edk2.groups.io
Cc: Michael D Kinney <michael.d.kinney@intel.com>,
	Sean Brogan <sean.brogan@microsoft.com>
Subject: [PATCH v1 2/2] PrmPkg: Use UnitTestFrameworkPkg UEFI BS library
Date: Thu,  3 Nov 2022 20:24:40 -0400	[thread overview]
Message-ID: <20221104002440.2316-3-mikuback@linux.microsoft.com> (raw)
In-Reply-To: <20221104002440.2316-1-mikuback@linux.microsoft.com>

From: Michael Kubacki <michael.kubacki@microsoft.com>

Updates PrmPkg to use UnitTestUefiBootServicesTableLib from
UnitTestFrameworkPkg instead of UefiBootServicesTableLibUnitTest
in PrmPkg.

Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Sean Brogan <sean.brogan@microsoft.com>
Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
---
 PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.c           |  119 --
 PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestEventTimer.c |  180 ---
 PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestImage.c      |  163 --
 PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestMemory.c     |  145 --
 PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestMisc.c       |  198 ---
 PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestProtocol.c   | 1650 --------------------
 PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestTpl.c        |   43 -
 PrmPkg/PrmPkg.dsc                                                                                          |    1 -
 PrmPkg/Test/PrmPkgHostTest.dsc                                                                             |    6 -
 PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibTest.uni             |   12 -
 PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.h           | 1042 ------------
 PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.inf         |   46 -
 PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestProtocol.h   |  120 --
 13 files changed, 3725 deletions(-)

diff --git a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.c b/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.c
deleted file mode 100644
index ea3235e448a2..000000000000
--- a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/** @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;
-}
diff --git a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestEventTimer.c b/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestEventTimer.c
deleted file mode 100644
index c1ec801bca42..000000000000
--- a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestEventTimer.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/** @file
-  Implementation of event and timer related services in the UEFI Boot Services table for use in unit tests.
-
-Copyright (c) Microsoft Corporation
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "UefiBootServicesTableLibUnitTest.h"
-
-/**
-  Creates an event.
-
-  @param  Type                   The type of event to create and its mode and
-                                 attributes
-  @param  NotifyTpl              The task priority level of event notifications
-  @param  NotifyFunction         Pointer to the events notification function
-  @param  NotifyContext          Pointer to the notification functions context
-                                 corresponds to parameter "Context" in the
-                                 notification function
-  @param  Event                  Pointer to the newly created event if the call
-                                 succeeds  undefined otherwise
-
-  @retval EFI_SUCCESS            The event structure was created
-  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value
-  @retval EFI_OUT_OF_RESOURCES   The event could not be allocated
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestCreateEvent (
-  IN UINT32 Type,
-  IN EFI_TPL NotifyTpl,
-  IN EFI_EVENT_NOTIFY NotifyFunction, OPTIONAL
-  IN VOID                     *NotifyContext, OPTIONAL
-  OUT EFI_EVENT               *Event
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Sets the type of timer and the trigger time for a timer event.
-
-  @param  UserEvent              The timer event that is to be signaled at the
-                                 specified time
-  @param  Type                   The type of time that is specified in
-                                 TriggerTime
-  @param  TriggerTime            The number of 100ns units until the timer
-                                 expires
-
-  @retval EFI_SUCCESS            The event has been set to be signaled at the
-                                 requested time
-  @retval EFI_INVALID_PARAMETER  Event or Type is not valid
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestSetTimer (
-  IN EFI_EVENT        UserEvent,
-  IN EFI_TIMER_DELAY  Type,
-  IN UINT64           TriggerTime
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Stops execution until an event is signaled.
-
-  @param  NumberOfEvents         The number of events in the UserEvents array
-  @param  UserEvents             An array of EFI_EVENT
-  @param  UserIndex              Pointer to the index of the event which
-                                 satisfied the wait condition
-
-  @retval EFI_SUCCESS            The event indicated by Index was signaled.
-  @retval EFI_INVALID_PARAMETER  The event indicated by Index has a notification
-                                 function or Event was not a valid type
-  @retval EFI_UNSUPPORTED        The current TPL is not TPL_APPLICATION
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestWaitForEvent (
-  IN UINTN      NumberOfEvents,
-  IN EFI_EVENT  *UserEvents,
-  OUT UINTN     *UserIndex
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Signals the event.  Queues the event to be notified if needed.
-
-  @param  UserEvent              The event to signal .
-
-  @retval EFI_INVALID_PARAMETER  Parameters are not valid.
-  @retval EFI_SUCCESS            The event was signaled.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestSignalEvent (
-  IN EFI_EVENT  UserEvent
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Closes an event and frees the event structure.
-
-  @param  UserEvent              Event to close
-
-  @retval EFI_INVALID_PARAMETER  Parameters are not valid.
-  @retval EFI_SUCCESS            The event has been closed
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestCloseEvent (
-  IN EFI_EVENT  UserEvent
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Check the status of an event.
-
-  @param  UserEvent              The event to check
-
-  @retval EFI_SUCCESS            The event is in the signaled state
-  @retval EFI_NOT_READY          The event is not in the signaled state
-  @retval EFI_INVALID_PARAMETER  Event is of type EVT_NOTIFY_SIGNAL
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestCheckEvent (
-  IN EFI_EVENT  UserEvent
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Creates an event in a group.
-
-  @param  Type                   The type of event to create and its mode and
-                                 attributes
-  @param  NotifyTpl              The task priority level of event notifications
-  @param  NotifyFunction         Pointer to the events notification function
-  @param  NotifyContext          Pointer to the notification functions context
-                                 corresponds to parameter "Context" in the
-                                 notification function
-  @param  EventGroup             GUID for EventGroup if NULL act the same as
-                                 gBS->CreateEvent().
-  @param  Event                  Pointer to the newly created event if the call
-                                 succeeds  undefined otherwise
-
-  @retval EFI_SUCCESS            The event structure was created
-  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value
-  @retval EFI_OUT_OF_RESOURCES   The event could not be allocated
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestCreateEventEx (
-  IN UINT32 Type,
-  IN EFI_TPL NotifyTpl,
-  IN EFI_EVENT_NOTIFY NotifyFunction, OPTIONAL
-  IN CONST VOID               *NotifyContext, OPTIONAL
-  IN CONST EFI_GUID           *EventGroup, OPTIONAL
-  OUT EFI_EVENT               *Event
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
diff --git a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestImage.c b/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestImage.c
deleted file mode 100644
index a5799ff92d0c..000000000000
--- a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestImage.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/** @file
-  Implementation of image related services in the UEFI Boot Services table for use in unit tests.
-
-Copyright (c) Microsoft Corporation
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "UefiBootServicesTableLibUnitTest.h"
-
-/**
-  Loads an EFI image into memory and returns a handle to the image.
-
-  @param  BootPolicy              If TRUE, indicates that the request originates
-                                  from the boot manager, and that the boot
-                                  manager is attempting to load FilePath as a
-                                  boot selection.
-  @param  ParentImageHandle       The caller's image handle.
-  @param  FilePath                The specific file path from which the image is
-                                  loaded.
-  @param  SourceBuffer            If not NULL, a pointer to the memory location
-                                  containing a copy of the image to be loaded.
-  @param  SourceSize              The size in bytes of SourceBuffer.
-  @param  ImageHandle             Pointer to the returned image handle that is
-                                  created when the image is successfully loaded.
-
-  @retval EFI_SUCCESS             The image was loaded into memory.
-  @retval EFI_NOT_FOUND           The FilePath was not found.
-  @retval EFI_INVALID_PARAMETER   One of the parameters has an invalid value.
-  @retval EFI_UNSUPPORTED         The image type is not supported, or the device
-                                  path cannot be parsed to locate the proper
-                                  protocol for loading the file.
-  @retval EFI_OUT_OF_RESOURCES    Image was not loaded due to insufficient
-                                  resources.
-  @retval EFI_LOAD_ERROR          Image was not loaded because the image format was corrupt or not
-                                  understood.
-  @retval EFI_DEVICE_ERROR        Image was not loaded because the device returned a read error.
-  @retval EFI_ACCESS_DENIED       Image was not loaded because the platform policy prohibits the
-                                  image from being loaded. NULL is returned in *ImageHandle.
-  @retval EFI_SECURITY_VIOLATION  Image was loaded and an ImageHandle was created with a
-                                  valid EFI_LOADED_IMAGE_PROTOCOL. However, the current
-                                  platform policy specifies that the image should not be started.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestLoadImage (
-  IN BOOLEAN                   BootPolicy,
-  IN EFI_HANDLE                ParentImageHandle,
-  IN EFI_DEVICE_PATH_PROTOCOL  *FilePath,
-  IN VOID                      *SourceBuffer   OPTIONAL,
-  IN UINTN                     SourceSize,
-  OUT EFI_HANDLE               *ImageHandle
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Transfer control to a loaded image's entry point.
-
-  @param  ImageHandle             Handle of image to be started.
-  @param  ExitDataSize            Pointer of the size to ExitData
-  @param  ExitData                Pointer to a pointer to a data buffer that
-                                  includes a Null-terminated string,
-                                  optionally followed by additional binary data.
-                                  The string is a description that the caller may
-                                  use to further indicate the reason for the
-                                  image's exit.
-
-  @retval EFI_INVALID_PARAMETER   Invalid parameter
-  @retval EFI_OUT_OF_RESOURCES    No enough buffer to allocate
-  @retval EFI_SECURITY_VIOLATION  The current platform policy specifies that the image should not be started.
-  @retval EFI_SUCCESS             Successfully transfer control to the image's
-                                  entry point.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestStartImage (
-  IN EFI_HANDLE  ImageHandle,
-  OUT UINTN      *ExitDataSize,
-  OUT CHAR16     **ExitData  OPTIONAL
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Terminates the currently loaded EFI image and returns control to boot services.
-
-  @param  ImageHandle             Handle that identifies the image. This
-                                  parameter is passed to the image on entry.
-  @param  Status                  The image's exit code.
-  @param  ExitDataSize            The size, in bytes, of ExitData. Ignored if
-                                  ExitStatus is EFI_SUCCESS.
-  @param  ExitData                Pointer to a data buffer that includes a
-                                  Null-terminated Unicode string, optionally
-                                  followed by additional binary data. The string
-                                  is a description that the caller may use to
-                                  further indicate the reason for the image's
-                                  exit.
-
-  @retval EFI_INVALID_PARAMETER   Image handle is NULL or it is not current
-                                  image.
-  @retval EFI_SUCCESS             Successfully terminates the currently loaded
-                                  EFI image.
-  @retval EFI_ACCESS_DENIED       Should never reach there.
-  @retval EFI_OUT_OF_RESOURCES    Could not allocate pool
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestExit (
-  IN EFI_HANDLE  ImageHandle,
-  IN EFI_STATUS  Status,
-  IN UINTN       ExitDataSize,
-  IN CHAR16      *ExitData  OPTIONAL
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Unloads an image.
-
-  @param  ImageHandle             Handle that identifies the image to be
-                                  unloaded.
-
-  @retval EFI_SUCCESS             The image has been unloaded.
-  @retval EFI_UNSUPPORTED         The image has been started, and does not support
-                                  unload.
-  @retval EFI_INVALID_PARAMPETER  ImageHandle is not a valid image handle.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestUnloadImage (
-  IN EFI_HANDLE  ImageHandle
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Terminates all boot services.
-
-  @param  ImageHandle            Handle that identifies the exiting image.
-  @param  MapKey                 Key to the latest memory map.
-
-  @retval EFI_SUCCESS            Boot Services terminated
-  @retval EFI_INVALID_PARAMETER  MapKey is incorrect.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestExitBootServices (
-  IN EFI_HANDLE  ImageHandle,
-  IN UINTN       MapKey
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
diff --git a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestMemory.c b/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestMemory.c
deleted file mode 100644
index 2c9a1989f2d1..000000000000
--- a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestMemory.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/** @file
-  Implementation of memory related services in the UEFI Boot Services table for use in unit tests.
-
-Copyright (c) Microsoft Corporation
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "UefiBootServicesTableLibUnitTest.h"
-
-/**
-  Allocates pages from the memory map.
-
-  @param  Type                   The type of allocation to perform
-  @param  MemoryType             The type of memory to turn the allocated pages
-                                 into
-  @param  NumberOfPages          The number of pages to allocate
-  @param  Memory                 A pointer to receive the base allocated memory
-                                 address
-
-  @return Status. On success, Memory is filled in with the base address allocated
-  @retval EFI_INVALID_PARAMETER  Parameters violate checking rules defined in
-                                 spec.
-  @retval EFI_NOT_FOUND          Could not allocate pages match the requirement.
-  @retval EFI_OUT_OF_RESOURCES   No enough pages to allocate.
-  @retval EFI_SUCCESS            Pages successfully allocated.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestAllocatePages (
-  IN EFI_ALLOCATE_TYPE         Type,
-  IN EFI_MEMORY_TYPE           MemoryType,
-  IN UINTN                     NumberOfPages,
-  IN OUT EFI_PHYSICAL_ADDRESS  *Memory
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Frees previous allocated pages.
-
-  @param  Memory                 Base address of memory being freed
-  @param  NumberOfPages          The number of pages to free
-
-  @retval EFI_NOT_FOUND          Could not find the entry that covers the range
-  @retval EFI_INVALID_PARAMETER  Address not aligned
-  @return EFI_SUCCESS         -Pages successfully freed.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestFreePages (
-  IN EFI_PHYSICAL_ADDRESS  Memory,
-  IN UINTN                 NumberOfPages
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  This function returns a copy of the current memory map. The map is an array of
-  memory descriptors, each of which describes a contiguous block of memory.
-
-  @param  MemoryMapSize          A pointer to the size, in bytes, of the
-                                 MemoryMap buffer. On input, this is the size of
-                                 the buffer allocated by the caller.  On output,
-                                 it is the size of the buffer returned by the
-                                 firmware  if the buffer was large enough, or the
-                                 size of the buffer needed  to contain the map if
-                                 the buffer was too small.
-  @param  MemoryMap              A pointer to the buffer in which firmware places
-                                 the current memory map.
-  @param  MapKey                 A pointer to the location in which firmware
-                                 returns the key for the current memory map.
-  @param  DescriptorSize         A pointer to the location in which firmware
-                                 returns the size, in bytes, of an individual
-                                 EFI_MEMORY_DESCRIPTOR.
-  @param  DescriptorVersion      A pointer to the location in which firmware
-                                 returns the version number associated with the
-                                 EFI_MEMORY_DESCRIPTOR.
-
-  @retval EFI_SUCCESS            The memory map was returned in the MemoryMap
-                                 buffer.
-  @retval EFI_BUFFER_TOO_SMALL   The MemoryMap buffer was too small. The current
-                                 buffer size needed to hold the memory map is
-                                 returned in MemoryMapSize.
-  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestGetMemoryMap (
-  IN OUT UINTN                  *MemoryMapSize,
-  IN OUT EFI_MEMORY_DESCRIPTOR  *MemoryMap,
-  OUT UINTN                     *MapKey,
-  OUT UINTN                     *DescriptorSize,
-  OUT UINT32                    *DescriptorVersion
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Allocate pool of a particular type.
-
-  @param  PoolType               Type of pool to allocate
-  @param  Size                   The amount of pool to allocate
-  @param  Buffer                 The address to return a pointer to the allocated
-                                 pool
-
-  @retval EFI_INVALID_PARAMETER  PoolType not valid or Buffer is NULL
-  @retval EFI_OUT_OF_RESOURCES   Size exceeds max pool size or allocation failed.
-  @retval EFI_SUCCESS            Pool successfully allocated.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestAllocatePool (
-  IN EFI_MEMORY_TYPE  PoolType,
-  IN UINTN            Size,
-  OUT VOID            **Buffer
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Frees pool.
-
-  @param  Buffer                 The allocated pool entry to free
-
-  @retval EFI_INVALID_PARAMETER  Buffer is not a valid value.
-  @retval EFI_SUCCESS            Pool successfully freed.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestFreePool (
-  IN VOID  *Buffer
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
diff --git a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestMisc.c b/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestMisc.c
deleted file mode 100644
index ab7936544801..000000000000
--- a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestMisc.c
+++ /dev/null
@@ -1,198 +0,0 @@
-/** @file
-  Implementation of miscellaneous services in the UEFI Boot Services table for use in unit tests.
-
-Copyright (c) Microsoft Corporation
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "UefiBootServicesTableLibUnitTest.h"
-
-/**
-  Returns a monotonically increasing count for the platform.
-
-  @param[out]  Count            The pointer to returned value.
-
-  @retval EFI_SUCCESS           The next monotonic count was returned.
-  @retval EFI_INVALID_PARAMETER Count is NULL.
-  @retval EFI_DEVICE_ERROR      The device is not functioning properly.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestGetNextMonotonicCount (
-  OUT UINT64  *Count
-  )
-{
-  STATIC  UINT64  StaticCount = 0;
-
-  *Count = StaticCount++;
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Introduces a fine-grained stall.
-
-  @param  Microseconds           The number of microseconds to stall execution.
-
-  @retval EFI_SUCCESS            Execution was stalled for at least the requested
-                                 amount of microseconds.
-  @retval EFI_NOT_AVAILABLE_YET  gMetronome is not available yet
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestStall (
-  IN UINTN  Microseconds
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Sets the system's watchdog timer.
-
-  @param  Timeout         The number of seconds to set the watchdog timer to.
-                          A value of zero disables the timer.
-  @param  WatchdogCode    The numeric code to log on a watchdog timer timeout
-                          event. The firmware reserves codes 0x0000 to 0xFFFF.
-                          Loaders and operating systems may use other timeout
-                          codes.
-  @param  DataSize        The size, in bytes, of WatchdogData.
-  @param  WatchdogData    A data buffer that includes a Null-terminated Unicode
-                          string, optionally followed by additional binary data.
-                          The string is a description that the call may use to
-                          further indicate the reason to be logged with a
-                          watchdog event.
-
-  @return EFI_SUCCESS               Timeout has been set
-  @return EFI_NOT_AVAILABLE_YET     WatchdogTimer is not available yet
-  @return EFI_UNSUPPORTED           System does not have a timer (currently not used)
-  @return EFI_DEVICE_ERROR          Could not complete due to hardware error
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestSetWatchdogTimer (
-  IN UINTN   Timeout,
-  IN UINT64  WatchdogCode,
-  IN UINTN   DataSize,
-  IN CHAR16  *WatchdogData OPTIONAL
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Connects one or more drivers to a controller.
-
-  @param  ControllerHandle      The handle of the controller to which driver(s) are to be connected.
-  @param  DriverImageHandle     A pointer to an ordered list handles that support the
-                                EFI_DRIVER_BINDING_PROTOCOL.
-  @param  RemainingDevicePath   A pointer to the device path that specifies a child of the
-                                controller specified by ControllerHandle.
-  @param  Recursive             If TRUE, then ConnectController() is called recursively
-                                until the entire tree of controllers below the controller specified
-                                by ControllerHandle have been created. If FALSE, then
-                                the tree of controllers is only expanded one level.
-
-  @retval EFI_SUCCESS           1) One or more drivers were connected to ControllerHandle.
-                                2) No drivers were connected to ControllerHandle, but
-                                RemainingDevicePath is not NULL, and it is an End Device
-                                Path Node.
-  @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
-  @retval EFI_NOT_FOUND         1) There are no EFI_DRIVER_BINDING_PROTOCOL instances
-                                present in the system.
-                                2) No drivers were connected to ControllerHandle.
-  @retval EFI_SECURITY_VIOLATION
-                                The user has no permission to start UEFI device drivers on the device path
-                                associated with the ControllerHandle or specified by the RemainingDevicePath.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestConnectController (
-  IN  EFI_HANDLE                ControllerHandle,
-  IN  EFI_HANDLE                *DriverImageHandle    OPTIONAL,
-  IN  EFI_DEVICE_PATH_PROTOCOL  *RemainingDevicePath  OPTIONAL,
-  IN  BOOLEAN                   Recursive
-  )
-{
-  return EFI_SUCCESS; // Return success for now
-}
-
-/**
-  Disconnects a controller from a driver
-
-  @param  ControllerHandle                      ControllerHandle The handle of
-                                                the controller from which
-                                                driver(s)  are to be
-                                                disconnected.
-  @param  DriverImageHandle                     DriverImageHandle The driver to
-                                                disconnect from ControllerHandle.
-  @param  ChildHandle                           ChildHandle The handle of the
-                                                child to destroy.
-
-  @retval EFI_SUCCESS                           One or more drivers were
-                                                disconnected from the controller.
-  @retval EFI_SUCCESS                           On entry, no drivers are managing
-                                                ControllerHandle.
-  @retval EFI_SUCCESS                           DriverImageHandle is not NULL,
-                                                and on entry DriverImageHandle is
-                                                not managing ControllerHandle.
-  @retval EFI_INVALID_PARAMETER                 ControllerHandle is NULL.
-  @retval EFI_INVALID_PARAMETER                 DriverImageHandle is not NULL,
-                                                and it is not a valid EFI_HANDLE.
-  @retval EFI_INVALID_PARAMETER                 ChildHandle is not NULL, and it
-                                                is not a valid EFI_HANDLE.
-  @retval EFI_OUT_OF_RESOURCES                  There are not enough resources
-                                                available to disconnect any
-                                                drivers from ControllerHandle.
-  @retval EFI_DEVICE_ERROR                      The controller could not be
-                                                disconnected because of a device
-                                                error.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestDisconnectController (
-  IN  EFI_HANDLE  ControllerHandle,
-  IN  EFI_HANDLE  DriverImageHandle  OPTIONAL,
-  IN  EFI_HANDLE  ChildHandle        OPTIONAL
-  )
-{
-  return EFI_SUCCESS; // Return success for now
-}
-
-/**
-  Computes and returns a 32-bit CRC for a data buffer.
-
-  @param[in]   Data             A pointer to the buffer on which the 32-bit CRC is to be computed.
-  @param[in]   DataSize         The number of bytes in the buffer Data.
-  @param[out]  Crc32            The 32-bit CRC that was computed for the data buffer specified by Data
-                                and DataSize.
-
-  @retval EFI_SUCCESS           The 32-bit CRC was computed for the data buffer and returned in
-                                Crc32.
-  @retval EFI_INVALID_PARAMETER Data is NULL.
-  @retval EFI_INVALID_PARAMETER Crc32 is NULL.
-  @retval EFI_INVALID_PARAMETER DataSize is 0.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestCalculateCrc32 (
-  IN  VOID    *Data,
-  IN  UINTN   DataSize,
-  OUT UINT32  *Crc32
-  )
-{
-  if ((Data == NULL) || (Crc32 == NULL) || (DataSize == 0)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  *Crc32 = CalculateCrc32 (Data, DataSize);
-
-  return EFI_SUCCESS;
-}
diff --git a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestProtocol.c b/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestProtocol.c
deleted file mode 100644
index 799b153a445f..000000000000
--- a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestProtocol.c
+++ /dev/null
@@ -1,1650 +0,0 @@
-/** @file
-  Implementation of protocol related services in the UEFI Boot Services table for use in unit tests.
-
-Copyright (c) Microsoft Corporation
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "UefiBootServicesTableLibUnitTestProtocol.h"
-
-STATIC LIST_ENTRY  mProtocolDatabase       = INITIALIZE_LIST_HEAD_VARIABLE (mProtocolDatabase);
-STATIC LIST_ENTRY  gHandleList             = INITIALIZE_LIST_HEAD_VARIABLE (gHandleList);
-STATIC UINT64      gHandleDatabaseKey      = 0;
-STATIC UINTN       mEfiLocateHandleRequest = 0;
-
-//
-// Helper Functions
-//
-
-/**
-  Check whether a handle is a valid EFI_HANDLE
-
-  @param  UserHandle             The handle to check
-
-  @retval EFI_INVALID_PARAMETER  The handle is NULL or not a valid EFI_HANDLE.
-  @retval EFI_SUCCESS            The handle is valid EFI_HANDLE.
-
-**/
-EFI_STATUS
-UnitTestValidateHandle (
-  IN  EFI_HANDLE  UserHandle
-  )
-{
-  IHANDLE     *Handle;
-  LIST_ENTRY  *Link;
-
-  if (UserHandle == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  for (Link = gHandleList.BackLink; Link != &gHandleList; Link = Link->BackLink) {
-    Handle = CR (Link, IHANDLE, AllHandles, EFI_HANDLE_SIGNATURE);
-    if (Handle == (IHANDLE *)UserHandle) {
-      return EFI_SUCCESS;
-    }
-  }
-
-  return EFI_INVALID_PARAMETER;
-}
-
-/**
-  Finds the protocol entry for the requested protocol.
-
-  @param  Protocol               The ID of the protocol
-  @param  Create                 Create a new entry if not found
-
-  @return Protocol entry
-
-**/
-PROTOCOL_ENTRY  *
-UnitTestFindProtocolEntry (
-  IN EFI_GUID  *Protocol,
-  IN BOOLEAN   Create
-  )
-{
-  LIST_ENTRY      *Link;
-  PROTOCOL_ENTRY  *Item;
-  PROTOCOL_ENTRY  *ProtEntry;
-
-  //
-  // Search the database for the matching GUID
-  //
-
-  ProtEntry = NULL;
-  for (Link = mProtocolDatabase.ForwardLink;
-       Link != &mProtocolDatabase;
-       Link = Link->ForwardLink)
-  {
-    Item = CR (Link, PROTOCOL_ENTRY, AllEntries, PROTOCOL_ENTRY_SIGNATURE);
-    if (CompareGuid (&Item->ProtocolID, Protocol)) {
-      //
-      // This is the protocol entry
-      //
-
-      ProtEntry = Item;
-      break;
-    }
-  }
-
-  //
-  // If the protocol entry was not found and Create is TRUE, then
-  // allocate a new entry
-  //
-  if ((ProtEntry == NULL) && Create) {
-    ProtEntry = AllocatePool (sizeof (PROTOCOL_ENTRY));
-
-    if (ProtEntry != NULL) {
-      //
-      // Initialize new protocol entry structure
-      //
-      ProtEntry->Signature = PROTOCOL_ENTRY_SIGNATURE;
-      CopyGuid ((VOID *)&ProtEntry->ProtocolID, Protocol);
-      InitializeListHead (&ProtEntry->Protocols);
-      InitializeListHead (&ProtEntry->Notify);
-
-      //
-      // Add it to protocol database
-      //
-      InsertTailList (&mProtocolDatabase, &ProtEntry->AllEntries);
-    }
-  }
-
-  return ProtEntry;
-}
-
-/**
-  Finds the protocol instance for the requested handle and protocol.
-  Note: This function doesn't do parameters checking, it's caller's responsibility
-  to pass in valid parameters.
-
-  @param  Handle                 The handle to search the protocol on
-  @param  Protocol               GUID of the protocol
-  @param  Interface              The interface for the protocol being searched
-
-  @return Protocol instance (NULL: Not found)
-
-**/
-PROTOCOL_INTERFACE *
-UnitTestFindProtocolInterface (
-  IN IHANDLE   *Handle,
-  IN EFI_GUID  *Protocol,
-  IN VOID      *Interface
-  )
-{
-  PROTOCOL_INTERFACE  *Prot;
-  PROTOCOL_ENTRY      *ProtEntry;
-  LIST_ENTRY          *Link;
-
-  Prot = NULL;
-
-  //
-  // Lookup the protocol entry for this protocol ID
-  //
-
-  ProtEntry = UnitTestFindProtocolEntry (Protocol, FALSE);
-  if (ProtEntry != NULL) {
-    //
-    // Look at each protocol interface for any matches
-    //
-    for (Link = Handle->Protocols.ForwardLink; Link != &Handle->Protocols; Link = Link->ForwardLink) {
-      //
-      // If this protocol interface matches, remove it
-      //
-      Prot = CR (Link, PROTOCOL_INTERFACE, Link, PROTOCOL_INTERFACE_SIGNATURE);
-      if ((Prot->Interface == Interface) && (Prot->Protocol == ProtEntry)) {
-        break;
-      }
-
-      Prot = NULL;
-    }
-  }
-
-  return Prot;
-}
-
-/**
-  Signal event for every protocol in protocol entry.
-
-  @param  ProtEntry              Protocol entry
-
-**/
-VOID
-UnitTestNotifyProtocolEntry (
-  IN PROTOCOL_ENTRY  *ProtEntry
-  )
-{
-  PROTOCOL_NOTIFY  *ProtNotify;
-  LIST_ENTRY       *Link;
-
-  for (Link = ProtEntry->Notify.ForwardLink; Link != &ProtEntry->Notify; Link = Link->ForwardLink) {
-    ProtNotify = CR (Link, PROTOCOL_NOTIFY, Link, PROTOCOL_NOTIFY_SIGNATURE);
-    UnitTestSignalEvent (ProtNotify->Event);
-  }
-}
-
-/**
-  Routine to get the next Handle, when you are searching for all handles.
-
-  @param  Position               Information about which Handle to seach for.
-  @param  Interface              Return the interface structure for the matching
-                                 protocol.
-
-  @return An pointer to IHANDLE if the next Position is not the end of the list.
-          Otherwise,NULL is returned.
-
-**/
-IHANDLE *
-UnitTestGetNextLocateAllHandles (
-  IN OUT LOCATE_POSITION  *Position,
-  OUT VOID                **Interface
-  )
-{
-  IHANDLE  *Handle;
-
-  //
-  // Next handle
-  //
-  Position->Position = Position->Position->ForwardLink;
-
-  //
-  // If not at the end of the list, get the handle
-  //
-  Handle     = NULL;
-  *Interface = NULL;
-  if (Position->Position != &gHandleList) {
-    Handle = CR (Position->Position, IHANDLE, AllHandles, EFI_HANDLE_SIGNATURE);
-  }
-
-  return Handle;
-}
-
-/**
-  Routine to get the next Handle, when you are searching for register protocol
-  notifies.
-
-  @param  Position               Information about which Handle to seach for.
-  @param  Interface              Return the interface structure for the matching
-                                 protocol.
-
-  @return An pointer to IHANDLE if the next Position is not the end of the list.
-          Otherwise,NULL is returned.
-
-**/
-IHANDLE *
-UnitTestGetNextLocateByRegisterNotify (
-  IN OUT LOCATE_POSITION  *Position,
-  OUT VOID                **Interface
-  )
-{
-  IHANDLE             *Handle;
-  PROTOCOL_NOTIFY     *ProtNotify;
-  PROTOCOL_INTERFACE  *Prot;
-  LIST_ENTRY          *Link;
-
-  Handle     = NULL;
-  *Interface = NULL;
-  ProtNotify = Position->SearchKey;
-
-  //
-  // If this is the first request, get the next handle
-  //
-  if (ProtNotify != NULL) {
-    ASSERT (ProtNotify->Signature == PROTOCOL_NOTIFY_SIGNATURE);
-    Position->SearchKey = NULL;
-
-    //
-    // If not at the end of the list, get the next handle
-    //
-    Link = ProtNotify->Position->ForwardLink;
-    if (Link != &ProtNotify->Protocol->Protocols) {
-      Prot       = CR (Link, PROTOCOL_INTERFACE, ByProtocol, PROTOCOL_INTERFACE_SIGNATURE);
-      Handle     = Prot->Handle;
-      *Interface = Prot->Interface;
-    }
-  }
-
-  return Handle;
-}
-
-/**
-  Routine to get the next Handle, when you are searching for a given protocol.
-
-  @param  Position               Information about which Handle to seach for.
-  @param  Interface              Return the interface structure for the matching
-                                 protocol.
-
-  @return An pointer to IHANDLE if the next Position is not the end of the list.
-          Otherwise,NULL is returned.
-
-**/
-IHANDLE *
-UnitTestGetNextLocateByProtocol (
-  IN OUT LOCATE_POSITION  *Position,
-  OUT VOID                **Interface
-  )
-{
-  IHANDLE             *Handle;
-  LIST_ENTRY          *Link;
-  PROTOCOL_INTERFACE  *Prot;
-
-  Handle     = NULL;
-  *Interface = NULL;
-  for ( ; ;) {
-    //
-    // Next entry
-    //
-    Link               = Position->Position->ForwardLink;
-    Position->Position = Link;
-
-    //
-    // If not at the end, return the handle
-    //
-    if (Link == &Position->ProtEntry->Protocols) {
-      Handle = NULL;
-      break;
-    }
-
-    //
-    // Get the handle
-    //
-    Prot       = CR (Link, PROTOCOL_INTERFACE, ByProtocol, PROTOCOL_INTERFACE_SIGNATURE);
-    Handle     = Prot->Handle;
-    *Interface = Prot->Interface;
-
-    //
-    // If this handle has not been returned this request, then
-    // return it now
-    //
-    if (Handle->LocateRequest != mEfiLocateHandleRequest) {
-      Handle->LocateRequest = mEfiLocateHandleRequest;
-      break;
-    }
-  }
-
-  return Handle;
-}
-
-/**
-  Attempts to disconnect all drivers that are using the protocol interface being queried.
-  If failed, reconnect all drivers disconnected.
-  Note: This function doesn't do parameters checking, it's caller's responsibility
-  to pass in valid parameters.
-
-  @param  UserHandle             The handle on which the protocol is installed
-  @param  Prot                   The protocol to disconnect drivers from
-
-  @retval EFI_SUCCESS            Drivers using the protocol interface are all
-                                 disconnected
-  @retval EFI_ACCESS_DENIED      Failed to disconnect one or all of the drivers
-
-**/
-EFI_STATUS
-UnitTestDisconnectControllersUsingProtocolInterface (
-  IN EFI_HANDLE          UserHandle,
-  IN PROTOCOL_INTERFACE  *Prot
-  )
-{
-  EFI_STATUS          Status;
-  BOOLEAN             ItemFound;
-  LIST_ENTRY          *Link;
-  OPEN_PROTOCOL_DATA  *OpenData;
-
-  Status = EFI_SUCCESS;
-
-  //
-  // Attempt to disconnect all drivers from this protocol interface
-  //
-  do {
-    ItemFound = FALSE;
-    for (Link = Prot->OpenList.ForwardLink; Link != &Prot->OpenList; Link = Link->ForwardLink) {
-      OpenData = CR (Link, OPEN_PROTOCOL_DATA, Link, OPEN_PROTOCOL_DATA_SIGNATURE);
-      if ((OpenData->Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) != 0) {
-        Status = UnitTestDisconnectController (UserHandle, OpenData->AgentHandle, NULL);
-        if (!EFI_ERROR (Status)) {
-          ItemFound = TRUE;
-        }
-
-        break;
-      }
-    }
-  } while (ItemFound);
-
-  if (!EFI_ERROR (Status)) {
-    //
-    // Attempt to remove BY_HANDLE_PROTOCOL and GET_PROTOCOL and TEST_PROTOCOL Open List items
-    //
-    for (Link = Prot->OpenList.ForwardLink; Link != &Prot->OpenList;) {
-      OpenData = CR (Link, OPEN_PROTOCOL_DATA, Link, OPEN_PROTOCOL_DATA_SIGNATURE);
-      if ((OpenData->Attributes &
-           (EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL | EFI_OPEN_PROTOCOL_GET_PROTOCOL | EFI_OPEN_PROTOCOL_TEST_PROTOCOL)) != 0)
-      {
-        Link = RemoveEntryList (&OpenData->Link);
-        Prot->OpenListCount--;
-        FreePool (OpenData);
-      } else {
-        Link = Link->ForwardLink;
-      }
-    }
-  }
-
-  //
-  // If there are errors or still has open items in the list, then reconnect all the drivers and return an error
-  //
-  if (EFI_ERROR (Status) || (Prot->OpenListCount > 0)) {
-    UnitTestConnectController (UserHandle, NULL, NULL, TRUE);
-    Status = EFI_ACCESS_DENIED;
-  }
-
-  return Status;
-}
-
-/**
-  Removes Protocol from the protocol list (but not the handle list).
-
-  @param  Handle                 The handle to remove protocol on.
-  @param  Protocol               GUID of the protocol to be moved
-  @param  Interface              The interface of the protocol
-
-  @return Protocol Entry
-
-**/
-PROTOCOL_INTERFACE *
-UnitTestRemoveInterfaceFromProtocol (
-  IN IHANDLE   *Handle,
-  IN EFI_GUID  *Protocol,
-  IN VOID      *Interface
-  )
-{
-  PROTOCOL_INTERFACE  *Prot;
-  PROTOCOL_NOTIFY     *ProtNotify;
-  PROTOCOL_ENTRY      *ProtEntry;
-  LIST_ENTRY          *Link;
-
-  Prot = UnitTestFindProtocolInterface (Handle, Protocol, Interface);
-  if (Prot != NULL) {
-    ProtEntry = Prot->Protocol;
-
-    //
-    // If there's a protocol notify location pointing to this entry, back it up one
-    //
-    for (Link = ProtEntry->Notify.ForwardLink; Link != &ProtEntry->Notify; Link = Link->ForwardLink) {
-      ProtNotify = CR (Link, PROTOCOL_NOTIFY, Link, PROTOCOL_NOTIFY_SIGNATURE);
-
-      if (ProtNotify->Position == &Prot->ByProtocol) {
-        ProtNotify->Position = Prot->ByProtocol.BackLink;
-      }
-    }
-
-    //
-    // Remove the protocol interface entry
-    //
-    RemoveEntryList (&Prot->ByProtocol);
-  }
-
-  return Prot;
-}
-
-//
-// Boot Services Function Implementation
-//
-
-/**
-  Locate a certain GUID protocol interface in a Handle's protocols.
-
-  @param  UserHandle             The handle to obtain the protocol interface on
-  @param  Protocol               The GUID of the protocol
-
-  @return The requested protocol interface for the handle
-
-**/
-PROTOCOL_INTERFACE  *
-UnitTestGetProtocolInterface (
-  IN  EFI_HANDLE  UserHandle,
-  IN  EFI_GUID    *Protocol
-  )
-{
-  EFI_STATUS          Status;
-  PROTOCOL_ENTRY      *ProtEntry;
-  PROTOCOL_INTERFACE  *Prot;
-  IHANDLE             *Handle;
-  LIST_ENTRY          *Link;
-
-  Status = UnitTestValidateHandle (UserHandle);
-  if (EFI_ERROR (Status)) {
-    return NULL;
-  }
-
-  Handle = (IHANDLE *)UserHandle;
-
-  //
-  // Look at each protocol interface for a match
-  //
-  for (Link = Handle->Protocols.ForwardLink; Link != &Handle->Protocols; Link = Link->ForwardLink) {
-    Prot      = CR (Link, PROTOCOL_INTERFACE, Link, PROTOCOL_INTERFACE_SIGNATURE);
-    ProtEntry = Prot->Protocol;
-    if (CompareGuid (&ProtEntry->ProtocolID, Protocol)) {
-      return Prot;
-    }
-  }
-
-  return NULL;
-}
-
-/**
-  Installs a protocol interface into the boot services environment.
-
-  @param  UserHandle             The handle to install the protocol handler on,
-                                 or NULL if a new handle is to be allocated
-  @param  Protocol               The protocol to add to the handle
-  @param  InterfaceType          Indicates whether Interface is supplied in
-                                 native form.
-  @param  Interface              The interface for the protocol being added
-  @param  Notify                 indicates whether notify the notification list
-                                 for this protocol
-
-  @retval EFI_INVALID_PARAMETER  Invalid parameter
-  @retval EFI_OUT_OF_RESOURCES   No enough buffer to allocate
-  @retval EFI_SUCCESS            Protocol interface successfully installed
-
-**/
-EFI_STATUS
-UnitTestInstallProtocolInterfaceNotify (
-  IN OUT EFI_HANDLE      *UserHandle,
-  IN EFI_GUID            *Protocol,
-  IN EFI_INTERFACE_TYPE  InterfaceType,
-  IN VOID                *Interface,
-  IN BOOLEAN             Notify
-  )
-{
-  PROTOCOL_INTERFACE  *Prot;
-  PROTOCOL_ENTRY      *ProtEntry;
-  IHANDLE             *Handle;
-  EFI_STATUS          Status;
-  VOID                *ExistingInterface;
-
-  //
-  // returns EFI_INVALID_PARAMETER if InterfaceType is invalid.
-  // Also added check for invalid UserHandle and Protocol pointers.
-  //
-  if ((UserHandle == NULL) || (Protocol == NULL)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (InterfaceType != EFI_NATIVE_INTERFACE) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // Print debug message
-  //
-  UT_LOG_INFO ("InstallProtocolInterface: %g %p\n", Protocol, Interface);
-
-  Status = EFI_OUT_OF_RESOURCES;
-  Prot   = NULL;
-  Handle = NULL;
-
-  if (*UserHandle != NULL) {
-    Status = UnitTestHandleProtocol (*UserHandle, Protocol, (VOID **)&ExistingInterface);
-    if (!EFI_ERROR (Status)) {
-      return EFI_INVALID_PARAMETER;
-    }
-  }
-
-  //
-  // Lookup the Protocol Entry for the requested protocol
-  //
-  ProtEntry = UnitTestFindProtocolEntry (Protocol, TRUE);
-  if (ProtEntry == NULL) {
-    goto Done;
-  }
-
-  //
-  // Allocate a new protocol interface structure
-  //
-  Prot = AllocateZeroPool (sizeof (PROTOCOL_INTERFACE));
-  if (Prot == NULL) {
-    Status = EFI_OUT_OF_RESOURCES;
-    goto Done;
-  }
-
-  //
-  // If caller didn't supply a handle, allocate a new one
-  //
-  Handle = (IHANDLE *)*UserHandle;
-  if (Handle == NULL) {
-    Handle = AllocateZeroPool (sizeof (IHANDLE));
-    if (Handle == NULL) {
-      Status = EFI_OUT_OF_RESOURCES;
-      goto Done;
-    }
-
-    //
-    // Initialize new handler structure
-    //
-    Handle->Signature = EFI_HANDLE_SIGNATURE;
-    InitializeListHead (&Handle->Protocols);
-
-    //
-    // Initialize the Key to show that the handle has been created/modified
-    //
-    gHandleDatabaseKey++;
-    Handle->Key = gHandleDatabaseKey;
-
-    //
-    // Add this handle to the list global list of all handles
-    // in the system
-    //
-    InsertTailList (&gHandleList, &Handle->AllHandles);
-  } else {
-    Status =  UnitTestValidateHandle (Handle);
-    if (EFI_ERROR (Status)) {
-      DEBUG ((DEBUG_ERROR, "InstallProtocolInterface: input handle at 0x%x is invalid\n", Handle));
-      goto Done;
-    }
-  }
-
-  //
-  // Each interface that is added must be unique
-  //
-  ASSERT (UnitTestFindProtocolInterface (Handle, Protocol, Interface) == NULL);
-
-  //
-  // Initialize the protocol interface structure
-  //
-  Prot->Signature = PROTOCOL_INTERFACE_SIGNATURE;
-  Prot->Handle    = Handle;
-  Prot->Protocol  = ProtEntry;
-  Prot->Interface = Interface;
-
-  //
-  // Initialize OpenProtocol Data base
-  //
-  InitializeListHead (&Prot->OpenList);
-  Prot->OpenListCount = 0;
-
-  //
-  // Add this protocol interface to the head of the supported
-  // protocol list for this handle
-  //
-  InsertHeadList (&Handle->Protocols, &Prot->Link);
-
-  //
-  // Add this protocol interface to the tail of the
-  // protocol entry
-  //
-  InsertTailList (&ProtEntry->Protocols, &Prot->ByProtocol);
-
-  //
-  // Notify the notification list for this protocol
-  //
-  if (Notify) {
-    UnitTestNotifyProtocolEntry (ProtEntry);
-  }
-
-  Status = EFI_SUCCESS;
-
-Done:
-  if (!EFI_ERROR (Status)) {
-    //
-    // Return the new handle back to the caller
-    //
-    *UserHandle = Handle;
-  } else {
-    //
-    // There was an error, clean up
-    //
-    if (Prot != NULL) {
-      UnitTestFreePool (Prot);
-    }
-
-    DEBUG ((DEBUG_ERROR, "InstallProtocolInterface: %g %p failed with %r\n", Protocol, Interface, Status));
-  }
-
-  return Status;
-}
-
-/**
-  Wrapper function to UnitTestInstallProtocolInterfaceNotify.  This is the public API which
-  Calls the private one which contains a BOOLEAN parameter for notifications
-
-  @param  UserHandle             The handle to install the protocol handler on,
-                                 or NULL if a new handle is to be allocated
-  @param  Protocol               The protocol to add to the handle
-  @param  InterfaceType          Indicates whether Interface is supplied in
-                                 native form.
-  @param  Interface              The interface for the protocol being added
-
-  @return Status code
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestInstallProtocolInterface (
-  IN OUT EFI_HANDLE      *UserHandle,
-  IN EFI_GUID            *Protocol,
-  IN EFI_INTERFACE_TYPE  InterfaceType,
-  IN VOID                *Interface
-  )
-{
-  return UnitTestInstallProtocolInterfaceNotify (
-           UserHandle,
-           Protocol,
-           InterfaceType,
-           Interface,
-           TRUE
-           );
-}
-
-/**
-  Reinstall a protocol interface on a device handle.  The OldInterface for Protocol is replaced by the NewInterface.
-
-  @param  UserHandle             Handle on which the interface is to be
-                                 reinstalled
-  @param  Protocol               The numeric ID of the interface
-  @param  OldInterface           A pointer to the old interface
-  @param  NewInterface           A pointer to the new interface
-
-  @retval EFI_SUCCESS            The protocol interface was installed
-  @retval EFI_NOT_FOUND          The OldInterface on the handle was not found
-  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestReinstallProtocolInterface (
-  IN EFI_HANDLE  UserHandle,
-  IN EFI_GUID    *Protocol,
-  IN VOID        *OldInterface,
-  IN VOID        *NewInterface
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Uninstalls all instances of a protocol:interfacer from a handle.
-  If the last protocol interface is remove from the handle, the
-  handle is freed.
-
-  @param  UserHandle             The handle to remove the protocol handler from
-  @param  Protocol               The protocol, of protocol:interface, to remove
-  @param  Interface              The interface, of protocol:interface, to remove
-
-  @retval EFI_INVALID_PARAMETER  Protocol is NULL.
-  @retval EFI_SUCCESS            Protocol interface successfully uninstalled.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestUninstallProtocolInterface (
-  IN EFI_HANDLE  UserHandle,
-  IN EFI_GUID    *Protocol,
-  IN VOID        *Interface
-  )
-{
-  EFI_STATUS          Status;
-  IHANDLE             *Handle;
-  PROTOCOL_INTERFACE  *Prot;
-
-  //
-  // Check that Protocol is valid
-  //
-  if (Protocol == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // Check that UserHandle is a valid handle
-  //
-  Status = UnitTestValidateHandle (UserHandle);
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  //
-  // Check that Protocol exists on UserHandle, and Interface matches the interface in the database
-  //
-  Prot = UnitTestFindProtocolInterface (UserHandle, Protocol, Interface);
-  if (Prot == NULL) {
-    Status = EFI_NOT_FOUND;
-    goto Done;
-  }
-
-  //
-  // Attempt to disconnect all drivers that are using the protocol interface that is about to be removed
-  //
-  Status = UnitTestDisconnectControllersUsingProtocolInterface (
-             UserHandle,
-             Prot
-             );
-  if (EFI_ERROR (Status)) {
-    //
-    // One or more drivers refused to release, so return the error
-    //
-    goto Done;
-  }
-
-  //
-  // Remove the protocol interface from the protocol
-  //
-  Status = EFI_NOT_FOUND;
-  Handle = (IHANDLE *)UserHandle;
-  Prot   = UnitTestRemoveInterfaceFromProtocol (Handle, Protocol, Interface);
-
-  if (Prot != NULL) {
-    //
-    // Update the Key to show that the handle has been created/modified
-    //
-    gHandleDatabaseKey++;
-    Handle->Key = gHandleDatabaseKey;
-
-    //
-    // Remove the protocol interface from the handle
-    //
-    RemoveEntryList (&Prot->Link);
-
-    //
-    // Free the memory
-    //
-    Prot->Signature = 0;
-    FreePool (Prot);
-    Status = EFI_SUCCESS;
-  }
-
-  //
-  // If there are no more handlers for the handle, free the handle
-  //
-  if (IsListEmpty (&Handle->Protocols)) {
-    Handle->Signature = 0;
-    RemoveEntryList (&Handle->AllHandles);
-    FreePool (Handle);
-  }
-
-Done:
-  return Status;
-}
-
-/**
-  Queries a handle to determine if it supports a specified protocol.
-
-  @param  UserHandle             The handle being queried.
-  @param  Protocol               The published unique identifier of the protocol.
-  @param  Interface              Supplies the address where a pointer to the
-                                 corresponding Protocol Interface is returned.
-
-  @return The requested protocol interface for the handle
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestHandleProtocol (
-  IN EFI_HANDLE  UserHandle,
-  IN EFI_GUID    *Protocol,
-  OUT VOID       **Interface
-  )
-{
-  return UnitTestOpenProtocol (
-           UserHandle,
-           Protocol,
-           Interface,
-           gImageHandle,
-           NULL,
-           EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL
-           );
-}
-
-/**
-  Add a new protocol notification record for the request protocol.
-
-  @param  Protocol               The requested protocol to add the notify
-                                 registration
-  @param  Event                  The event to signal
-  @param  Registration           Returns the registration record
-
-  @retval EFI_INVALID_PARAMETER  Invalid parameter
-  @retval EFI_SUCCESS            Successfully returned the registration record
-                                 that has been added
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestRegisterProtocolNotify (
-  IN EFI_GUID   *Protocol,
-  IN EFI_EVENT  Event,
-  OUT  VOID     **Registration
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Locates the requested handle(s) and returns them in Buffer.
-
-  @param  SearchType             The type of search to perform to locate the
-                                 handles
-  @param  Protocol               The protocol to search for
-  @param  SearchKey              Dependant on SearchType
-  @param  BufferSize             On input the size of Buffer.  On output the
-                                 size of data returned.
-  @param  Buffer                 The buffer to return the results in
-
-  @retval EFI_BUFFER_TOO_SMALL   Buffer too small, required buffer size is
-                                 returned in BufferSize.
-  @retval EFI_INVALID_PARAMETER  Invalid parameter
-  @retval EFI_SUCCESS            Successfully found the requested handle(s) and
-                                 returns them in Buffer.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestLocateHandle (
-  IN EFI_LOCATE_SEARCH_TYPE  SearchType,
-  IN EFI_GUID                *Protocol   OPTIONAL,
-  IN VOID                    *SearchKey  OPTIONAL,
-  IN OUT UINTN               *BufferSize,
-  OUT EFI_HANDLE             *Buffer
-  )
-{
-  EFI_STATUS          Status;
-  LOCATE_POSITION     Position;
-  PROTOCOL_NOTIFY     *ProtNotify;
-  UNIT_TEST_GET_NEXT  GetNext;
-  UINTN               ResultSize;
-  IHANDLE             *Handle;
-  IHANDLE             **ResultBuffer;
-  VOID                *Interface;
-
-  if (BufferSize == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if ((*BufferSize > 0) && (Buffer == NULL)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  GetNext = NULL;
-
-  //
-  // Set initial position
-  //
-  Position.Protocol  = Protocol;
-  Position.SearchKey = SearchKey;
-  Position.Position  = &gHandleList;
-
-  ResultSize   = 0;
-  ResultBuffer = (IHANDLE **)Buffer;
-  Status       = EFI_SUCCESS;
-
-  //
-  // Get the search function based on type
-  //
-  switch (SearchType) {
-    case AllHandles:
-      GetNext = UnitTestGetNextLocateAllHandles;
-      break;
-
-    case ByRegisterNotify:
-      //
-      // Must have SearchKey for locate ByRegisterNotify
-      //
-      if (SearchKey == NULL) {
-        Status = EFI_INVALID_PARAMETER;
-        break;
-      }
-
-      GetNext = UnitTestGetNextLocateByRegisterNotify;
-      break;
-
-    case ByProtocol:
-      GetNext = UnitTestGetNextLocateByProtocol;
-      if (Protocol == NULL) {
-        Status = EFI_INVALID_PARAMETER;
-        break;
-      }
-
-      //
-      // Look up the protocol entry and set the head pointer
-      //
-      Position.ProtEntry = UnitTestFindProtocolEntry (Protocol, FALSE);
-      if (Position.ProtEntry == NULL) {
-        Status = EFI_NOT_FOUND;
-        break;
-      }
-
-      Position.Position = &Position.ProtEntry->Protocols;
-      break;
-
-    default:
-      Status = EFI_INVALID_PARAMETER;
-      break;
-  }
-
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  ASSERT (GetNext != NULL);
-  //
-  // Enumerate out the matching handles
-  //
-  mEfiLocateHandleRequest += 1;
-  for ( ; ;) {
-    //
-    // Get the next handle.  If no more handles, stop
-    //
-    Handle = GetNext (&Position, &Interface);
-    if (NULL == Handle) {
-      break;
-    }
-
-    //
-    // Increase the resulting buffer size, and if this handle
-    // fits return it
-    //
-    ResultSize += sizeof (Handle);
-    if (ResultSize <= *BufferSize) {
-      *ResultBuffer = Handle;
-      ResultBuffer += 1;
-    }
-  }
-
-  //
-  // If the result is a zero length buffer, then there were no
-  // matching handles
-  //
-  if (ResultSize == 0) {
-    Status = EFI_NOT_FOUND;
-  } else {
-    //
-    // Return the resulting buffer size.  If it's larger than what
-    // was passed, then set the error code
-    //
-    if (ResultSize > *BufferSize) {
-      Status = EFI_BUFFER_TOO_SMALL;
-    }
-
-    *BufferSize = ResultSize;
-
-    if ((SearchType == ByRegisterNotify) && !EFI_ERROR (Status)) {
-      //
-      // If this is a search by register notify and a handle was
-      // returned, update the register notification position
-      //
-      ASSERT (SearchKey != NULL);
-      ProtNotify           = SearchKey;
-      ProtNotify->Position = ProtNotify->Position->ForwardLink;
-    }
-  }
-
-  return Status;
-}
-
-/**
-  Locates the handle to a device on the device path that best matches the specified protocol.
-
-  @param  Protocol               The protocol to search for.
-  @param  DevicePath             On input, a pointer to a pointer to the device
-                                 path. On output, the device path pointer is
-                                 modified to point to the remaining part of the
-                                 devicepath.
-  @param  Device                 A pointer to the returned device handle.
-
-  @retval EFI_SUCCESS            The resulting handle was returned.
-  @retval EFI_NOT_FOUND          No handles matched the search.
-  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestLocateDevicePath (
-  IN EFI_GUID                      *Protocol,
-  IN OUT EFI_DEVICE_PATH_PROTOCOL  **DevicePath,
-  OUT EFI_HANDLE                   *Device
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Boot Service called to add, modify, or remove a system configuration table from
-  the EFI System Table.
-
-  @param  Guid           Pointer to the GUID for the entry to add, update, or
-                         remove
-  @param  Table          Pointer to the configuration table for the entry to add,
-                         update, or remove, may be NULL.
-
-  @return EFI_SUCCESS               Guid, Table pair added, updated, or removed.
-  @return EFI_INVALID_PARAMETER     Input GUID not valid.
-  @return EFI_NOT_FOUND             Attempted to delete non-existant entry
-  @return EFI_OUT_OF_RESOURCES      Not enough memory available
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestInstallConfigurationTable (
-  IN EFI_GUID  *Guid,
-  IN VOID      *Table
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Locates the installed protocol handler for the handle, and
-  invokes it to obtain the protocol interface. Usage information
-  is registered in the protocol data base.
-
-  @param  UserHandle             The handle to obtain the protocol interface on
-  @param  Protocol               The ID of the protocol
-  @param  Interface              The location to return the protocol interface
-  @param  ImageHandle            The handle of the Image that is opening the
-                                 protocol interface specified by Protocol and
-                                 Interface.
-  @param  ControllerHandle       The controller handle that is requiring this
-                                 interface.
-  @param  Attributes             The open mode of the protocol interface
-                                 specified by Handle and Protocol.
-
-  @retval EFI_INVALID_PARAMETER  Protocol is NULL.
-  @retval EFI_SUCCESS            Get the protocol interface.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestOpenProtocol (
-  IN  EFI_HANDLE  UserHandle,
-  IN  EFI_GUID    *Protocol,
-  OUT VOID        **Interface OPTIONAL,
-  IN  EFI_HANDLE  ImageHandle,
-  IN  EFI_HANDLE  ControllerHandle,
-  IN  UINT32      Attributes
-  )
-{
-  EFI_STATUS          Status;
-  PROTOCOL_INTERFACE  *Prot;
-  LIST_ENTRY          *Link;
-  OPEN_PROTOCOL_DATA  *OpenData;
-  BOOLEAN             ByDriver;
-  BOOLEAN             Exclusive;
-  BOOLEAN             Disconnect;
-  BOOLEAN             ExactMatch;
-
-  //
-  // Check for invalid Protocol
-  //
-  if (Protocol == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // Check for invalid Interface
-  //
-  if ((Attributes != EFI_OPEN_PROTOCOL_TEST_PROTOCOL) && (Interface == NULL)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // Check for invalid UserHandle
-  //
-  Status =  UnitTestValidateHandle (UserHandle);
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  //
-  // Check for invalid Attributes
-  //
-  switch (Attributes) {
-    case EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER:
-      Status =  UnitTestValidateHandle (ImageHandle);
-      if (EFI_ERROR (Status)) {
-        return Status;
-      }
-
-      Status =  UnitTestValidateHandle (ControllerHandle);
-      if (EFI_ERROR (Status)) {
-        return Status;
-      }
-
-      if (UserHandle == ControllerHandle) {
-        return EFI_INVALID_PARAMETER;
-      }
-
-      break;
-    case EFI_OPEN_PROTOCOL_BY_DRIVER:
-    case EFI_OPEN_PROTOCOL_BY_DRIVER | EFI_OPEN_PROTOCOL_EXCLUSIVE:
-      Status =  UnitTestValidateHandle (ImageHandle);
-      if (EFI_ERROR (Status)) {
-        return Status;
-      }
-
-      Status =  UnitTestValidateHandle (ControllerHandle);
-      if (EFI_ERROR (Status)) {
-        return Status;
-      }
-
-      break;
-    case EFI_OPEN_PROTOCOL_EXCLUSIVE:
-      Status =  UnitTestValidateHandle (ImageHandle);
-      if (EFI_ERROR (Status)) {
-        return Status;
-      }
-
-      break;
-    case EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL:
-    case EFI_OPEN_PROTOCOL_GET_PROTOCOL:
-    case EFI_OPEN_PROTOCOL_TEST_PROTOCOL:
-      break;
-    default:
-      return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // Look at each protocol interface for a match
-  //
-  Prot = UnitTestGetProtocolInterface (UserHandle, Protocol);
-  if (Prot == NULL) {
-    Status = EFI_UNSUPPORTED;
-    goto Done;
-  }
-
-  Status = EFI_SUCCESS;
-
-  ByDriver  = FALSE;
-  Exclusive = FALSE;
-  for ( Link = Prot->OpenList.ForwardLink; Link != &Prot->OpenList; Link = Link->ForwardLink) {
-    OpenData   = CR (Link, OPEN_PROTOCOL_DATA, Link, OPEN_PROTOCOL_DATA_SIGNATURE);
-    ExactMatch =  (BOOLEAN)((OpenData->AgentHandle == ImageHandle) &&
-                            (OpenData->Attributes == Attributes)  &&
-                            (OpenData->ControllerHandle == ControllerHandle));
-    if ((OpenData->Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) != 0) {
-      ByDriver = TRUE;
-      if (ExactMatch) {
-        Status = EFI_ALREADY_STARTED;
-        goto Done;
-      }
-    }
-
-    if ((OpenData->Attributes & EFI_OPEN_PROTOCOL_EXCLUSIVE) != 0) {
-      Exclusive = TRUE;
-    } else if (ExactMatch) {
-      OpenData->OpenCount++;
-      Status = EFI_SUCCESS;
-      goto Done;
-    }
-  }
-
-  //
-  // ByDriver  TRUE  -> A driver is managing (UserHandle, Protocol)
-  // ByDriver  FALSE -> There are no drivers managing (UserHandle, Protocol)
-  // Exclusive TRUE  -> Something has exclusive access to (UserHandle, Protocol)
-  // Exclusive FALSE -> Nothing has exclusive access to (UserHandle, Protocol)
-  //
-
-  switch (Attributes) {
-    case EFI_OPEN_PROTOCOL_BY_DRIVER:
-      if (Exclusive || ByDriver) {
-        Status = EFI_ACCESS_DENIED;
-        goto Done;
-      }
-
-      break;
-    case EFI_OPEN_PROTOCOL_BY_DRIVER | EFI_OPEN_PROTOCOL_EXCLUSIVE:
-    case EFI_OPEN_PROTOCOL_EXCLUSIVE:
-      if (Exclusive) {
-        Status = EFI_ACCESS_DENIED;
-        goto Done;
-      }
-
-      if (ByDriver) {
-        do {
-          Disconnect = FALSE;
-          for (Link = Prot->OpenList.ForwardLink; Link != &Prot->OpenList; Link = Link->ForwardLink) {
-            OpenData = CR (Link, OPEN_PROTOCOL_DATA, Link, OPEN_PROTOCOL_DATA_SIGNATURE);
-            if ((OpenData->Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) != 0) {
-              Disconnect = TRUE;
-              Status     = UnitTestDisconnectController (UserHandle, OpenData->AgentHandle, NULL);
-              if (EFI_ERROR (Status)) {
-                Status = EFI_ACCESS_DENIED;
-                goto Done;
-              } else {
-                break;
-              }
-            }
-          }
-        } while (Disconnect);
-      }
-
-      break;
-    case EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER:
-    case EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL:
-    case EFI_OPEN_PROTOCOL_GET_PROTOCOL:
-    case EFI_OPEN_PROTOCOL_TEST_PROTOCOL:
-      break;
-  }
-
-  if (ImageHandle == NULL) {
-    Status = EFI_SUCCESS;
-    goto Done;
-  }
-
-  //
-  // Create new entry
-  //
-  OpenData = AllocatePool (sizeof (OPEN_PROTOCOL_DATA));
-  if (OpenData == NULL) {
-    Status = EFI_OUT_OF_RESOURCES;
-  } else {
-    OpenData->Signature        = OPEN_PROTOCOL_DATA_SIGNATURE;
-    OpenData->AgentHandle      = ImageHandle;
-    OpenData->ControllerHandle = ControllerHandle;
-    OpenData->Attributes       = Attributes;
-    OpenData->OpenCount        = 1;
-    InsertTailList (&Prot->OpenList, &OpenData->Link);
-    Prot->OpenListCount++;
-    Status = EFI_SUCCESS;
-  }
-
-Done:
-
-  if (Attributes != EFI_OPEN_PROTOCOL_TEST_PROTOCOL) {
-    //
-    // Keep Interface unmodified in case of any Error
-    // except EFI_ALREADY_STARTED and EFI_UNSUPPORTED.
-    //
-    if (!EFI_ERROR (Status) || (Status == EFI_ALREADY_STARTED)) {
-      //
-      // According to above logic, if 'Prot' is NULL, then the 'Status' must be
-      // EFI_UNSUPPORTED. Here the 'Status' is not EFI_UNSUPPORTED, so 'Prot'
-      // must be not NULL.
-      //
-      // The ASSERT here is for addressing a false positive NULL pointer
-      // dereference issue raised from static analysis.
-      //
-      ASSERT (Prot != NULL);
-      //
-      // EFI_ALREADY_STARTED is not an error for bus driver.
-      // Return the corresponding protocol interface.
-      //
-      *Interface = Prot->Interface;
-    } else if (Status == EFI_UNSUPPORTED) {
-      //
-      // Return NULL Interface if Unsupported Protocol.
-      //
-      *Interface = NULL;
-    }
-  }
-
-  return Status;
-}
-
-/**
-  Closes a protocol on a handle that was opened using OpenProtocol().
-
-  @param  UserHandle             The handle for the protocol interface that was
-                                 previously opened with OpenProtocol(), and is
-                                 now being closed.
-  @param  Protocol               The published unique identifier of the protocol.
-                                 It is the caller's responsibility to pass in a
-                                 valid GUID.
-  @param  AgentHandle            The handle of the agent that is closing the
-                                 protocol interface.
-  @param  ControllerHandle       If the agent that opened a protocol is a driver
-                                 that follows the EFI Driver Model, then this
-                                 parameter is the controller handle that required
-                                 the protocol interface. If the agent does not
-                                 follow the EFI Driver Model, then this parameter
-                                 is optional and may be NULL.
-
-  @retval EFI_SUCCESS            The protocol instance was closed.
-  @retval EFI_INVALID_PARAMETER  Handle, AgentHandle or ControllerHandle is not a
-                                 valid EFI_HANDLE.
-  @retval EFI_NOT_FOUND          Can not find the specified protocol or
-                                 AgentHandle.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestCloseProtocol (
-  IN  EFI_HANDLE  UserHandle,
-  IN  EFI_GUID    *Protocol,
-  IN  EFI_HANDLE  AgentHandle,
-  IN  EFI_HANDLE  ControllerHandle
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Return information about Opened protocols in the system
-
-  @param  UserHandle             The handle to close the protocol interface on
-  @param  Protocol               The ID of the protocol
-  @param  EntryBuffer            A pointer to a buffer of open protocol
-                                 information in the form of
-                                 EFI_OPEN_PROTOCOL_INFORMATION_ENTRY structures.
-  @param  EntryCount             Number of EntryBuffer entries
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestOpenProtocolInformation (
-  IN  EFI_HANDLE                           UserHandle,
-  IN  EFI_GUID                             *Protocol,
-  OUT EFI_OPEN_PROTOCOL_INFORMATION_ENTRY  **EntryBuffer,
-  OUT UINTN                                *EntryCount
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Retrieves the list of protocol interface GUIDs that are installed on a handle in a buffer allocated
-  from pool.
-
-  @param  UserHandle             The handle from which to retrieve the list of
-                                 protocol interface GUIDs.
-  @param  ProtocolBuffer         A pointer to the list of protocol interface GUID
-                                 pointers that are installed on Handle.
-  @param  ProtocolBufferCount    A pointer to the number of GUID pointers present
-                                 in ProtocolBuffer.
-
-  @retval EFI_SUCCESS            The list of protocol interface GUIDs installed
-                                 on Handle was returned in ProtocolBuffer. The
-                                 number of protocol interface GUIDs was returned
-                                 in ProtocolBufferCount.
-  @retval EFI_INVALID_PARAMETER  Handle is NULL.
-  @retval EFI_INVALID_PARAMETER  Handle is not a valid EFI_HANDLE.
-  @retval EFI_INVALID_PARAMETER  ProtocolBuffer is NULL.
-  @retval EFI_INVALID_PARAMETER  ProtocolBufferCount is NULL.
-  @retval EFI_OUT_OF_RESOURCES   There is not enough pool memory to store the
-                                 results.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestProtocolsPerHandle (
-  IN EFI_HANDLE  UserHandle,
-  OUT EFI_GUID   ***ProtocolBuffer,
-  OUT UINTN      *ProtocolBufferCount
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Function returns an array of handles that support the requested protocol
-  in a buffer allocated from pool. This is a version of UnitTestLocateHandle()
-  that allocates a buffer for the caller.
-
-  @param  SearchType             Specifies which handle(s) are to be returned.
-  @param  Protocol               Provides the protocol to search by.    This
-                                 parameter is only valid for SearchType
-                                 ByProtocol.
-  @param  SearchKey              Supplies the search key depending on the
-                                 SearchType.
-  @param  NumberHandles          The number of handles returned in Buffer.
-  @param  Buffer                 A pointer to the buffer to return the requested
-                                 array of  handles that support Protocol.
-
-  @retval EFI_SUCCESS            The result array of handles was returned.
-  @retval EFI_NOT_FOUND          No handles match the search.
-  @retval EFI_OUT_OF_RESOURCES   There is not enough pool memory to store the
-                                 matching results.
-  @retval EFI_INVALID_PARAMETER  One or more parameters are not valid.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestLocateHandleBuffer (
-  IN EFI_LOCATE_SEARCH_TYPE  SearchType,
-  IN EFI_GUID                *Protocol OPTIONAL,
-  IN VOID                    *SearchKey OPTIONAL,
-  IN OUT UINTN               *NumberHandles,
-  OUT EFI_HANDLE             **Buffer
-  )
-{
-  EFI_STATUS  Status;
-  UINTN       BufferSize;
-
-  if (NumberHandles == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (Buffer == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  BufferSize     = 0;
-  *NumberHandles = 0;
-  *Buffer        = NULL;
-  Status         = UnitTestLocateHandle (
-                     SearchType,
-                     Protocol,
-                     SearchKey,
-                     &BufferSize,
-                     *Buffer
-                     );
-  //
-  // LocateHandleBuffer() returns incorrect status code if SearchType is
-  // invalid.
-  //
-  // Add code to correctly handle expected errors from UnitTestLocateHandle().
-  //
-  if (EFI_ERROR (Status) && (Status != EFI_BUFFER_TOO_SMALL)) {
-    if (Status != EFI_INVALID_PARAMETER) {
-      Status = EFI_NOT_FOUND;
-    }
-
-    return Status;
-  }
-
-  *Buffer = AllocatePool (BufferSize);
-  if (*Buffer == NULL) {
-    return EFI_OUT_OF_RESOURCES;
-  }
-
-  Status = UnitTestLocateHandle (
-             SearchType,
-             Protocol,
-             SearchKey,
-             &BufferSize,
-             *Buffer
-             );
-
-  *NumberHandles = BufferSize / sizeof (EFI_HANDLE);
-  if (EFI_ERROR (Status)) {
-    *NumberHandles = 0;
-  }
-
-  return Status;
-}
-
-/**
-  Return the first Protocol Interface that matches the Protocol GUID. If
-  Registration is passed in, return a Protocol Instance that was just add
-  to the system. If Registration is NULL return the first Protocol Interface
-  you find.
-
-  @param  Protocol               The protocol to search for
-  @param  Registration           Optional Registration Key returned from
-                                 RegisterProtocolNotify()
-  @param  Interface              Return the Protocol interface (instance).
-
-  @retval EFI_SUCCESS            If a valid Interface is returned
-  @retval EFI_INVALID_PARAMETER  Invalid parameter
-  @retval EFI_NOT_FOUND          Protocol interface not found
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestLocateProtocol (
-  IN  EFI_GUID  *Protocol,
-  IN  VOID      *Registration OPTIONAL,
-  OUT VOID      **Interface
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Installs a list of protocol interface into the boot services environment.
-  This function calls InstallProtocolInterface() in a loop. If any error
-  occurs all the protocols added by this function are removed. This is
-  basically a lib function to save space.
-
-  @param  Handle                 The handle to install the protocol handlers on,
-                                 or NULL if a new handle is to be allocated
-  @param  ...                    EFI_GUID followed by protocol instance. A NULL
-                                 terminates the  list. The pairs are the
-                                 arguments to InstallProtocolInterface(). All the
-                                 protocols are added to Handle.
-
-  @retval EFI_SUCCESS            All the protocol interface was installed.
-  @retval EFI_OUT_OF_RESOURCES   There was not enough memory in pool to install all the protocols.
-  @retval EFI_ALREADY_STARTED    A Device Path Protocol instance was passed in that is already present in
-                                 the handle database.
-  @retval EFI_INVALID_PARAMETER  Handle is NULL.
-  @retval EFI_INVALID_PARAMETER  Protocol is already installed on the handle specified by Handle.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestInstallMultipleProtocolInterfaces (
-  IN OUT EFI_HANDLE  *Handle,
-  ...
-  )
-{
-  return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-  Uninstalls a list of protocol interface in the boot services environment.
-  This function calls UninstallProtocolInterface() in a loop. This is
-  basically a lib function to save space.
-
-  @param  Handle                 The handle to uninstall the protocol
-  @param  ...                    EFI_GUID followed by protocol instance. A NULL
-                                 terminates the  list. The pairs are the
-                                 arguments to UninstallProtocolInterface(). All
-                                 the protocols are added to Handle.
-
-  @return Status code
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestUninstallMultipleProtocolInterfaces (
-  IN EFI_HANDLE  Handle,
-  ...
-  )
-{
-  EFI_STATUS  Status;
-  VA_LIST     Args;
-  EFI_GUID    *Protocol;
-  VOID        *Interface;
-  UINTN       Index;
-
-  VA_START (Args, Handle);
-  for (Index = 0, Status = EFI_SUCCESS; !EFI_ERROR (Status); Index++) {
-    //
-    // If protocol is NULL, then it's the end of the list
-    //
-    Protocol = VA_ARG (Args, EFI_GUID *);
-    if (Protocol == NULL) {
-      break;
-    }
-
-    Interface = VA_ARG (Args, VOID *);
-
-    //
-    // Uninstall it
-    //
-    Status = UnitTestUninstallProtocolInterface (Handle, Protocol, Interface);
-  }
-
-  VA_END (Args);
-
-  //
-  // If there was an error, add all the interfaces that were
-  // uninstalled without any errors
-  //
-  if (EFI_ERROR (Status)) {
-    //
-    // Reset the va_arg back to the first argument.
-    //
-    VA_START (Args, Handle);
-    for ( ; Index > 1; Index--) {
-      Protocol  = VA_ARG (Args, EFI_GUID *);
-      Interface = VA_ARG (Args, VOID *);
-      UnitTestInstallProtocolInterface (&Handle, Protocol, EFI_NATIVE_INTERFACE, Interface);
-    }
-
-    VA_END (Args);
-    Status = EFI_INVALID_PARAMETER;
-  }
-
-  return Status;
-}
diff --git a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestTpl.c b/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestTpl.c
deleted file mode 100644
index 5b7b6700f874..000000000000
--- a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestTpl.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/** @file
-  Implementation of Task Priority Level (TPL) related services in the UEFI Boot Services table for use in unit tests.
-
-Copyright (c) Microsoft Corporation
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "UefiBootServicesTableLibUnitTest.h"
-
-/**
-  Raise the task priority level to the new level.
-  High level is implemented by disabling processor interrupts.
-
-  @param  NewTpl  New task priority level
-
-  @return The previous task priority level
-
-**/
-EFI_TPL
-EFIAPI
-UnitTestRaiseTpl (
-  IN EFI_TPL  NewTpl
-  )
-{
-  return TPL_APPLICATION;
-}
-
-/**
-  Lowers the task priority to the previous value.   If the new
-  priority unmasks events at a higher priority, they are dispatched.
-
-  @param  NewTpl  New, lower, task priority
-
-**/
-VOID
-EFIAPI
-UnitTestRestoreTpl (
-  IN EFI_TPL  NewTpl
-  )
-{
-  return;
-}
diff --git a/PrmPkg/PrmPkg.dsc b/PrmPkg/PrmPkg.dsc
index 3fb7490acaff..677100504584 100644
--- a/PrmPkg/PrmPkg.dsc
+++ b/PrmPkg/PrmPkg.dsc
@@ -100,7 +100,6 @@ [Components]
   $(PLATFORM_PACKAGE)/Samples/PrmSampleAcpiParameterBufferModule/Library/DxeAcpiParameterBufferModuleConfigLib/DxeAcpiParameterBufferModuleConfigLib.inf
   $(PLATFORM_PACKAGE)/Samples/PrmSampleContextBufferModule/Library/DxeContextBufferModuleConfigLib/DxeContextBufferModuleConfigLib.inf
   $(PLATFORM_PACKAGE)/Samples/PrmSampleHardwareAccessModule/Library/DxeHardwareAccessModuleConfigLib/DxeHardwareAccessModuleConfigLib.inf
-  $(PLATFORM_PACKAGE)/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.inf
 
   #
   # PRM Module Discovery Library
diff --git a/PrmPkg/Test/PrmPkgHostTest.dsc b/PrmPkg/Test/PrmPkgHostTest.dsc
index 67fb4f5bd0d2..75d9046cc2e2 100644
--- a/PrmPkg/Test/PrmPkgHostTest.dsc
+++ b/PrmPkg/Test/PrmPkgHostTest.dsc
@@ -24,14 +24,8 @@ [LibraryClasses]
   PrmContextBufferLib|PrmPkg/Library/DxePrmContextBufferLib/DxePrmContextBufferLib.inf
   PrmModuleDiscoveryLib|PrmPkg/Library/DxePrmModuleDiscoveryLib/DxePrmModuleDiscoveryLib.inf
   PrmPeCoffLib|PrmPkg/Library/DxePrmPeCoffLib/DxePrmPeCoffLib.inf
-  UefiBootServicesTableLib|PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.inf
 
 [Components]
-  #
-  # Unit test helper libraries
-  #
-  PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.inf
-
   #
   # Unit test host applications
   #
diff --git a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibTest.uni b/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibTest.uni
deleted file mode 100644
index 1f742bb6d8e9..000000000000
--- a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibTest.uni
+++ /dev/null
@@ -1,12 +0,0 @@
-// /** @file
-// UEFI Boot Services Table Library for unit tests implementation.
-//
-// Copyright (c) Microsoft Corporation
-//
-// SPDX-License-Identifier: BSD-2-Clause-Patent
-//
-// **/
-
-#string STR_MODULE_ABSTRACT             #language en-US "UEFI Boot Services Table Library for unit tests"
-
-#string STR_MODULE_DESCRIPTION          #language en-US "UEFI Boot Services Table Library for unit tests."
diff --git a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.h b/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.h
deleted file mode 100644
index 82853bb61a1c..000000000000
--- a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.h
+++ /dev/null
@@ -1,1042 +0,0 @@
-/** @file
-  An internal header file for the Unit Test instance of the UEFI Boot Services Table Library.
-
-  This file includes common header files, defines internal structure and functions used by
-  the library implementation.
-
-Copyright (c) Microsoft Corporation
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef UEFI_BOOT_SERVICES_TABLE_LIB_UNIT_TEST_H_
-#define UEFI_BOOT_SERVICES_TABLE_LIB_UNIT_TEST_H_
-
-#include <Uefi.h>
-
-#include <Pi/PiMultiPhase.h>
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/DebugLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/UnitTestLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-
-/**
-  Raise the task priority level to the new level.
-  High level is implemented by disabling processor interrupts.
-
-  @param  NewTpl  New task priority level
-
-  @return The previous task priority level
-
-**/
-EFI_TPL
-EFIAPI
-UnitTestRaiseTpl (
-  IN EFI_TPL  NewTpl
-  );
-
-/**
-  Lowers the task priority to the previous value.   If the new
-  priority unmasks events at a higher priority, they are dispatched.
-
-  @param  NewTpl  New, lower, task priority
-
-**/
-VOID
-EFIAPI
-UnitTestRestoreTpl (
-  IN EFI_TPL  NewTpl
-  );
-
-/**
-  Allocates pages from the memory map.
-
-  @param  Type                   The type of allocation to perform
-  @param  MemoryType             The type of memory to turn the allocated pages
-                                 into
-  @param  NumberOfPages          The number of pages to allocate
-  @param  Memory                 A pointer to receive the base allocated memory
-                                 address
-
-  @return Status. On success, Memory is filled in with the base address allocated
-  @retval EFI_INVALID_PARAMETER  Parameters violate checking rules defined in
-                                 spec.
-  @retval EFI_NOT_FOUND          Could not allocate pages match the requirement.
-  @retval EFI_OUT_OF_RESOURCES   No enough pages to allocate.
-  @retval EFI_SUCCESS            Pages successfully allocated.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestAllocatePages (
-  IN EFI_ALLOCATE_TYPE         Type,
-  IN EFI_MEMORY_TYPE           MemoryType,
-  IN UINTN                     NumberOfPages,
-  IN OUT EFI_PHYSICAL_ADDRESS  *Memory
-  );
-
-/**
-  Frees previous allocated pages.
-
-  @param  Memory                 Base address of memory being freed
-  @param  NumberOfPages          The number of pages to free
-
-  @retval EFI_NOT_FOUND          Could not find the entry that covers the range
-  @retval EFI_INVALID_PARAMETER  Address not aligned
-  @return EFI_SUCCESS         -Pages successfully freed.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestFreePages (
-  IN EFI_PHYSICAL_ADDRESS  Memory,
-  IN UINTN                 NumberOfPages
-  );
-
-/**
-  This function returns a copy of the current memory map. The map is an array of
-  memory descriptors, each of which describes a contiguous block of memory.
-
-  @param  MemoryMapSize          A pointer to the size, in bytes, of the
-                                 MemoryMap buffer. On input, this is the size of
-                                 the buffer allocated by the caller.  On output,
-                                 it is the size of the buffer returned by the
-                                 firmware  if the buffer was large enough, or the
-                                 size of the buffer needed  to contain the map if
-                                 the buffer was too small.
-  @param  MemoryMap              A pointer to the buffer in which firmware places
-                                 the current memory map.
-  @param  MapKey                 A pointer to the location in which firmware
-                                 returns the key for the current memory map.
-  @param  DescriptorSize         A pointer to the location in which firmware
-                                 returns the size, in bytes, of an individual
-                                 EFI_MEMORY_DESCRIPTOR.
-  @param  DescriptorVersion      A pointer to the location in which firmware
-                                 returns the version number associated with the
-                                 EFI_MEMORY_DESCRIPTOR.
-
-  @retval EFI_SUCCESS            The memory map was returned in the MemoryMap
-                                 buffer.
-  @retval EFI_BUFFER_TOO_SMALL   The MemoryMap buffer was too small. The current
-                                 buffer size needed to hold the memory map is
-                                 returned in MemoryMapSize.
-  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestGetMemoryMap (
-  IN OUT UINTN                  *MemoryMapSize,
-  IN OUT EFI_MEMORY_DESCRIPTOR  *MemoryMap,
-  OUT UINTN                     *MapKey,
-  OUT UINTN                     *DescriptorSize,
-  OUT UINT32                    *DescriptorVersion
-  );
-
-/**
-  Allocate pool of a particular type.
-
-  @param  PoolType               Type of pool to allocate
-  @param  Size                   The amount of pool to allocate
-  @param  Buffer                 The address to return a pointer to the allocated
-                                 pool
-
-  @retval EFI_INVALID_PARAMETER  PoolType not valid or Buffer is NULL
-  @retval EFI_OUT_OF_RESOURCES   Size exceeds max pool size or allocation failed.
-  @retval EFI_SUCCESS            Pool successfully allocated.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestAllocatePool (
-  IN EFI_MEMORY_TYPE  PoolType,
-  IN UINTN            Size,
-  OUT VOID            **Buffer
-  );
-
-/**
-  Frees pool.
-
-  @param  Buffer                 The allocated pool entry to free
-
-  @retval EFI_INVALID_PARAMETER  Buffer is not a valid value.
-  @retval EFI_SUCCESS            Pool successfully freed.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestFreePool (
-  IN VOID  *Buffer
-  );
-
-/**
-  Frees pool.
-
-  @param  Buffer                 The allocated pool entry to free
-  @param  PoolType               Pointer to pool type
-
-  @retval EFI_INVALID_PARAMETER  Buffer is not a valid value.
-  @retval EFI_SUCCESS            Pool successfully freed.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestInternalFreePool (
-  IN VOID              *Buffer,
-  OUT EFI_MEMORY_TYPE  *PoolType OPTIONAL
-  );
-
-/**
-  Creates an event.
-
-  @param  Type                   The type of event to create and its mode and
-                                 attributes
-  @param  NotifyTpl              The task priority level of event notifications
-  @param  NotifyFunction         Pointer to the events notification function
-  @param  NotifyContext          Pointer to the notification functions context;
-                                 corresponds to parameter "Context" in the
-                                 notification function
-  @param  Event                  Pointer to the newly created event if the call
-                                 succeeds; undefined otherwise
-
-  @retval EFI_SUCCESS            The event structure was created
-  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value
-  @retval EFI_OUT_OF_RESOURCES   The event could not be allocated
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestCreateEvent (
-  IN UINT32 Type,
-  IN EFI_TPL NotifyTpl,
-  IN EFI_EVENT_NOTIFY NotifyFunction, OPTIONAL
-  IN VOID                     *NotifyContext, OPTIONAL
-  OUT EFI_EVENT               *Event
-  );
-
-/**
-  Sets the type of timer and the trigger time for a timer event.
-
-  @param  UserEvent              The timer event that is to be signaled at the
-                                 specified time
-  @param  Type                   The type of time that is specified in
-                                 TriggerTime
-  @param  TriggerTime            The number of 100ns units until the timer
-                                 expires
-
-  @retval EFI_SUCCESS            The event has been set to be signaled at the
-                                 requested time
-  @retval EFI_INVALID_PARAMETER  Event or Type is not valid
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestSetTimer (
-  IN EFI_EVENT        UserEvent,
-  IN EFI_TIMER_DELAY  Type,
-  IN UINT64           TriggerTime
-  );
-
-/**
-  Stops execution until an event is signaled.
-
-  @param  NumberOfEvents         The number of events in the UserEvents array
-  @param  UserEvents             An array of EFI_EVENT
-  @param  UserIndex              Pointer to the index of the event which
-                                 satisfied the wait condition
-
-  @retval EFI_SUCCESS            The event indicated by Index was signaled.
-  @retval EFI_INVALID_PARAMETER  The event indicated by Index has a notification
-                                 function or Event was not a valid type
-  @retval EFI_UNSUPPORTED        The current TPL is not TPL_APPLICATION
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestWaitForEvent (
-  IN UINTN      NumberOfEvents,
-  IN EFI_EVENT  *UserEvents,
-  OUT UINTN     *UserIndex
-  );
-
-/**
-  Signals the event.  Queues the event to be notified if needed.
-
-  @param  UserEvent              The event to signal .
-
-  @retval EFI_INVALID_PARAMETER  Parameters are not valid.
-  @retval EFI_SUCCESS            The event was signaled.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestSignalEvent (
-  IN EFI_EVENT  UserEvent
-  );
-
-/**
-  Closes an event and frees the event structure.
-
-  @param  UserEvent              Event to close
-
-  @retval EFI_INVALID_PARAMETER  Parameters are not valid.
-  @retval EFI_SUCCESS            The event has been closed
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestCloseEvent (
-  IN EFI_EVENT  UserEvent
-  );
-
-/**
-  Check the status of an event.
-
-  @param  UserEvent              The event to check
-
-  @retval EFI_SUCCESS            The event is in the signaled state
-  @retval EFI_NOT_READY          The event is not in the signaled state
-  @retval EFI_INVALID_PARAMETER  Event is of type EVT_NOTIFY_SIGNAL
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestCheckEvent (
-  IN EFI_EVENT  UserEvent
-  );
-
-/**
-  Wrapper function to UnitTestInstallProtocolInterfaceNotify.  This is the public API which
-  Calls the private one which contains a BOOLEAN parameter for notifications
-
-  @param  UserHandle             The handle to install the protocol handler on,
-                                 or NULL if a new handle is to be allocated
-  @param  Protocol               The protocol to add to the handle
-  @param  InterfaceType          Indicates whether Interface is supplied in
-                                 native form.
-  @param  Interface              The interface for the protocol being added
-
-  @return Status code
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestInstallProtocolInterface (
-  IN OUT EFI_HANDLE      *UserHandle,
-  IN EFI_GUID            *Protocol,
-  IN EFI_INTERFACE_TYPE  InterfaceType,
-  IN VOID                *Interface
-  );
-
-/**
-  Reinstall a protocol interface on a device handle.  The OldInterface for Protocol is replaced by the NewInterface.
-
-  @param  UserHandle             Handle on which the interface is to be
-                                 reinstalled
-  @param  Protocol               The numeric ID of the interface
-  @param  OldInterface           A pointer to the old interface
-  @param  NewInterface           A pointer to the new interface
-
-  @retval EFI_SUCCESS            The protocol interface was installed
-  @retval EFI_NOT_FOUND          The OldInterface on the handle was not found
-  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestReinstallProtocolInterface (
-  IN EFI_HANDLE  UserHandle,
-  IN EFI_GUID    *Protocol,
-  IN VOID        *OldInterface,
-  IN VOID        *NewInterface
-  );
-
-/**
-  Uninstalls all instances of a protocol:interfacer from a handle.
-  If the last protocol interface is remove from the handle, the
-  handle is freed.
-
-  @param  UserHandle             The handle to remove the protocol handler from
-  @param  Protocol               The protocol, of protocol:interface, to remove
-  @param  Interface              The interface, of protocol:interface, to remove
-
-  @retval EFI_INVALID_PARAMETER  Protocol is NULL.
-  @retval EFI_SUCCESS            Protocol interface successfully uninstalled.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestUninstallProtocolInterface (
-  IN EFI_HANDLE  UserHandle,
-  IN EFI_GUID    *Protocol,
-  IN VOID        *Interface
-  );
-
-/**
-  Queries a handle to determine if it supports a specified protocol.
-
-  @param  UserHandle             The handle being queried.
-  @param  Protocol               The published unique identifier of the protocol.
-  @param  Interface              Supplies the address where a pointer to the
-                                 corresponding Protocol Interface is returned.
-
-  @return The requested protocol interface for the handle
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestHandleProtocol (
-  IN EFI_HANDLE  UserHandle,
-  IN EFI_GUID    *Protocol,
-  OUT VOID       **Interface
-  );
-
-/**
-  Add a new protocol notification record for the request protocol.
-
-  @param  Protocol               The requested protocol to add the notify
-                                 registration
-  @param  Event                  The event to signal
-  @param  Registration           Returns the registration record
-
-  @retval EFI_INVALID_PARAMETER  Invalid parameter
-  @retval EFI_SUCCESS            Successfully returned the registration record
-                                 that has been added
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestRegisterProtocolNotify (
-  IN EFI_GUID   *Protocol,
-  IN EFI_EVENT  Event,
-  OUT  VOID     **Registration
-  );
-
-/**
-  Locates the requested handle(s) and returns them in Buffer.
-
-  @param  SearchType             The type of search to perform to locate the
-                                 handles
-  @param  Protocol               The protocol to search for
-  @param  SearchKey              Dependant on SearchType
-  @param  BufferSize             On input the size of Buffer.  On output the
-                                 size of data returned.
-  @param  Buffer                 The buffer to return the results in
-
-  @retval EFI_BUFFER_TOO_SMALL   Buffer too small, required buffer size is
-                                 returned in BufferSize.
-  @retval EFI_INVALID_PARAMETER  Invalid parameter
-  @retval EFI_SUCCESS            Successfully found the requested handle(s) and
-                                 returns them in Buffer.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestLocateHandle (
-  IN EFI_LOCATE_SEARCH_TYPE  SearchType,
-  IN EFI_GUID                *Protocol   OPTIONAL,
-  IN VOID                    *SearchKey  OPTIONAL,
-  IN OUT UINTN               *BufferSize,
-  OUT EFI_HANDLE             *Buffer
-  );
-
-/**
-  Locates the handle to a device on the device path that best matches the specified protocol.
-
-  @param  Protocol               The protocol to search for.
-  @param  DevicePath             On input, a pointer to a pointer to the device
-                                 path. On output, the device path pointer is
-                                 modified to point to the remaining part of the
-                                 devicepath.
-  @param  Device                 A pointer to the returned device handle.
-
-  @retval EFI_SUCCESS            The resulting handle was returned.
-  @retval EFI_NOT_FOUND          No handles matched the search.
-  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestLocateDevicePath (
-  IN EFI_GUID                      *Protocol,
-  IN OUT EFI_DEVICE_PATH_PROTOCOL  **DevicePath,
-  OUT EFI_HANDLE                   *Device
-  );
-
-/**
-  Boot Service called to add, modify, or remove a system configuration table from
-  the EFI System Table.
-
-  @param  Guid           Pointer to the GUID for the entry to add, update, or
-                         remove
-  @param  Table          Pointer to the configuration table for the entry to add,
-                         update, or remove, may be NULL.
-
-  @return EFI_SUCCESS               Guid, Table pair added, updated, or removed.
-  @return EFI_INVALID_PARAMETER     Input GUID not valid.
-  @return EFI_NOT_FOUND             Attempted to delete non-existant entry
-  @return EFI_OUT_OF_RESOURCES      Not enough memory available
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestInstallConfigurationTable (
-  IN EFI_GUID  *Guid,
-  IN VOID      *Table
-  );
-
-/**
-  Loads an EFI image into memory and returns a handle to the image.
-
-  @param  BootPolicy              If TRUE, indicates that the request originates
-                                  from the boot manager, and that the boot
-                                  manager is attempting to load FilePath as a
-                                  boot selection.
-  @param  ParentImageHandle       The caller's image handle.
-  @param  FilePath                The specific file path from which the image is
-                                  loaded.
-  @param  SourceBuffer            If not NULL, a pointer to the memory location
-                                  containing a copy of the image to be loaded.
-  @param  SourceSize              The size in bytes of SourceBuffer.
-  @param  ImageHandle             Pointer to the returned image handle that is
-                                  created when the image is successfully loaded.
-
-  @retval EFI_SUCCESS             The image was loaded into memory.
-  @retval EFI_NOT_FOUND           The FilePath was not found.
-  @retval EFI_INVALID_PARAMETER   One of the parameters has an invalid value.
-  @retval EFI_UNSUPPORTED         The image type is not supported, or the device
-                                  path cannot be parsed to locate the proper
-                                  protocol for loading the file.
-  @retval EFI_OUT_OF_RESOURCES    Image was not loaded due to insufficient
-                                  resources.
-  @retval EFI_LOAD_ERROR          Image was not loaded because the image format was corrupt or not
-                                  understood.
-  @retval EFI_DEVICE_ERROR        Image was not loaded because the device returned a read error.
-  @retval EFI_ACCESS_DENIED       Image was not loaded because the platform policy prohibits the
-                                  image from being loaded. NULL is returned in *ImageHandle.
-  @retval EFI_SECURITY_VIOLATION  Image was loaded and an ImageHandle was created with a
-                                  valid EFI_LOADED_IMAGE_PROTOCOL. However, the current
-                                  platform policy specifies that the image should not be started.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestLoadImage (
-  IN BOOLEAN                   BootPolicy,
-  IN EFI_HANDLE                ParentImageHandle,
-  IN EFI_DEVICE_PATH_PROTOCOL  *FilePath,
-  IN VOID                      *SourceBuffer   OPTIONAL,
-  IN UINTN                     SourceSize,
-  OUT EFI_HANDLE               *ImageHandle
-  );
-
-/**
-  Transfer control to a loaded image's entry point.
-
-  @param  ImageHandle             Handle of image to be started.
-  @param  ExitDataSize            Pointer of the size to ExitData
-  @param  ExitData                Pointer to a pointer to a data buffer that
-                                  includes a Null-terminated string,
-                                  optionally followed by additional binary data.
-                                  The string is a description that the caller may
-                                  use to further indicate the reason for the
-                                  image's exit.
-
-  @retval EFI_INVALID_PARAMETER   Invalid parameter
-  @retval EFI_OUT_OF_RESOURCES    No enough buffer to allocate
-  @retval EFI_SECURITY_VIOLATION  The current platform policy specifies that the image should not be started.
-  @retval EFI_SUCCESS             Successfully transfer control to the image's
-                                  entry point.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestStartImage (
-  IN EFI_HANDLE  ImageHandle,
-  OUT UINTN      *ExitDataSize,
-  OUT CHAR16     **ExitData  OPTIONAL
-  );
-
-/**
-  Terminates the currently loaded EFI image and returns control to boot services.
-
-  @param  ImageHandle             Handle that identifies the image. This
-                                  parameter is passed to the image on entry.
-  @param  Status                  The image's exit code.
-  @param  ExitDataSize            The size, in bytes, of ExitData. Ignored if
-                                  ExitStatus is EFI_SUCCESS.
-  @param  ExitData                Pointer to a data buffer that includes a
-                                  Null-terminated Unicode string, optionally
-                                  followed by additional binary data. The string
-                                  is a description that the caller may use to
-                                  further indicate the reason for the image's
-                                  exit.
-
-  @retval EFI_INVALID_PARAMETER   Image handle is NULL or it is not current
-                                  image.
-  @retval EFI_SUCCESS             Successfully terminates the currently loaded
-                                  EFI image.
-  @retval EFI_ACCESS_DENIED       Should never reach there.
-  @retval EFI_OUT_OF_RESOURCES    Could not allocate pool
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestExit (
-  IN EFI_HANDLE  ImageHandle,
-  IN EFI_STATUS  Status,
-  IN UINTN       ExitDataSize,
-  IN CHAR16      *ExitData  OPTIONAL
-  );
-
-/**
-  Unloads an image.
-
-  @param  ImageHandle             Handle that identifies the image to be
-                                  unloaded.
-
-  @retval EFI_SUCCESS             The image has been unloaded.
-  @retval EFI_UNSUPPORTED         The image has been started, and does not support
-                                  unload.
-  @retval EFI_INVALID_PARAMPETER  ImageHandle is not a valid image handle.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestUnloadImage (
-  IN EFI_HANDLE  ImageHandle
-  );
-
-/**
-  Terminates all boot services.
-
-  @param  ImageHandle            Handle that identifies the exiting image.
-  @param  MapKey                 Key to the latest memory map.
-
-  @retval EFI_SUCCESS            Boot Services terminated
-  @retval EFI_INVALID_PARAMETER  MapKey is incorrect.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestExitBootServices (
-  IN EFI_HANDLE  ImageHandle,
-  IN UINTN       MapKey
-  );
-
-/**
-  Returns a monotonically increasing count for the platform.
-
-  @param[out]  Count            The pointer to returned value.
-
-  @retval EFI_SUCCESS           The next monotonic count was returned.
-  @retval EFI_INVALID_PARAMETER Count is NULL.
-  @retval EFI_DEVICE_ERROR      The device is not functioning properly.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestGetNextMonotonicCount (
-  OUT UINT64  *Count
-  );
-
-/**
-  Introduces a fine-grained stall.
-
-  @param  Microseconds           The number of microseconds to stall execution.
-
-  @retval EFI_SUCCESS            Execution was stalled for at least the requested
-                                 amount of microseconds.
-  @retval EFI_NOT_AVAILABLE_YET  gMetronome is not available yet
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestStall (
-  IN UINTN  Microseconds
-  );
-
-/**
-  Sets the system's watchdog timer.
-
-  @param  Timeout         The number of seconds to set the watchdog timer to.
-                          A value of zero disables the timer.
-  @param  WatchdogCode    The numeric code to log on a watchdog timer timeout
-                          event. The firmware reserves codes 0x0000 to 0xFFFF.
-                          Loaders and operating systems may use other timeout
-                          codes.
-  @param  DataSize        The size, in bytes, of WatchdogData.
-  @param  WatchdogData    A data buffer that includes a Null-terminated Unicode
-                          string, optionally followed by additional binary data.
-                          The string is a description that the call may use to
-                          further indicate the reason to be logged with a
-                          watchdog event.
-
-  @return EFI_SUCCESS               Timeout has been set
-  @return EFI_NOT_AVAILABLE_YET     WatchdogTimer is not available yet
-  @return EFI_UNSUPPORTED           System does not have a timer (currently not used)
-  @return EFI_DEVICE_ERROR          Could not complete due to hardware error
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestSetWatchdogTimer (
-  IN UINTN   Timeout,
-  IN UINT64  WatchdogCode,
-  IN UINTN   DataSize,
-  IN CHAR16  *WatchdogData OPTIONAL
-  );
-
-/**
-  Connects one or more drivers to a controller.
-
-  @param  ControllerHandle      The handle of the controller to which driver(s) are to be connected.
-  @param  DriverImageHandle     A pointer to an ordered list handles that support the
-                                EFI_DRIVER_BINDING_PROTOCOL.
-  @param  RemainingDevicePath   A pointer to the device path that specifies a child of the
-                                controller specified by ControllerHandle.
-  @param  Recursive             If TRUE, then ConnectController() is called recursively
-                                until the entire tree of controllers below the controller specified
-                                by ControllerHandle have been created. If FALSE, then
-                                the tree of controllers is only expanded one level.
-
-  @retval EFI_SUCCESS           1) One or more drivers were connected to ControllerHandle.
-                                2) No drivers were connected to ControllerHandle, but
-                                RemainingDevicePath is not NULL, and it is an End Device
-                                Path Node.
-  @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
-  @retval EFI_NOT_FOUND         1) There are no EFI_DRIVER_BINDING_PROTOCOL instances
-                                present in the system.
-                                2) No drivers were connected to ControllerHandle.
-  @retval EFI_SECURITY_VIOLATION
-                                The user has no permission to start UEFI device drivers on the device path
-                                associated with the ControllerHandle or specified by the RemainingDevicePath.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestConnectController (
-  IN  EFI_HANDLE                ControllerHandle,
-  IN  EFI_HANDLE                *DriverImageHandle    OPTIONAL,
-  IN  EFI_DEVICE_PATH_PROTOCOL  *RemainingDevicePath  OPTIONAL,
-  IN  BOOLEAN                   Recursive
-  );
-
-/**
-  Disconnects a controller from a driver
-
-  @param  ControllerHandle                      ControllerHandle The handle of
-                                                the controller from which
-                                                driver(s)  are to be
-                                                disconnected.
-  @param  DriverImageHandle                     DriverImageHandle The driver to
-                                                disconnect from ControllerHandle.
-  @param  ChildHandle                           ChildHandle The handle of the
-                                                child to destroy.
-
-  @retval EFI_SUCCESS                           One or more drivers were
-                                                disconnected from the controller.
-  @retval EFI_SUCCESS                           On entry, no drivers are managing
-                                                ControllerHandle.
-  @retval EFI_SUCCESS                           DriverImageHandle is not NULL,
-                                                and on entry DriverImageHandle is
-                                                not managing ControllerHandle.
-  @retval EFI_INVALID_PARAMETER                 ControllerHandle is NULL.
-  @retval EFI_INVALID_PARAMETER                 DriverImageHandle is not NULL,
-                                                and it is not a valid EFI_HANDLE.
-  @retval EFI_INVALID_PARAMETER                 ChildHandle is not NULL, and it
-                                                is not a valid EFI_HANDLE.
-  @retval EFI_OUT_OF_RESOURCES                  There are not enough resources
-                                                available to disconnect any
-                                                drivers from ControllerHandle.
-  @retval EFI_DEVICE_ERROR                      The controller could not be
-                                                disconnected because of a device
-                                                error.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestDisconnectController (
-  IN  EFI_HANDLE  ControllerHandle,
-  IN  EFI_HANDLE  DriverImageHandle  OPTIONAL,
-  IN  EFI_HANDLE  ChildHandle        OPTIONAL
-  );
-
-/**
-  Locates the installed protocol handler for the handle, and
-  invokes it to obtain the protocol interface. Usage information
-  is registered in the protocol data base.
-
-  @param  UserHandle             The handle to obtain the protocol interface on
-  @param  Protocol               The ID of the protocol
-  @param  Interface              The location to return the protocol interface
-  @param  ImageHandle            The handle of the Image that is opening the
-                                 protocol interface specified by Protocol and
-                                 Interface.
-  @param  ControllerHandle       The controller handle that is requiring this
-                                 interface.
-  @param  Attributes             The open mode of the protocol interface
-                                 specified by Handle and Protocol.
-
-  @retval EFI_INVALID_PARAMETER  Protocol is NULL.
-  @retval EFI_SUCCESS            Get the protocol interface.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestOpenProtocol (
-  IN  EFI_HANDLE  UserHandle,
-  IN  EFI_GUID    *Protocol,
-  OUT VOID        **Interface OPTIONAL,
-  IN  EFI_HANDLE  ImageHandle,
-  IN  EFI_HANDLE  ControllerHandle,
-  IN  UINT32      Attributes
-  );
-
-/**
-  Closes a protocol on a handle that was opened using OpenProtocol().
-
-  @param  UserHandle             The handle for the protocol interface that was
-                                 previously opened with OpenProtocol(), and is
-                                 now being closed.
-  @param  Protocol               The published unique identifier of the protocol.
-                                 It is the caller's responsibility to pass in a
-                                 valid GUID.
-  @param  AgentHandle            The handle of the agent that is closing the
-                                 protocol interface.
-  @param  ControllerHandle       If the agent that opened a protocol is a driver
-                                 that follows the EFI Driver Model, then this
-                                 parameter is the controller handle that required
-                                 the protocol interface. If the agent does not
-                                 follow the EFI Driver Model, then this parameter
-                                 is optional and may be NULL.
-
-  @retval EFI_SUCCESS            The protocol instance was closed.
-  @retval EFI_INVALID_PARAMETER  Handle, AgentHandle or ControllerHandle is not a
-                                 valid EFI_HANDLE.
-  @retval EFI_NOT_FOUND          Can not find the specified protocol or
-                                 AgentHandle.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestCloseProtocol (
-  IN  EFI_HANDLE  UserHandle,
-  IN  EFI_GUID    *Protocol,
-  IN  EFI_HANDLE  AgentHandle,
-  IN  EFI_HANDLE  ControllerHandle
-  );
-
-/**
-  Return information about Opened protocols in the system
-
-  @param  UserHandle             The handle to close the protocol interface on
-  @param  Protocol               The ID of the protocol
-  @param  EntryBuffer            A pointer to a buffer of open protocol
-                                 information in the form of
-                                 EFI_OPEN_PROTOCOL_INFORMATION_ENTRY structures.
-  @param  EntryCount             Number of EntryBuffer entries
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestOpenProtocolInformation (
-  IN  EFI_HANDLE                           UserHandle,
-  IN  EFI_GUID                             *Protocol,
-  OUT EFI_OPEN_PROTOCOL_INFORMATION_ENTRY  **EntryBuffer,
-  OUT UINTN                                *EntryCount
-  );
-
-/**
-  Retrieves the list of protocol interface GUIDs that are installed on a handle in a buffer allocated
-  from pool.
-
-  @param  UserHandle             The handle from which to retrieve the list of
-                                 protocol interface GUIDs.
-  @param  ProtocolBuffer         A pointer to the list of protocol interface GUID
-                                 pointers that are installed on Handle.
-  @param  ProtocolBufferCount    A pointer to the number of GUID pointers present
-                                 in ProtocolBuffer.
-
-  @retval EFI_SUCCESS            The list of protocol interface GUIDs installed
-                                 on Handle was returned in ProtocolBuffer. The
-                                 number of protocol interface GUIDs was returned
-                                 in ProtocolBufferCount.
-  @retval EFI_INVALID_PARAMETER  Handle is NULL.
-  @retval EFI_INVALID_PARAMETER  Handle is not a valid EFI_HANDLE.
-  @retval EFI_INVALID_PARAMETER  ProtocolBuffer is NULL.
-  @retval EFI_INVALID_PARAMETER  ProtocolBufferCount is NULL.
-  @retval EFI_OUT_OF_RESOURCES   There is not enough pool memory to store the
-                                 results.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestProtocolsPerHandle (
-  IN EFI_HANDLE  UserHandle,
-  OUT EFI_GUID   ***ProtocolBuffer,
-  OUT UINTN      *ProtocolBufferCount
-  );
-
-/**
-  Function returns an array of handles that support the requested protocol
-  in a buffer allocated from pool. This is a version of UnitTestLocateHandle()
-  that allocates a buffer for the caller.
-
-  @param  SearchType             Specifies which handle(s) are to be returned.
-  @param  Protocol               Provides the protocol to search by.    This
-                                 parameter is only valid for SearchType
-                                 ByProtocol.
-  @param  SearchKey              Supplies the search key depending on the
-                                 SearchType.
-  @param  NumberHandles          The number of handles returned in Buffer.
-  @param  Buffer                 A pointer to the buffer to return the requested
-                                 array of  handles that support Protocol.
-
-  @retval EFI_SUCCESS            The result array of handles was returned.
-  @retval EFI_NOT_FOUND          No handles match the search.
-  @retval EFI_OUT_OF_RESOURCES   There is not enough pool memory to store the
-                                 matching results.
-  @retval EFI_INVALID_PARAMETER  One or more parameters are not valid.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestLocateHandleBuffer (
-  IN EFI_LOCATE_SEARCH_TYPE  SearchType,
-  IN EFI_GUID                *Protocol OPTIONAL,
-  IN VOID                    *SearchKey OPTIONAL,
-  IN OUT UINTN               *NumberHandles,
-  OUT EFI_HANDLE             **Buffer
-  );
-
-/**
-  Return the first Protocol Interface that matches the Protocol GUID. If
-  Registration is passed in, return a Protocol Instance that was just add
-  to the system. If Registration is NULL return the first Protocol Interface
-  you find.
-
-  @param  Protocol               The protocol to search for
-  @param  Registration           Optional Registration Key returned from
-                                 RegisterProtocolNotify()
-  @param  Interface              Return the Protocol interface (instance).
-
-  @retval EFI_SUCCESS            If a valid Interface is returned
-  @retval EFI_INVALID_PARAMETER  Invalid parameter
-  @retval EFI_NOT_FOUND          Protocol interface not found
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestLocateProtocol (
-  IN  EFI_GUID  *Protocol,
-  IN  VOID      *Registration OPTIONAL,
-  OUT VOID      **Interface
-  );
-
-/**
-  Installs a list of protocol interface into the boot services environment.
-  This function calls InstallProtocolInterface() in a loop. If any error
-  occurs all the protocols added by this function are removed. This is
-  basically a lib function to save space.
-
-  @param  Handle                 The handle to install the protocol handlers on,
-                                 or NULL if a new handle is to be allocated
-  @param  ...                    EFI_GUID followed by protocol instance. A NULL
-                                 terminates the  list. The pairs are the
-                                 arguments to InstallProtocolInterface(). All the
-                                 protocols are added to Handle.
-
-  @retval EFI_SUCCESS            All the protocol interface was installed.
-  @retval EFI_OUT_OF_RESOURCES   There was not enough memory in pool to install all the protocols.
-  @retval EFI_ALREADY_STARTED    A Device Path Protocol instance was passed in that is already present in
-                                 the handle database.
-  @retval EFI_INVALID_PARAMETER  Handle is NULL.
-  @retval EFI_INVALID_PARAMETER  Protocol is already installed on the handle specified by Handle.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestInstallMultipleProtocolInterfaces (
-  IN OUT EFI_HANDLE  *Handle,
-  ...
-  );
-
-/**
-  Uninstalls a list of protocol interface in the boot services environment.
-  This function calls UninstallProtocolInterface() in a loop. This is
-  basically a lib function to save space.
-
-  @param  Handle                 The handle to uninstall the protocol
-  @param  ...                    EFI_GUID followed by protocol instance. A NULL
-                                 terminates the  list. The pairs are the
-                                 arguments to UninstallProtocolInterface(). All
-                                 the protocols are added to Handle.
-
-  @return Status code
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestUninstallMultipleProtocolInterfaces (
-  IN EFI_HANDLE  Handle,
-  ...
-  );
-
-/**
-  Computes and returns a 32-bit CRC for a data buffer.
-
-  @param[in]   Data             A pointer to the buffer on which the 32-bit CRC is to be computed.
-  @param[in]   DataSize         The number of bytes in the buffer Data.
-  @param[out]  Crc32            The 32-bit CRC that was computed for the data buffer specified by Data
-                                and DataSize.
-
-  @retval EFI_SUCCESS           The 32-bit CRC was computed for the data buffer and returned in
-                                Crc32.
-  @retval EFI_INVALID_PARAMETER Data is NULL.
-  @retval EFI_INVALID_PARAMETER Crc32 is NULL.
-  @retval EFI_INVALID_PARAMETER DataSize is 0.
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestCalculateCrc32 (
-  IN  VOID    *Data,
-  IN  UINTN   DataSize,
-  OUT UINT32  *Crc32
-  );
-
-/**
-  Creates an event in a group.
-
-  @param  Type                   The type of event to create and its mode and
-                                 attributes
-  @param  NotifyTpl              The task priority level of event notifications
-  @param  NotifyFunction         Pointer to the events notification function
-  @param  NotifyContext          Pointer to the notification functions context;
-                                 corresponds to parameter "Context" in the
-                                 notification function
-  @param  EventGroup             GUID for EventGroup if NULL act the same as
-                                 gBS->CreateEvent().
-  @param  Event                  Pointer to the newly created event if the call
-                                 succeeds; undefined otherwise
-
-  @retval EFI_SUCCESS            The event structure was created
-  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value
-  @retval EFI_OUT_OF_RESOURCES   The event could not be allocated
-
-**/
-EFI_STATUS
-EFIAPI
-UnitTestCreateEventEx (
-  IN UINT32 Type,
-  IN EFI_TPL NotifyTpl,
-  IN EFI_EVENT_NOTIFY NotifyFunction, OPTIONAL
-  IN CONST VOID               *NotifyContext, OPTIONAL
-  IN CONST EFI_GUID           *EventGroup, OPTIONAL
-  OUT EFI_EVENT               *Event
-  );
-
-#endif
diff --git a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.inf b/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.inf
deleted file mode 100644
index 3b85dbb1b715..000000000000
--- a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTest.inf
+++ /dev/null
@@ -1,46 +0,0 @@
-## @file
-# UEFI Boot Services Table Library for unit tests implementation.
-#
-# Copyright (c) Microsoft Corporation
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
-  INF_VERSION                    = 0x00010005
-  BASE_NAME                      = UefiBootServicesTableLibUnitTest
-  MODULE_UNI_FILE                = UefiBootServicesTableLibTest.uni
-  FILE_GUID                      = 725E1CCD-07F1-4964-9A3E-9AA6DCC51DE6
-  MODULE_TYPE                    = UEFI_DRIVER
-  VERSION_STRING                 = 1.0
-  LIBRARY_CLASS                  = UefiBootServicesTableLib|DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER SMM_CORE
-
-  CONSTRUCTOR                    = UefiBootServicesTableLibUnitTestConstructor
-
-#
-#  VALID_ARCHITECTURES           = IA32 X64 EBC
-#
-
-[Sources]
-  UefiBootServicesTableLibUnitTest.h
-  UefiBootServicesTableLibUnitTest.c
-  UefiBootServicesTableLibUnitTestEventTimer.c
-  UefiBootServicesTableLibUnitTestImage.c
-  UefiBootServicesTableLibUnitTestMemory.c
-  UefiBootServicesTableLibUnitTestProtocol.h
-  UefiBootServicesTableLibUnitTestProtocol.c
-  UefiBootServicesTableLibUnitTestMisc.c
-  UefiBootServicesTableLibUnitTestTpl.c
-
-[Packages]
-  MdePkg/MdePkg.dec
-
-[LibraryClasses]
-  BaseLib
-  BaseMemoryLib
-  DebugLib
-  MemoryAllocationLib
-  UnitTestLib
-
-[UserExtensions.TianoCore."ExtraFiles"]
-  TimerExtra.uni
diff --git a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestProtocol.h b/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestProtocol.h
deleted file mode 100644
index 6428090071d6..000000000000
--- a/PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootServicesTableLibUnitTestProtocol.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/** @file
-  An internal header file for the Unit Test instance of the UEFI Boot Services Table Library.
-
-  This file includes common header files, defines internal structure and functions used by
-  the library implementation.
-
-Copyright (c) Microsoft Corporation
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef UEFI_BOOT_SERVICES_TABLE_LIB_UNIT_TEST_PROTOCOL_H_
-#define UEFI_BOOT_SERVICES_TABLE_LIB_UNIT_TEST_PROTOCOL_H_
-
-#include "UefiBootServicesTableLibUnitTest.h"
-
-#define EFI_HANDLE_SIGNATURE  SIGNATURE_32('h','n','d','l')
-
-///
-/// IHANDLE - contains a list of protocol handles
-///
-typedef struct {
-  UINTN         Signature;
-  /// All handles list of IHANDLE
-  LIST_ENTRY    AllHandles;
-  /// List of PROTOCOL_INTERFACE's for this handle
-  LIST_ENTRY    Protocols;
-  UINTN         LocateRequest;
-  /// The Handle Database Key value when this handle was last created or modified
-  UINT64        Key;
-} IHANDLE;
-
-#define ASSERT_IS_HANDLE(a)  ASSERT((a)->Signature == EFI_HANDLE_SIGNATURE)
-
-#define PROTOCOL_ENTRY_SIGNATURE  SIGNATURE_32('p','r','t','e')
-
-///
-/// PROTOCOL_ENTRY - each different protocol has 1 entry in the protocol
-/// database.  Each handler that supports this protocol is listed, along
-/// with a list of registered notifies.
-///
-typedef struct {
-  UINTN         Signature;
-  /// Link Entry inserted to mProtocolDatabase
-  LIST_ENTRY    AllEntries;
-  /// ID of the protocol
-  EFI_GUID      ProtocolID;
-  /// All protocol interfaces
-  LIST_ENTRY    Protocols;
-  /// Registered notification handlers
-  LIST_ENTRY    Notify;
-} PROTOCOL_ENTRY;
-
-#define PROTOCOL_INTERFACE_SIGNATURE  SIGNATURE_32('p','i','f','c')
-
-///
-/// PROTOCOL_INTERFACE - each protocol installed on a handle is tracked
-/// with a protocol interface structure
-///
-typedef struct {
-  UINTN             Signature;
-  /// Link on IHANDLE.Protocols
-  LIST_ENTRY        Link;
-  /// Back pointer
-  IHANDLE           *Handle;
-  /// Link on PROTOCOL_ENTRY.Protocols
-  LIST_ENTRY        ByProtocol;
-  /// The protocol ID
-  PROTOCOL_ENTRY    *Protocol;
-  /// The interface value
-  VOID              *Interface;
-  /// OPEN_PROTOCOL_DATA list
-  LIST_ENTRY        OpenList;
-  UINTN             OpenListCount;
-} PROTOCOL_INTERFACE;
-
-#define OPEN_PROTOCOL_DATA_SIGNATURE  SIGNATURE_32('p','o','d','l')
-
-typedef struct {
-  UINTN         Signature;
-  /// Link on PROTOCOL_INTERFACE.OpenList
-  LIST_ENTRY    Link;
-
-  EFI_HANDLE    AgentHandle;
-  EFI_HANDLE    ControllerHandle;
-  UINT32        Attributes;
-  UINT32        OpenCount;
-} OPEN_PROTOCOL_DATA;
-
-#define PROTOCOL_NOTIFY_SIGNATURE  SIGNATURE_32('p','r','t','n')
-
-///
-/// PROTOCOL_NOTIFY - used for each register notification for a protocol
-///
-typedef struct {
-  UINTN             Signature;
-  PROTOCOL_ENTRY    *Protocol;
-  /// All notifications for this protocol
-  LIST_ENTRY        Link;
-  /// Event to notify
-  EFI_EVENT         Event;
-  /// Last position notified
-  LIST_ENTRY        *Position;
-} PROTOCOL_NOTIFY;
-
-typedef struct {
-  EFI_GUID          *Protocol;
-  VOID              *SearchKey;
-  LIST_ENTRY        *Position;
-  PROTOCOL_ENTRY    *ProtEntry;
-} LOCATE_POSITION;
-
-typedef
-IHANDLE *
-(*UNIT_TEST_GET_NEXT) (
-  IN OUT LOCATE_POSITION  *Position,
-  OUT VOID                **Interface
-  );
-
-#endif
-- 
2.28.0.windows.1


  parent reply	other threads:[~2022-11-04  0:25 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-04  0:24 [PATCH v1 0/2] UnitTestFrameworkPkg: Add UnitTestUefiBootServicesTableLib Michael Kubacki
2022-11-04  0:24 ` [PATCH v1 1/2] " Michael Kubacki
2022-11-04  0:24 ` Michael Kubacki [this message]
2022-11-04  0:44 ` [PATCH v1 0/2] " Michael D Kinney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221104002440.2316-3-mikuback@linux.microsoft.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox