+ EFI_STATUS Status;\r
+ BOOLEAN TimeSettingsChanged;\r
+\r
+ if (Time == NULL || !IsTimeValid (Time)) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ TimeSettingsChanged = FALSE;\r
+ if (mTimeSettings.TimeZone != Time->TimeZone ||\r
+ mTimeSettings.Daylight != Time->Daylight) {\r
+\r
+ mTimeSettings.TimeZone = Time->TimeZone;\r
+ mTimeSettings.Daylight = Time->Daylight;\r
+ TimeSettingsChanged = TRUE;\r
+ }\r
+\r
+ Status = LibSetTime (Time);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ if (TimeSettingsChanged) {\r
+ Status = EfiSetVariable (\r
+ (CHAR16 *)mTimeSettingsVariableName,\r
+ &gEfiCallerIdGuid,\r
+ EFI_VARIABLE_NON_VOLATILE |\r
+ EFI_VARIABLE_BOOTSERVICE_ACCESS |\r
+ EFI_VARIABLE_RUNTIME_ACCESS,\r
+ sizeof (mTimeSettings),\r
+ (VOID *)&mTimeSettings);\r
+ if (EFI_ERROR (Status)) {\r
+ return EFI_DEVICE_ERROR;\r
+ }\r
+ }\r
+ return EFI_SUCCESS;\r