From af1a266670d040d2f4083ff309d732d648afba2a Mon Sep 17 00:00:00 2001 From: Angelos Mouzakitis Date: Tue, 10 Oct 2023 14:33:42 +0000 Subject: Add submodule dependency files Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec --- .../Universal/TimestampDxe/TimestampDxe.c | 160 +++++++++++++++++++++ .../Universal/TimestampDxe/TimestampDxe.inf | 46 ++++++ .../Universal/TimestampDxe/TimestampDxe.uni | 16 +++ .../Universal/TimestampDxe/TimestampDxeExtra.uni | 14 ++ 4 files changed, 236 insertions(+) create mode 100644 roms/edk2/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.c create mode 100644 roms/edk2/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.inf create mode 100644 roms/edk2/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.uni create mode 100644 roms/edk2/MdeModulePkg/Universal/TimestampDxe/TimestampDxeExtra.uni (limited to 'roms/edk2/MdeModulePkg/Universal/TimestampDxe') diff --git a/roms/edk2/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.c b/roms/edk2/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.c new file mode 100644 index 000000000..2ca4ae5cd --- /dev/null +++ b/roms/edk2/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.c @@ -0,0 +1,160 @@ +/** @file + Implementation of Timestamp Protocol using UEFI APIs. + +Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include +#include +#include + +// +// The StartValue in TimerLib +// +UINT64 mTimerLibStartValue = 0; + +// +// The EndValue in TimerLib +// +UINT64 mTimerLibEndValue = 0; + +// +// The properties of timestamp +// +EFI_TIMESTAMP_PROPERTIES mTimestampProperties = { + 0, + 0 +}; + +/** + Retrieves the current value of a 64-bit free running timestamp counter. + + The counter shall count up in proportion to the amount of time that has passed. The counter value + will always roll over to zero. The properties of the counter can be retrieved from GetProperties(). + The caller should be prepared for the function to return the same value twice across successive calls. + The counter value will not go backwards other than when wrapping, as defined by EndValue in GetProperties(). + The frequency of the returned timestamp counter value must remain constant. Power management operations that + affect clocking must not change the returned counter frequency. The quantization of counter value updates may + vary as long as the value reflecting time passed remains consistent. + + @retval The current value of the free running timestamp counter. + +**/ +UINT64 +EFIAPI +TimestampDriverGetTimestamp ( + VOID + ) +{ + // + // The timestamp of Timestamp Protocol + // + UINT64 TimestampValue; + TimestampValue = 0; + + // + // Get the timestamp + // + if (mTimerLibStartValue > mTimerLibEndValue) { + TimestampValue = mTimerLibStartValue - GetPerformanceCounter(); + } else { + TimestampValue = GetPerformanceCounter() - mTimerLibStartValue; + } + + return TimestampValue; +} + +/** + Obtains timestamp counter properties including frequency and value limits. + + @param[out] Properties The properties of the timestamp counter. + + @retval EFI_SUCCESS The properties were successfully retrieved. + @retval EFI_DEVICE_ERROR An error occurred trying to retrieve the properties of the timestamp + counter subsystem. Properties is not pedated. + @retval EFI_INVALID_PARAMETER Properties is NULL. + +**/ +EFI_STATUS +EFIAPI +TimestampDriverGetProperties( + OUT EFI_TIMESTAMP_PROPERTIES *Properties + ) +{ + if (Properties == NULL) { + return EFI_INVALID_PARAMETER; + } + + // + // Get timestamp properties + // + CopyMem((VOID *) Properties, (VOID *) &mTimestampProperties, sizeof (mTimestampProperties)); + + return EFI_SUCCESS; +} + +// +// The Timestamp Protocol instance produced by this driver +// +EFI_TIMESTAMP_PROTOCOL mTimestamp = { + TimestampDriverGetTimestamp, + TimestampDriverGetProperties +}; + +/** + Entry point of the Timestamp Protocol driver. + + @param ImageHandle The image handle of this driver. + @param SystemTable The pointer of EFI_SYSTEM_TABLE. + + @retval EFI_SUCCESS Watchdog Timer Architectural Protocol successfully installed. + +**/ +EFI_STATUS +EFIAPI +TimestampDriverInitialize ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + + EFI_HANDLE TimestampHandle; + TimestampHandle = NULL; + + // + // Get the start value, end value and frequency in Timerlib + // + mTimestampProperties.Frequency = GetPerformanceCounterProperties(&mTimerLibStartValue, &mTimerLibEndValue); + + // + // Set the EndValue + // + if (mTimerLibEndValue > mTimerLibStartValue) { + mTimestampProperties.EndValue = mTimerLibEndValue - mTimerLibStartValue; + } else { + mTimestampProperties.EndValue = mTimerLibStartValue - mTimerLibEndValue; + } + + DEBUG ((EFI_D_INFO, "TimerFrequency:0x%lx, TimerLibStartTime:0x%lx, TimerLibEndtime:0x%lx\n", mTimestampProperties.Frequency, mTimerLibStartValue, mTimerLibEndValue)); + + // + // Install the Timestamp Protocol onto a new handle + // + Status = gBS->InstallMultipleProtocolInterfaces ( + &TimestampHandle, + &gEfiTimestampProtocolGuid, + &mTimestamp, + NULL + ); + + ASSERT_EFI_ERROR (Status); + + return EFI_SUCCESS; +} diff --git a/roms/edk2/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.inf b/roms/edk2/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.inf new file mode 100644 index 000000000..13825bcae --- /dev/null +++ b/roms/edk2/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.inf @@ -0,0 +1,46 @@ +## @file +# Generic Timestamp driver producing Timestamp Protocol using UEFI APIs. +# +# Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +# +## + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = TimestampDxe + MODULE_UNI_FILE = TimestampDxe.uni + FILE_GUID = C10194E7-DEB2-4AF4-9EEE-BFFDE4D7D4C7 + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + ENTRY_POINT = TimestampDriverInitialize + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 EBC +# + +[Packages] + MdePkg/MdePkg.dec + +[Sources] + TimestampDxe.c + +[LibraryClasses] + UefiBootServicesTableLib + UefiDriverEntryPoint + TimerLib + BaseMemoryLib + DebugLib + +[Protocols] + gEfiTimestampProtocolGuid ## PRODUCES + +[depex] + TRUE + +[UserExtensions.TianoCore."ExtraFiles"] + TimestampDxeExtra.uni diff --git a/roms/edk2/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.uni b/roms/edk2/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.uni new file mode 100644 index 000000000..1ae482aca --- /dev/null +++ b/roms/edk2/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.uni @@ -0,0 +1,16 @@ +// /** @file +// Generic Timestamp driver producing Timestamp Protocol using UEFI APIs. +// +// A generic Timestamp driver producing Timestamp Protocol using UEFI APIs. +// +// Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.
+// +// SPDX-License-Identifier: BSD-2-Clause-Patent +// +// **/ + + +#string STR_MODULE_ABSTRACT #language en-US "Generic Timestamp driver producing Timestamp Protocol using UEFI APIs." + +#string STR_MODULE_DESCRIPTION #language en-US "A generic Timestamp driver producing Timestamp Protocol using UEFI APIs." + diff --git a/roms/edk2/MdeModulePkg/Universal/TimestampDxe/TimestampDxeExtra.uni b/roms/edk2/MdeModulePkg/Universal/TimestampDxe/TimestampDxeExtra.uni new file mode 100644 index 000000000..619cadf33 --- /dev/null +++ b/roms/edk2/MdeModulePkg/Universal/TimestampDxe/TimestampDxeExtra.uni @@ -0,0 +1,14 @@ +// /** @file +// TimestampDxe Localized Strings and Content +// +// Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.
+// +// SPDX-License-Identifier: BSD-2-Clause-Patent +// +// **/ + +#string STR_PROPERTIES_MODULE_NAME +#language en-US +"Timestamp DXE Driver" + + -- cgit