From c23f114d3cfbb29b8734b87213d1ec0de404197b Mon Sep 17 00:00:00 2001 From: Guo Mang Date: Thu, 27 Apr 2017 11:05:07 +0800 Subject: MdeModulePkg: Move to new location Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Guo Mang --- .../Universal/TimestampDxe/TimestampDxe.c | 166 +++++++++++++++++++++ .../Universal/TimestampDxe/TimestampDxe.inf | 51 +++++++ .../Universal/TimestampDxe/TimestampDxe.uni | 21 +++ .../Universal/TimestampDxe/TimestampDxeExtra.uni | 19 +++ 4 files changed, 257 insertions(+) create mode 100644 Core/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.c create mode 100644 Core/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.inf create mode 100644 Core/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.uni create mode 100644 Core/MdeModulePkg/Universal/TimestampDxe/TimestampDxeExtra.uni (limited to 'Core/MdeModulePkg/Universal/TimestampDxe') diff --git a/Core/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.c b/Core/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.c new file mode 100644 index 0000000000..30349b5ec5 --- /dev/null +++ b/Core/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.c @@ -0,0 +1,166 @@ +/** @file + Implementation of Timestamp Protocol using UEFI APIs. + +Copyright (c) 2013, Intel Corporation. All rights reserved.
+This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#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/Core/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.inf b/Core/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.inf new file mode 100644 index 0000000000..f71d5262ea --- /dev/null +++ b/Core/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.inf @@ -0,0 +1,51 @@ +## @file +# Generic Timestamp driver producing Timestamp Protocol using UEFI APIs. +# +# Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.
+# +# This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# +## + +[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 IPF 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/Core/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.uni b/Core/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.uni new file mode 100644 index 0000000000..7e5f2a2988 --- /dev/null +++ b/Core/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.uni @@ -0,0 +1,21 @@ +// /** @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.
+// +// This program and the accompanying materials +// are licensed and made available under the terms and conditions of the BSD License +// which accompanies this distribution. The full text of the license may be found at +// http://opensource.org/licenses/bsd-license.php +// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +// +// **/ + + +#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/Core/MdeModulePkg/Universal/TimestampDxe/TimestampDxeExtra.uni b/Core/MdeModulePkg/Universal/TimestampDxe/TimestampDxeExtra.uni new file mode 100644 index 0000000000..aba52deb8d --- /dev/null +++ b/Core/MdeModulePkg/Universal/TimestampDxe/TimestampDxeExtra.uni @@ -0,0 +1,19 @@ +// /** @file +// TimestampDxe Localized Strings and Content +// +// Copyright (c) 2014, Intel Corporation. All rights reserved.
+// +// This program and the accompanying materials +// are licensed and made available under the terms and conditions of the BSD License +// which accompanies this distribution. The full text of the license may be found at +// http://opensource.org/licenses/bsd-license.php +// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +// +// **/ + +#string STR_PROPERTIES_MODULE_NAME +#language en-US +"Timestamp DXE Driver" + + -- cgit v1.2.3