]> git.proxmox.com Git - mirror_edk2.git/blobdiff - PcAtChipsetPkg/Library/AcpiTimerLib/AcpiTimerLib.c
OvmfPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / PcAtChipsetPkg / Library / AcpiTimerLib / AcpiTimerLib.c
index 020031e3f4a53c62eb14db7c6e1e113b145e40c5..9817bea21fa66bdab2a706dfe22d8a134675f3c5 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
@@ -56,13 +58,13 @@ AcpiTimerLibConstructor (
   UINT8   EnableMask;\r
 \r
   //\r
-  // ASSERT for the invalid PCD values. They must be configured to the real value. \r
+  // ASSERT for the invalid PCD values. They must be configured to the real value.\r
   //\r
   ASSERT (PcdGet16 (PcdAcpiIoPciBarRegisterOffset) != 0xFFFF);\r
   ASSERT (PcdGet16 (PcdAcpiIoPortBaseAddress)      != 0xFFFF);\r
 \r
   //\r
-  // If the register offset to the BAR for the ACPI I/O Port Base Address is 0x0000, then \r
+  // If the register offset to the BAR for the ACPI I/O Port Base Address is 0x0000, then\r
   // no PCI register programming is required to enable access to the the ACPI registers\r
   // specified by PcdAcpiIoPortBaseAddress\r
   //\r
@@ -71,7 +73,7 @@ AcpiTimerLibConstructor (
   }\r
 \r
   //\r
-  // ASSERT for the invalid PCD values. They must be configured to the real value. \r
+  // ASSERT for the invalid PCD values. They must be configured to the real value.\r
   //\r
   ASSERT (PcdGet8  (PcdAcpiIoPciDeviceNumber)   != 0xFF);\r
   ASSERT (PcdGet8  (PcdAcpiIoPciFunctionNumber) != 0xFF);\r
@@ -99,7 +101,7 @@ AcpiTimerLibConstructor (
       EnableMask\r
       );\r
   }\r
-  \r
+\r
   return RETURN_SUCCESS;\r
 }\r
 \r
@@ -117,23 +119,23 @@ InternalAcpiGetAcpiTimerIoPort (
   )\r
 {\r
   UINT16  Port;\r
-  \r
+\r
   Port = PcdGet16 (PcdAcpiIoPortBaseAddress);\r
-  \r
+\r
   //\r
-  // If the register offset to the BAR for the ACPI I/O Port Base Address is not 0x0000, then \r
-  // read the PCI register for the ACPI BAR value in case the BAR has been programmed to a \r
+  // If the register offset to the BAR for the ACPI I/O Port Base Address is not 0x0000, then\r
+  // read the PCI register for the ACPI BAR value in case the BAR has been programmed to a\r
   // value other than PcdAcpiIoPortBaseAddress\r
   //\r
   if (PcdGet16 (PcdAcpiIoPciBarRegisterOffset) != 0x0000) {\r
     Port = PciRead16 (PCI_LIB_ADDRESS (\r
-                        PcdGet8  (PcdAcpiIoPciBusNumber), \r
-                        PcdGet8  (PcdAcpiIoPciDeviceNumber), \r
-                        PcdGet8  (PcdAcpiIoPciFunctionNumber), \r
+                        PcdGet8  (PcdAcpiIoPciBusNumber),\r
+                        PcdGet8  (PcdAcpiIoPciDeviceNumber),\r
+                        PcdGet8  (PcdAcpiIoPciFunctionNumber),\r
                         PcdGet16 (PcdAcpiIoPciBarRegisterOffset)\r
                         ));\r
   }\r
-  \r
+\r
   return (Port & PcdGet16 (PcdAcpiIoPortBaseAddressMask)) + PcdGet16 (PcdAcpiPm1TmrOffset);\r
 }\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