]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Enable storage of daylight saving and time zone data of SetTime() service, and fix...
authorlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 6 May 2008 05:38:06 +0000 (05:38 +0000)
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 6 May 2008 05:38:06 +0000 (05:38 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5168 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Universal/PcatRealTimeClockRuntimeDxe/PcRtc.c
MdeModulePkg/Universal/PcatRealTimeClockRuntimeDxe/PcRtc.h
MdeModulePkg/Universal/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe.inf

index f97a2b7e7bf443c4efdd5ef34636b11b7acc219b..a007bd059568d75d8fde1f423d5240b900cf6df1 100644 (file)
@@ -107,6 +107,8 @@ Returns:
   RTC_REGISTER_D  RegisterD;\r
   UINT8           Century;\r
   EFI_TIME        Time;\r
+  UINTN           DataSize;\r
+  UINT32          TimerVar;\r
 \r
   //\r
   // Acquire RTC Lock to make access to RTC atomic\r
@@ -175,8 +177,9 @@ Returns:
 \r
   //\r
   // Set RTC configuration after get original time\r
+  // The value of bit AIE should be reserved.\r
   //\r
-  RtcWrite (RTC_ADDRESS_REGISTER_B, RTC_INIT_REGISTER_B);\r
+  RtcWrite (RTC_ADDRESS_REGISTER_B, RTC_INIT_REGISTER_B | (RegisterB.Data & BIT5));\r
 \r
   //\r
   // Release RTC Lock.\r
@@ -199,6 +202,25 @@ Returns:
     Time.Year   = RTC_INIT_YEAR;\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
+  //\r
+  DataSize = sizeof (UINT32);\r
+  Status = EfiGetVariable (\r
+             L"TimerVar",\r
+             &gEfiGenericPlatformVariableGuid,\r
+             NULL,\r
+             &DataSize,\r
+             (VOID *) &TimerVar\r
+             );\r
+  if (!EFI_ERROR (Status)) {\r
+    Global->SavedTimeZone = (INT16) TimerVar;\r
+    Global->Daylight      = (UINT8) (TimerVar >> 16);\r
+\r
+    Time.TimeZone = Global->SavedTimeZone;\r
+    Time.Daylight = Global->Daylight;\r
+  }\r
+  //\r
   // Reset time value according to new RTC configuration\r
   //\r
   PcRtcSetTime (&Time, Global);\r
@@ -343,6 +365,7 @@ Routine Description:
   EFI_TIME        RtcTime;\r
   RTC_REGISTER_B  RegisterB;\r
   UINT8           Century;\r
+  UINT32          TimerVar;\r
 \r
   if (Time == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -417,7 +440,19 @@ Routine Description:
   //\r
   Global->SavedTimeZone = Time->TimeZone;\r
   Global->Daylight      = Time->Daylight;\r
-  return Status;\r
+\r
+  TimerVar = Time->Daylight;\r
+  TimerVar = (UINT32) ((TimerVar << 16) | Time->TimeZone);\r
+  Status =  EfiSetVariable (\r
+              L"TimerVar",\r
+              &gEfiGenericPlatformVariableGuid,\r
+              EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
+              sizeof (TimerVar),\r
+              &TimerVar\r
+              );\r
+  ASSERT_EFI_ERROR (Status);\r
+\r
+  return EFI_SUCCESS;\r
 }\r
 \r
 EFI_STATUS\r
index b120d09819fc3ce85a21b389837cfecc00cb00a7..c44731a2f860541a352cba26c1a114eace1b83ba 100644 (file)
@@ -20,6 +20,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include <PiDxe.h>\r
 \r
 #include <Protocol/RealTimeClock.h>\r
+#include <Guid/GenericPlatformVariable.h>\r
 \r
 #include <Library/BaseLib.h>\r
 #include <Library/DebugLib.h>\r
@@ -35,7 +36,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 typedef struct {\r
   EFI_LOCK  RtcLock;\r
-  UINT16    SavedTimeZone;\r
+  INT16     SavedTimeZone;\r
   UINT8     Daylight;\r
 } PC_RTC_MODULE_GLOBALS;\r
 \r
index d50129fd525414ce8e50bec55649b125f26cf3b9..f464369bd14ed62d7d2455ae82145c7869411127 100644 (file)
@@ -40,6 +40,7 @@
 \r
 [Packages]\r
   MdePkg/MdePkg.dec\r
+  MdeModulePkg/MdeModulePkg.dec\r
 \r
 [LibraryClasses]\r
   UefiRuntimeServicesTableLib\r
   DebugLib\r
   BaseLib\r
 \r
+[Guids]\r
+  gEfiGenericPlatformVariableGuid               # ALWAYS_CONSUMED\r
+\r
 [Protocols]\r
   gEfiRealTimeClockArchProtocolGuid             # PROTOCOL ALWAYS_PRODUCED\r
 \r
 [Depex]\r
-  TRUE
\ No newline at end of file
+  gEfiVariableArchProtocolGuid AND gEfiVariableWriteArchProtocolGuid\r
+  
\ No newline at end of file