/** @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 "UnitTestUefiBootServicesTableLib.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; | |
} |