]> git.proxmox.com Git - mirror_edk2.git/blobdiff - PcAtChipsetPkg/Library/AcpiTimerLib/AcpiTimerLib.c
PcAtChipsetPkg: Add PeiAcpiTimerLib to save Frequency in HOB
[mirror_edk2.git] / PcAtChipsetPkg / Library / AcpiTimerLib / AcpiTimerLib.c
index 020031e3f4a53c62eb14db7c6e1e113b145e40c5..2f3cb4bca4b5913430ac4e1f6dfbfed99ced21a4 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   ACPI Timer implements one instance of Timer Library.\r
 \r
-  Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR>\r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
   which accompanies this distribution.  The full text of the license may be found at\r
@@ -21,6 +21,8 @@
 #include <Library/DebugLib.h>\r
 #include <IndustryStandard/Acpi.h>\r
 \r
+GUID mFrequencyHobGuid = { 0x3fca54f6, 0xe1a2, 0x4b20, { 0xbe, 0x76, 0x92, 0x6b, 0x4b, 0x48, 0xbf, 0xaa }};\r
+\r
 /**\r
   Internal function to retrieves the 64-bit frequency in Hz.\r
 \r
@@ -162,14 +164,14 @@ InternalAcpiDelay (
     //\r
     // The target timer count is calculated here\r
     //\r
-    Ticks = IoRead32 (Port) + Delay;\r
+    Ticks = IoBitFieldRead32 (Port, 0, 23) + Delay;\r
     Delay = BIT22;\r
     //\r
     // Wait until time out\r
     // Delay >= 2^23 could not be handled by this function\r
     // Timer wrap-arounds are handled correctly by this function\r
     //\r
-    while (((Ticks - IoRead32 (Port)) & BIT23) == 0) {\r
+    while (((Ticks - IoBitFieldRead32 (Port, 0, 23)) & BIT23) == 0) {\r
       CpuPause ();\r
     }\r
   } while (Times-- > 0);\r
@@ -371,7 +373,7 @@ InternalCalculateTscFrequency (
   // Use 363 * 9861 = 3579543 Hz which is within 2 Hz of ACPI_TIMER_FREQUENCY.\r
   // 363 counts is a calibration time of 101.4 uS.\r
   //\r
-  Ticks = IoRead32 (TimerAddr) + 363;\r
+  Ticks = IoBitFieldRead32 (TimerAddr, 0, 23) + 363;\r
 \r
   StartTSC = AsmReadTsc ();                                         // Get base value for the TSC\r
   //\r
@@ -380,7 +382,7 @@ InternalCalculateTscFrequency (
   // When the current ACPI timer value is greater than 'Ticks',\r
   // the while loop will exit.\r
   //\r
-  while (((Ticks - IoRead32 (TimerAddr)) & BIT23) == 0) {\r
+  while (((Ticks - IoBitFieldRead32 (TimerAddr, 0, 23)) & BIT23) == 0) {\r
     CpuPause();\r
   }\r
   EndTSC = AsmReadTsc ();                                           // TSC value 101.4 us later\r