]> git.proxmox.com Git - mirror_edk2.git/commitdiff
EmulatorPkg/Win: Add RTC support
authorRuiyu Ni <ruiyu.ni@intel.com>
Thu, 23 Aug 2018 05:37:37 +0000 (13:37 +0800)
committerRuiyu Ni <ruiyu.ni@intel.com>
Mon, 27 Aug 2018 07:20:56 +0000 (15:20 +0800)
Now firmware can display the time correctly.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Hao A Wu <hao.a.wu@intel.com>
Cc: Andrew Fish <afish@apple.com>
EmulatorPkg/Win/Host/WinThunk.c

index ffe71aef9a1a61b843abdd8522ce95a2006a16dc..306fe75ecd23ab997ff6807c0416c357f3fde8a7 100644 (file)
@@ -482,14 +482,68 @@ SecGetTime (
   OUT EFI_TIME_CAPABILITIES   *Capabilities OPTIONAL\r
   )\r
 {\r
+  SYSTEMTIME            SystemTime;\r
+  TIME_ZONE_INFORMATION TimeZone;\r
+\r
+  GetLocalTime (&SystemTime);\r
+  GetTimeZoneInformation (&TimeZone);\r
+\r
+  Time->Year = (UINT16)SystemTime.wYear;\r
+  Time->Month = (UINT8)SystemTime.wMonth;\r
+  Time->Day = (UINT8)SystemTime.wDay;\r
+  Time->Hour = (UINT8)SystemTime.wHour;\r
+  Time->Minute = (UINT8)SystemTime.wMinute;\r
+  Time->Second = (UINT8)SystemTime.wSecond;\r
+  Time->Nanosecond = (UINT32)(SystemTime.wMilliseconds * 1000000);\r
+  Time->TimeZone = (INT16)TimeZone.Bias;\r
+\r
+  if (Capabilities != NULL) {\r
+    Capabilities->Resolution = 1;\r
+    Capabilities->Accuracy = 50000000;\r
+    Capabilities->SetsToZero = FALSE;\r
+  }\r
+\r
+  Time->Daylight = 0;\r
+  if (TimeZone.StandardDate.wMonth) {\r
+    Time->Daylight = (UINT8)TimeZone.StandardDate.wMonth;\r
+  }\r
 }\r
 \r
 EFI_STATUS\r
 SecSetTime (\r
   IN  EFI_TIME               *Time\r
-)\r
+  )\r
 {\r
-  return EFI_SUCCESS;\r
+  TIME_ZONE_INFORMATION TimeZone;\r
+  SYSTEMTIME            SystemTime;\r
+  BOOL                  Flag;\r
+\r
+  //\r
+  // Set Daylight savings time information and Time Zone\r
+  //\r
+  GetTimeZoneInformation (&TimeZone);\r
+  TimeZone.StandardDate.wMonth = Time->Daylight;\r
+  TimeZone.Bias = Time->TimeZone;\r
+  Flag = SetTimeZoneInformation (&TimeZone);\r
+  if (!Flag) {\r
+    return EFI_DEVICE_ERROR;\r
+  }\r
+\r
+  SystemTime.wYear = Time->Year;\r
+  SystemTime.wMonth = Time->Month;\r
+  SystemTime.wDay = Time->Day;\r
+  SystemTime.wHour = Time->Hour;\r
+  SystemTime.wMinute = Time->Minute;\r
+  SystemTime.wSecond = Time->Second;\r
+  SystemTime.wMilliseconds = (INT16)(Time->Nanosecond / 1000000);\r
+\r
+  Flag = SetLocalTime (&SystemTime);\r
+\r
+  if (!Flag) {\r
+    return EFI_DEVICE_ERROR;\r
+  } else {\r
+    return EFI_SUCCESS;\r
+  }\r
 }\r
 \r
 EMU_THUNK_PROTOCOL gEmuThunkProtocol = {\r