diff options
author | Hao Wu <hao.a.wu@intel.com> | 2017-10-13 15:14:51 +0800 |
---|---|---|
committer | Hao Wu <hao.a.wu@intel.com> | 2017-11-20 08:54:17 +0800 |
commit | 01a68fd37e79c6c7e2f342d7d2c1349325110e99 (patch) | |
tree | 305b3245a31136eeff6ee0b1773c52e0327e9d89 | |
parent | b2662641d56a7ebfe46f1c8ebd77611d3037cf65 (diff) | |
download | edk2-01a68fd37e79c6c7e2f342d7d2c1349325110e99.zip edk2-01a68fd37e79c6c7e2f342d7d2c1349325110e99.tar.gz edk2-01a68fd37e79c6c7e2f342d7d2c1349325110e99.tar.bz2 |
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 <ruiyu.ni@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
Reviewed-by: Paulo Alcantara <pcacjr@zytor.com>
-rw-r--r-- | MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c | 7 | ||||
-rw-r--r-- | MdeModulePkg/Universal/Disk/PartitionDxe/Udf.c | 27 |
2 files changed, 28 insertions, 6 deletions
diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c b/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c index f6030e0..603abfe 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 7eee748..5aac564 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
@@ -704,11 +706,29 @@ PartitionInstallUdfChildHandles ( }
//
+ // 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;
}
|