]> git.proxmox.com Git - mirror_edk2.git/blobdiff - PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcRtc.c
PcAtChipsetPkg/Rtc: Don't unnecessarily create timezone variable.
[mirror_edk2.git] / PcAtChipsetPkg / PcatRealTimeClockRuntimeDxe / PcRtc.c
index bf221768c8e79d0a02f911dc8367f92f4a427b90..acc70a67b71c72d759536ebd41061d2fbf56535c 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   RTC Architectural Protocol GUID as defined in DxeCis 0.96.\r
 \r
-Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2006 - 2016, 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
@@ -14,6 +14,16 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 #include "PcRtc.h"\r
 \r
+//\r
+// Days of month.\r
+//\r
+UINTN mDayOfMonth[] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };\r
+\r
+//\r
+// The name of NV variable to store the timezone and daylight saving information.\r
+//\r
+CHAR16 mTimeZoneVariableName[] = L"RTC";\r
+\r
 /**\r
   Compare the Hour, Minute and Second of the From time and the To time.\r
   \r
@@ -182,11 +192,11 @@ PcRtcInit (
   //\r
   DataSize = sizeof (UINT32);\r
   Status = EfiGetVariable (\r
-             L"RTC",\r
+             mTimeZoneVariableName,\r
              &gEfiCallerIdGuid,\r
              NULL,\r
              &DataSize,\r
-             (VOID *) &TimerVar\r
+             &TimerVar\r
              );\r
   if (!EFI_ERROR (Status)) {\r
     Time.TimeZone = (INT16) TimerVar;\r
@@ -477,15 +487,29 @@ PcRtcSetTime (
   //\r
   // Write timezone and daylight to RTC variable\r
   //\r
-  TimerVar = Time->Daylight;\r
-  TimerVar = (UINT32) ((TimerVar << 16) | (UINT16)(Time->TimeZone));\r
-  Status =  EfiSetVariable (\r
-              L"RTC",\r
-              &gEfiCallerIdGuid,\r
-              EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
-              sizeof (TimerVar),\r
-              &TimerVar\r
-              );\r
+  if (Time->TimeZone == EFI_UNSPECIFIED_TIMEZONE) {\r
+    Status = EfiSetVariable (\r
+               mTimeZoneVariableName,\r
+               &gEfiCallerIdGuid,\r
+               0,\r
+               0,\r
+               NULL\r
+               );\r
+    if (Status == EFI_NOT_FOUND) {\r
+      Status = EFI_SUCCESS;\r
+    }\r
+  } else {\r
+    TimerVar = Time->Daylight;\r
+    TimerVar = (UINT32) ((TimerVar << 16) | (UINT16)(Time->TimeZone));\r
+    Status = EfiSetVariable (\r
+               mTimeZoneVariableName,\r
+               &gEfiCallerIdGuid,\r
+               EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
+               sizeof (TimerVar),\r
+               &TimerVar\r
+               );\r
+  }\r
+\r
   if (EFI_ERROR (Status)) {\r
     if (!EfiAtRuntime ()) {\r
       EfiReleaseLock (&Global->RtcLock);\r
@@ -987,28 +1011,13 @@ DayValid (
   IN  EFI_TIME  *Time\r
   )\r
 {\r
-  INTN  DayOfMonth[12];\r
-\r
-  DayOfMonth[0] = 31;\r
-  DayOfMonth[1] = 29;\r
-  DayOfMonth[2] = 31;\r
-  DayOfMonth[3] = 30;\r
-  DayOfMonth[4] = 31;\r
-  DayOfMonth[5] = 30;\r
-  DayOfMonth[6] = 31;\r
-  DayOfMonth[7] = 31;\r
-  DayOfMonth[8] = 30;\r
-  DayOfMonth[9] = 31;\r
-  DayOfMonth[10] = 30;\r
-  DayOfMonth[11] = 31;\r
-\r
   //\r
   // The validity of Time->Month field should be checked before\r
   //\r
   ASSERT (Time->Month >=1);\r
   ASSERT (Time->Month <=12);\r
   if (Time->Day < 1 ||\r
-      Time->Day > DayOfMonth[Time->Month - 1] ||\r
+      Time->Day > mDayOfMonth[Time->Month - 1] ||\r
       (Time->Month == 2 && (!IsLeapYear (Time) && Time->Day > 28))\r
       ) {\r
     return FALSE;\r
@@ -1144,22 +1153,8 @@ IsWithinOneDay (
   IN EFI_TIME  *To\r
   )\r
 {\r
-  UINT8   DayOfMonth[12];\r
   BOOLEAN Adjacent;\r
 \r
-  DayOfMonth[0] = 31;\r
-  DayOfMonth[1] = 29;\r
-  DayOfMonth[2] = 31;\r
-  DayOfMonth[3] = 30;\r
-  DayOfMonth[4] = 31;\r
-  DayOfMonth[5] = 30;\r
-  DayOfMonth[6] = 31;\r
-  DayOfMonth[7] = 31;\r
-  DayOfMonth[8] = 30;\r
-  DayOfMonth[9] = 31;\r
-  DayOfMonth[10] = 30;\r
-  DayOfMonth[11] = 31;\r
-\r
   Adjacent = FALSE;\r
 \r
   //\r
@@ -1186,7 +1181,7 @@ IsWithinOneDay (
             Adjacent = TRUE;\r
           }\r
         }\r
-      } else if (From->Day == DayOfMonth[From->Month - 1]) {\r
+      } else if (From->Day == mDayOfMonth[From->Month - 1]) {\r
         if ((CompareHMS(From, To) >= 0)) {\r
            Adjacent = TRUE;\r
         }\r