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. This library is being moved here from PrmPkg so it can be made more generally available to other packages and improved upon for others use. 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> Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>
		
			
				
	
	
		
			164 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @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 "UnitTestUefiBootServicesTableLib.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;
 | 
						|
}
 |