// 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
(VOID **) &BlkIo\r
);\r
//\r
- // skip the fixed block io then the removable block io\r
+ // skip the logical partition\r
+ //\r
+ if (EFI_ERROR (Status) || BlkIo->Media->LogicalPartition) {\r
+ continue;\r
+ }\r
+\r
+ //\r
+ // firstly fixed block io then the removable block io\r
//\r
- if (EFI_ERROR (Status) || (BlkIo->Media->RemovableMedia == Removable[RemovableIndex])) {\r
+ if (BlkIo->Media->RemovableMedia == Removable[RemovableIndex]) {\r
continue;\r
}\r
DevicePath = DevicePathFromHandle (BlockIoHandles[Index]);\r
break;\r
\r
case BDS_EFI_MESSAGE_MISC_BOOT:\r
+ default:\r
if (MiscNumber != 0) {\r
UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_MISC)), MiscNumber);\r
} else {\r
BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);\r
MiscNumber++;\r
break;\r
-\r
- default:\r
- break;\r
}\r
}\r
}\r