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>
		
			
				
	
	
		
			181 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			181 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @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 "UnitTestUefiBootServicesTableLib.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;
 | 
						|
}
 |