return Status;\r
}\r
\r
- LegacyBios->GetBbsInfo (\r
- LegacyBios,\r
- &HddCount,\r
- &LocalHddInfo,\r
- &BbsCount,\r
- &LocalBbsTable\r
- );\r
-\r
BootOrder = BdsLibGetVariableAndSize (\r
L"BootOrder",\r
&gEfiGlobalVariableGuid,\r
&BootOrderSize\r
);\r
if (BootOrder == NULL) {\r
- BootOrderSize = 0;\r
+ return EFI_NOT_FOUND;\r
}\r
\r
+ LegacyBios->GetBbsInfo (\r
+ LegacyBios,\r
+ &HddCount,\r
+ &LocalHddInfo,\r
+ &BbsCount,\r
+ &LocalBbsTable\r
+ );\r
+\r
Index = 0;\r
while (Index < BootOrderSize / sizeof (UINT16)) {\r
UnicodeSPrint (BootOption, sizeof (BootOption), L"Boot%04x", BootOrder[Index]);\r
// Shrinking variable with existing variable implementation shouldn't fail.\r
//\r
ASSERT_EFI_ERROR (Status);\r
- if (BootOrder != NULL) {\r
- FreePool (BootOrder);\r
- }\r
+ FreePool (BootOrder);\r
\r
return Status;\r
}\r
// If exist, search the front path which point to partition node in the variable instants.\r
// If fail to find or HD_BOOT_DEVICE_PATH_VARIABLE_NAME not exist, reconnect all and search in all system\r
//\r
- CachedDevicePath = BdsLibGetVariableAndSize (\r
- HD_BOOT_DEVICE_PATH_VARIABLE_NAME,\r
- &gHdBootDevicePathVariablGuid,\r
- &CachedDevicePathSize\r
- );\r
+ GetVariable2 (\r
+ HD_BOOT_DEVICE_PATH_VARIABLE_NAME,\r
+ &gHdBootDevicePathVariablGuid,\r
+ (VOID **) &CachedDevicePath,\r
+ &CachedDevicePathSize\r
+ );\r
+\r
+ //\r
+ // Delete the invalid HD_BOOT_DEVICE_PATH_VARIABLE_NAME variable.\r
+ //\r
+ if ((CachedDevicePath != NULL) && !IsDevicePathValid (CachedDevicePath, CachedDevicePathSize)) {\r
+ FreePool (CachedDevicePath);\r
+ CachedDevicePath = NULL;\r
+ Status = gRT->SetVariable (\r
+ HD_BOOT_DEVICE_PATH_VARIABLE_NAME,\r
+ &gHdBootDevicePathVariablGuid,\r
+ 0,\r
+ 0,\r
+ NULL\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
\r
if (CachedDevicePath != NULL) {\r
TempNewDevicePath = CachedDevicePath;\r
Status = gRT->SetVariable (\r
HD_BOOT_DEVICE_PATH_VARIABLE_NAME,\r
&gHdBootDevicePathVariablGuid,\r
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
+ EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
GetDevicePathSize (CachedDevicePath),\r
CachedDevicePath\r
);\r
Status = gRT->SetVariable (\r
HD_BOOT_DEVICE_PATH_VARIABLE_NAME,\r
&gHdBootDevicePathVariablGuid,\r
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
+ EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
GetDevicePathSize (CachedDevicePath),\r
CachedDevicePath\r
);\r