]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Disk/PartitionDxe/Udf.c
MdeModulePkg/PartitionDxe: Merge the discovery of ElTorito into UDF
[mirror_edk2.git] / MdeModulePkg / Universal / Disk / PartitionDxe / Udf.c
index 7eee74895872134d81cc2c99c23a3bf95bf54a71..5aac5640f672b022e501fe2c8b687db0fcae589f 100644 (file)
@@ -688,8 +688,10 @@ PartitionInstallUdfChildHandles (
   EFI_PARTITION_INFO_PROTOCOL  PartitionInfo;\r
   EFI_LBA                      StartingLBA;\r
   EFI_LBA                      EndingLBA;\r
+  BOOLEAN                      ChildCreated;\r
 \r
   Media = BlockIo->Media;\r
+  ChildCreated = FALSE;\r
 \r
   //\r
   // Check if UDF logical block size is multiple of underlying device block size\r
@@ -703,12 +705,30 @@ PartitionInstallUdfChildHandles (
     return EFI_NOT_FOUND;\r
   }\r
 \r
+  //\r
+  // Detect El Torito feature first.\r
+  // And always continue to search for UDF.\r
+  //\r
+  Status = PartitionInstallElToritoChildHandles (\r
+             This,\r
+             Handle,\r
+             DiskIo,\r
+             DiskIo2,\r
+             BlockIo,\r
+             BlockIo2,\r
+             DevicePath\r
+             );\r
+  if (!EFI_ERROR (Status)) {\r
+    DEBUG ((DEBUG_INFO, "PartitionDxe: El Torito standard found on handle 0x%p.\n", Handle));\r
+    ChildCreated = TRUE;\r
+  }\r
+\r
   //\r
   // Search for an UDF file system on block device\r
   //\r
   Status = FindUdfFileSystem (BlockIo, DiskIo, &StartingLBA, &EndingLBA);\r
   if (EFI_ERROR (Status)) {\r
-    return EFI_NOT_FOUND;\r
+    return (ChildCreated ? EFI_SUCCESS : EFI_NOT_FOUND);\r
   }\r
 \r
   //\r
@@ -735,6 +755,9 @@ PartitionInstallUdfChildHandles (
     EndingLBA,\r
     Media->BlockSize\r
     );\r
+  if (EFI_ERROR (Status)) {\r
+    return (ChildCreated ? EFI_SUCCESS : Status);\r
+  }\r
 \r
-  return Status;\r
+  return EFI_SUCCESS;\r
 }\r