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