]> git.proxmox.com Git - mirror_edk2.git/blobdiff - PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcRtc.c
BaseTools/BinToPcd: Fix Python 2.7.x compatibility issue
[mirror_edk2.git] / PcAtChipsetPkg / PcatRealTimeClockRuntimeDxe / PcRtc.c
index 2bb41e7e81a45d1e64ae9124068ca51778a8d093..2105acf35f7b78f75172a18ea14f49e0e1fbd461 100644 (file)
@@ -1,7 +1,9 @@
 /** @file\r
   RTC Architectural Protocol GUID as defined in DxeCis 0.96.\r
 \r
-Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2017, AMD Inc. All rights reserved.<BR>\r
+\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
@@ -26,7 +28,7 @@ CHAR16 mTimeZoneVariableName[] = L"RTC";
 \r
 /**\r
   Compare the Hour, Minute and Second of the From time and the To time.\r
-  \r
+\r
   Only compare H/M/S in EFI_TIME and ignore other fields here.\r
 \r
   @param From   the first time\r
@@ -70,8 +72,8 @@ RtcRead (
   IN  UINT8 Address\r
   )\r
 {\r
-  IoWrite8 (PCAT_RTC_ADDRESS_REGISTER, (UINT8) (Address | (UINT8) (IoRead8 (PCAT_RTC_ADDRESS_REGISTER) & 0x80)));\r
-  return IoRead8 (PCAT_RTC_DATA_REGISTER);\r
+  IoWrite8 (PcdGet8 (PcdRtcIndexRegister), (UINT8) (Address | (UINT8) (IoRead8 (PcdGet8 (PcdRtcIndexRegister)) & 0x80)));\r
+  return IoRead8 (PcdGet8 (PcdRtcTargetRegister));\r
 }\r
 \r
 /**\r
@@ -88,8 +90,8 @@ RtcWrite (
   IN  UINT8   Data\r
   )\r
 {\r
-  IoWrite8 (PCAT_RTC_ADDRESS_REGISTER, (UINT8) (Address | (UINT8) (IoRead8 (PCAT_RTC_ADDRESS_REGISTER) & 0x80)));\r
-  IoWrite8 (PCAT_RTC_DATA_REGISTER, Data);\r
+  IoWrite8 (PcdGet8 (PcdRtcIndexRegister), (UINT8) (Address | (UINT8) (IoRead8 (PcdGet8 (PcdRtcIndexRegister)) & 0x80)));\r
+  IoWrite8 (PcdGet8 (PcdRtcTargetRegister), Data);\r
 }\r
 \r
 /**\r
@@ -128,7 +130,7 @@ PcRtcInit (
   // Make sure Division Chain is properly configured,\r
   // or RTC clock won't "tick" -- time won't increment\r
   //\r
-  RegisterA.Data = RTC_INIT_REGISTER_A;\r
+  RegisterA.Data = FixedPcdGet8 (PcdInitialValueRtcRegisterA);\r
   RtcWrite (RTC_ADDRESS_REGISTER_A, RegisterA.Data);\r
 \r
   //\r
@@ -144,7 +146,7 @@ PcRtcInit (
   //\r
   // Clear RTC register D\r
   //\r
-  RegisterD.Data = RTC_INIT_REGISTER_D;\r
+  RegisterD.Data = FixedPcdGet8 (PcdInitialValueRtcRegisterD);\r
   RtcWrite (RTC_ADDRESS_REGISTER_D, RegisterD.Data);\r
 \r
   //\r
@@ -176,7 +178,7 @@ PcRtcInit (
   // Set RTC configuration after get original time\r
   // The value of bit AIE should be reserved.\r
   //\r
-  RegisterB.Data = RTC_INIT_REGISTER_B | (RegisterB.Data & BIT5);\r
+  RegisterB.Data = FixedPcdGet8 (PcdInitialValueRtcRegisterB) | (RegisterB.Data & BIT5);\r
   RtcWrite (RTC_ADDRESS_REGISTER_B, RegisterB.Data);\r
 \r
   //\r
@@ -185,7 +187,7 @@ PcRtcInit (
   if (!EfiAtRuntime ()) {\r
     EfiReleaseLock (&Global->RtcLock);\r
   }\r
\r
+\r
   //\r
   // Get the data of Daylight saving and time zone, if they have been\r
   // stored in NV variable during previous boot.\r
@@ -203,7 +205,7 @@ PcRtcInit (
     Time.Daylight = (UINT8) (TimerVar >> 16);\r
   } else {\r
     Time.TimeZone = EFI_UNSPECIFIED_TIMEZONE;\r
-    Time.Daylight = 0;  \r
+    Time.Daylight = 0;\r
   }\r
 \r
   //\r
@@ -239,7 +241,7 @@ PcRtcInit (
   if (EFI_ERROR (Status)) {\r
     return EFI_DEVICE_ERROR;\r
   }\r
-  \r
+\r
   //\r
   // Reset wakeup time value to valid state when wakeup alarm is disabled and wakeup time is invalid.\r
   // Global variable has already had valid SavedTimeZone and Daylight,\r
@@ -249,9 +251,9 @@ PcRtcInit (
   if ((Enabled) || (!EFI_ERROR (Status))) {\r
     return EFI_SUCCESS;\r
   }\r
-  \r
+\r
   //\r
-  // When wakeup time is disabled and invalid, reset wakeup time register to valid state \r
+  // When wakeup time is disabled and invalid, reset wakeup time register to valid state\r
   // but keep wakeup alarm disabled.\r
   //\r
   Time.Second = RTC_INIT_SECOND;\r
@@ -299,13 +301,13 @@ PcRtcInit (
     }\r
     return EFI_DEVICE_ERROR;\r
   }\r
-  \r
+\r
   //\r
   // Inhibit updates of the RTC\r
   //\r
   RegisterB.Bits.Set  = 1;\r
   RtcWrite (RTC_ADDRESS_REGISTER_B, RegisterB.Data);\r
\r
+\r
   //\r
   // Set RTC alarm time registers\r
   //\r
@@ -318,7 +320,7 @@ PcRtcInit (
   //\r
   RegisterB.Bits.Set = 0;\r
   RtcWrite (RTC_ADDRESS_REGISTER_B, RegisterB.Data);\r
\r
+\r
   //\r
   // Release RTC Lock.\r
   //\r
@@ -483,7 +485,7 @@ PcRtcSetTime (
      }\r
     return Status;\r
   }\r
-  \r
+\r
   //\r
   // Write timezone and daylight to RTC variable\r
   //\r
@@ -787,7 +789,7 @@ PcRtcSetWakeupTime (
     }\r
     return EFI_DEVICE_ERROR;\r
   }\r
-  \r
+\r
   //\r
   // Inhibit updates of the RTC\r
   //\r
@@ -930,7 +932,7 @@ ConvertRtcTimeToEfiTime (
   @param    Timeout  Tell how long it should take to wait.\r
 \r
   @retval   EFI_DEVICE_ERROR   RTC device error.\r
-  @retval   EFI_SUCCESS        RTC is updated and ready.  \r
+  @retval   EFI_SUCCESS        RTC is updated and ready.\r
 **/\r
 EFI_STATUS\r
 RtcWaitToUpdate (\r
@@ -1111,7 +1113,7 @@ ConvertEfiTimeToRtcTime (
 \r
 /**\r
   Compare the Hour, Minute and Second of the From time and the To time.\r
-  \r
+\r
   Only compare H/M/S in EFI_TIME and ignore other fields here.\r
 \r
   @param From   the first time\r
@@ -1162,7 +1164,7 @@ IsWithinOneDay (
   //\r
   ASSERT (From->Month >=1);\r
   ASSERT (From->Month <=12);\r
-  \r
+\r
   if (From->Year == To->Year) {\r
     if (From->Month == To->Month) {\r
       if ((From->Day + 1) == To->Day) {\r
@@ -1230,6 +1232,11 @@ ScanTableInSDT (
     //\r
     Table = 0;\r
     CopyMem (&Table, (VOID *) (EntryBase + Index * TablePointerSize), TablePointerSize);\r
+\r
+    if (Table == NULL) {\r
+      continue;\r
+    }\r
+\r
     if (Table->Signature == Signature) {\r
       return Table;\r
     }\r