mirror of https://github.com/acidanthera/audk.git
199 lines
7.7 KiB
C
199 lines
7.7 KiB
C
/** @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;
|
|
}
|