summaryrefslogtreecommitdiff
path: root/PcAtChipsetPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.c
diff options
context:
space:
mode:
authorGao, Liming <liming.gao@intel.com>2014-08-14 14:30:32 +0000
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>2014-08-14 14:30:32 +0000
commit83d1ffb92f165547d750586ef954c54f59b7fab3 (patch)
tree5924cca93cc48d120b1848e15beea1d150acb7ce /PcAtChipsetPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.c
parentf61d69cc4425450450bf2b62a784a038b9bb8073 (diff)
downloadedk2-platforms-83d1ffb92f165547d750586ef954c54f59b7fab3.tar.xz
PcAtChipsetPkg: new AcpiTimerLib libraries.
Two library instances are added to support BASE type and DXE type. Those libraries provides basic timer support using the ACPI timer hardware. The performance counter features are provided by the processors time stamp counter. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Gao, Liming <liming.gao@intel.com> Reviewed-by: Kinney, Michael D <michael.d.kinney@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15803 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'PcAtChipsetPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.c')
-rw-r--r--PcAtChipsetPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/PcAtChipsetPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.c b/PcAtChipsetPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.c
new file mode 100644
index 0000000000..6f5c07a4f0
--- /dev/null
+++ b/PcAtChipsetPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.c
@@ -0,0 +1,48 @@
+/** @file
+ ACPI Timer implements one instance of Timer Library.
+
+ Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>
+ 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 <Base.h>
+#include <Library/TimerLib.h>
+#include <Library/BaseLib.h>
+
+//
+// Cached performance counter frequency
+//
+UINT64 mPerformanceCounterFrequency = 0;
+
+/**
+ Internal function to retrieves the 64-bit frequency in Hz.
+
+ Internal function to retrieves the 64-bit frequency in Hz.
+
+ @return The frequency in Hz.
+
+**/
+UINT64
+InternalGetPerformanceCounterFrequency (
+ VOID
+ )
+{
+ BOOLEAN InterruptState;
+ UINT64 Count;
+
+ if (mPerformanceCounterFrequency == 0) {
+ InterruptState = SaveAndDisableInterrupts ();
+ Count = GetPerformanceCounter ();
+ MicroSecondDelay (100);
+ mPerformanceCounterFrequency = MultU64x32 (GetPerformanceCounter () - Count, 10000);
+ SetInterruptState (InterruptState);
+ }
+ return mPerformanceCounterFrequency;
+}