From: Hao Wu Date: Fri, 13 Oct 2017 07:14:51 +0000 (+0800) Subject: MdeModulePkg/PartitionDxe: Merge the discovery of ElTorito into UDF X-Git-Tag: edk2-stable201903~3062 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=01a68fd37e79c6c7e2f342d7d2c1349325110e99;p=mirror_edk2.git MdeModulePkg/PartitionDxe: Merge the discovery of ElTorito into UDF In order to create all of the children (El Torito standard and UDF) for a CD/DVD media in an entry of the PartitionDriverBindingStart(), this commit merges the discovery of the El Torito feature (PartitionInstallElToritoChildHandles) into function PartitionInstallUdfChildHandles. Cc: Ruiyu Ni Cc: Star Zeng Cc: Eric Dong Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Hao Wu Reviewed-by: Paulo Alcantara --- diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c b/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c index f6030e0897..603abfe55a 100644 --- a/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c +++ b/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c @@ -43,7 +43,6 @@ EFI_DRIVER_BINDING_PROTOCOL gPartitionDriverBinding = { // PARTITION_DETECT_ROUTINE mPartitionDetectRoutineTable[] = { PartitionInstallGptChildHandles, - PartitionInstallElToritoChildHandles, PartitionInstallMbrChildHandles, PartitionInstallUdfChildHandles, NULL @@ -306,9 +305,9 @@ PartitionDriverBindingStart ( if (BlockIo->Media->MediaPresent || (BlockIo->Media->RemovableMedia && !BlockIo->Media->LogicalPartition)) { // - // Try for GPT, then El Torito, then UDF, and then legacy MBR partition - // types. If the media supports a given partition type install child handles - // to represent the partitions described by the media. + // Try for GPT, then legacy MBR partition types, and then UDF and El Torito. + // If the media supports a given partition type install child handles to + // represent the partitions described by the media. // Routine = &mPartitionDetectRoutineTable[0]; while (*Routine != NULL) { diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/Udf.c b/MdeModulePkg/Universal/Disk/PartitionDxe/Udf.c index 7eee748958..5aac5640f6 100644 --- a/MdeModulePkg/Universal/Disk/PartitionDxe/Udf.c +++ b/MdeModulePkg/Universal/Disk/PartitionDxe/Udf.c @@ -688,8 +688,10 @@ PartitionInstallUdfChildHandles ( EFI_PARTITION_INFO_PROTOCOL PartitionInfo; EFI_LBA StartingLBA; EFI_LBA EndingLBA; + BOOLEAN ChildCreated; Media = BlockIo->Media; + ChildCreated = FALSE; // // Check if UDF logical block size is multiple of underlying device block size @@ -703,12 +705,30 @@ PartitionInstallUdfChildHandles ( return EFI_NOT_FOUND; } + // + // Detect El Torito feature first. + // And always continue to search for UDF. + // + Status = PartitionInstallElToritoChildHandles ( + This, + Handle, + DiskIo, + DiskIo2, + BlockIo, + BlockIo2, + DevicePath + ); + if (!EFI_ERROR (Status)) { + DEBUG ((DEBUG_INFO, "PartitionDxe: El Torito standard found on handle 0x%p.\n", Handle)); + ChildCreated = TRUE; + } + // // Search for an UDF file system on block device // Status = FindUdfFileSystem (BlockIo, DiskIo, &StartingLBA, &EndingLBA); if (EFI_ERROR (Status)) { - return EFI_NOT_FOUND; + return (ChildCreated ? EFI_SUCCESS : EFI_NOT_FOUND); } // @@ -735,6 +755,9 @@ PartitionInstallUdfChildHandles ( EndingLBA, Media->BlockSize ); + if (EFI_ERROR (Status)) { + return (ChildCreated ? EFI_SUCCESS : Status); + } - return Status; + return EFI_SUCCESS; }