+ }\r
+ \r
+ //\r
+ // When wakeup time is disabled and invalid, reset wakeup time register to valid state \r
+ // but keep wakeup alarm disabled.\r
+ //\r
+ Time.Second = RTC_INIT_SECOND;\r
+ Time.Minute = RTC_INIT_MINUTE;\r
+ Time.Hour = RTC_INIT_HOUR;\r
+ Time.Day = RTC_INIT_DAY;\r
+ Time.Month = RTC_INIT_MONTH;\r
+ Time.Year = PcdGet16 (PcdMinimalValidYear);\r
+ Time.Nanosecond = 0;\r
+ Time.TimeZone = Global->SavedTimeZone;\r
+ Time.Daylight = Global->Daylight;;\r
+\r
+ //\r
+ // Acquire RTC Lock to make access to RTC atomic\r
+ //\r
+ if (!EfiAtRuntime ()) {\r
+ EfiAcquireLock (&Global->RtcLock);\r
+ }\r
+ //\r
+ // Wait for up to 0.1 seconds for the RTC to be updated\r
+ //\r
+ Status = RtcWaitToUpdate (PcdGet32 (PcdRealTimeClockUpdateTimeout));\r
+ if (EFI_ERROR (Status)) {\r
+ if (!EfiAtRuntime ()) {\r
+ EfiReleaseLock (&Global->RtcLock);\r
+ }\r
+ return EFI_DEVICE_ERROR;\r
+ }\r
+\r
+ ConvertEfiTimeToRtcTime (&Time, RegisterB);\r
+\r
+ //\r
+ // Set the Y/M/D info to variable as it has no corresponding hw registers.\r
+ //\r
+ Status = EfiSetVariable (\r
+ L"RTCALARM",\r
+ &gEfiCallerIdGuid,\r
+ EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
+ sizeof (Time),\r
+ &Time\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ if (!EfiAtRuntime ()) {\r
+ EfiReleaseLock (&Global->RtcLock);\r
+ }\r