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