32 IN UINT32 HibernateMask
40 BOOLEAN HasHibernateInfo;
41 BOOLEAN HasHibernateInfoInRTC;
44 EFI_DEVICE_PATH_PROTOCOL *BootImagePath;
45 EFI_DEVICE_PATH_PROTOCOL *RemainingPath;
49 return EFI_INVALID_PARAMETER;
52 HasHibernateInfo = FALSE;
53 HasHibernateInfoInRTC = FALSE;
59 if (!EFI_ERROR (Status)) {
65 DEBUG ((DEBUG_INFO,
"OCB: Found legacy boot-switch-vars\n"));
69 Status = GetVariable3 (
72 (VOID **)&BootImagePath,
76 if (!EFI_ERROR (Status)) {
77 if (IsDevicePathValid (BootImagePath,
Size)) {
80 "OCB: boot-image pre-fix",
91 if (NumPatchedNodes > 0) {
94 "OCB: boot-image post-fix",
101 Size = GetDevicePathSize (BootImagePath);
103 Status =
gRT->SetVariable (
112 if (NumPatchedNodes >= 0) {
115 "OCB: boot-image post-fix remainder",
120 DEBUG ((DEBUG_INFO,
"OCB: Invalid boot-image variable\n"));
124 FreePool (BootImagePath);
127 DEBUG ((DEBUG_INFO,
"OCB: boot-image is %u bytes - %r\n", (UINT32)
Size, Status));
129 RtcRawVars = (UINT8 *)&RtcVars;
136 RtcRawVars[Index] =
OcRtcRead (Index + 128);
139 HasHibernateInfoInRTC = RtcVars.
signature[0] ==
'A'
143 HasHibernateInfo = HasHibernateInfoInRTC;
145 DEBUG ((DEBUG_INFO,
"OCB: RTC hibernation is %d\n", HasHibernateInfoInRTC));
154 if (!HasHibernateInfo && !EFI_ERROR (Status) && (
Size ==
sizeof (RtcVars))) {
155 CopyMem (RtcRawVars, Value,
sizeof (RtcVars));
156 HasHibernateInfo = RtcVars.
signature[0] ==
'A'
164 "OCB: NVRAM hibernation is %d / %r / %u\n",
173 if (!EFI_ERROR (Status)) {
174 Status =
gRT->SetVariable (
175 L
"IOHibernateRTCVariables",
177 EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
189 if (HasHibernateInfo) {
193 EFI_VARIABLE_BOOTSERVICE_ACCESS,
200 EFI_VARIABLE_BOOTSERVICE_ACCESS,
209 if (HasHibernateInfoInRTC) {
224 if (HasHibernateInfo) {
228 return EFI_NOT_FOUND;