+ 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
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return EFI_DEVICE_ERROR;\r
+ }\r
+ }\r
+\r
+ return EFI_SUCCESS;\r