MdeModulePkg/PartitionDxe: Add UDF file system support
Scan for UDF file systems on all block devices, as specified by OSTA Universal Disk Format Specification 2.60, and install a Vendor-Defined Media Device Path for each file system found. The Vendor-Defined Media Device Path for the UDF file system is then checked by UdfDxe to decide whether or not start the driver. Cc: Star Zeng <star.zeng@intel.com> Cc: Eric Dong <eric.dong@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Paulo Alcantara <pcacjr@zytor.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
This commit is contained in:
parent
fae0d2a2c6
commit
8aafec2c13
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
Partition driver that produces logical BlockIo devices from a physical
|
Partition driver that produces logical BlockIo devices from a physical
|
||||||
BlockIo device. The logical BlockIo devices are based on the format
|
BlockIo device. The logical BlockIo devices are based on the format
|
||||||
of the raw block devices media. Currently "El Torito CD-ROM", Legacy
|
of the raw block devices media. Currently "El Torito CD-ROM", UDF, Legacy
|
||||||
MBR, and GPT partition schemes are supported.
|
MBR, and GPT partition schemes are supported.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
@ -45,6 +45,7 @@ PARTITION_DETECT_ROUTINE mPartitionDetectRoutineTable[] = {
|
|||||||
PartitionInstallGptChildHandles,
|
PartitionInstallGptChildHandles,
|
||||||
PartitionInstallElToritoChildHandles,
|
PartitionInstallElToritoChildHandles,
|
||||||
PartitionInstallMbrChildHandles,
|
PartitionInstallMbrChildHandles,
|
||||||
|
PartitionInstallUdfChildHandles,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -305,9 +306,9 @@ PartitionDriverBindingStart (
|
|||||||
if (BlockIo->Media->MediaPresent ||
|
if (BlockIo->Media->MediaPresent ||
|
||||||
(BlockIo->Media->RemovableMedia && !BlockIo->Media->LogicalPartition)) {
|
(BlockIo->Media->RemovableMedia && !BlockIo->Media->LogicalPartition)) {
|
||||||
//
|
//
|
||||||
// Try for GPT, then El Torito, and then legacy MBR partition types. If the
|
// Try for GPT, then El Torito, then UDF, and then legacy MBR partition
|
||||||
// media supports a given partition type install child handles to represent
|
// types. If the media supports a given partition type install child handles
|
||||||
// the partitions described by the media.
|
// to represent the partitions described by the media.
|
||||||
//
|
//
|
||||||
Routine = &mPartitionDetectRoutineTable[0];
|
Routine = &mPartitionDetectRoutineTable[0];
|
||||||
while (*Routine != NULL) {
|
while (*Routine != NULL) {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
Partition driver that produces logical BlockIo devices from a physical
|
Partition driver that produces logical BlockIo devices from a physical
|
||||||
BlockIo device. The logical BlockIo devices are based on the format
|
BlockIo device. The logical BlockIo devices are based on the format
|
||||||
of the raw block devices media. Currently "El Torito CD-ROM", Legacy
|
of the raw block devices media. Currently "El Torito CD-ROM", UDF, Legacy
|
||||||
MBR, and GPT partition schemes are supported.
|
MBR, and GPT partition schemes are supported.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
@ -39,7 +39,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
|
|
||||||
#include <IndustryStandard/Mbr.h>
|
#include <IndustryStandard/Mbr.h>
|
||||||
#include <IndustryStandard/ElTorito.h>
|
#include <IndustryStandard/ElTorito.h>
|
||||||
|
#include <IndustryStandard/Udf.h>
|
||||||
|
|
||||||
//
|
//
|
||||||
// Partition private data
|
// Partition private data
|
||||||
@ -445,6 +445,34 @@ PartitionInstallMbrChildHandles (
|
|||||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Install child handles if the Handle supports UDF/ECMA-167 volume format.
|
||||||
|
|
||||||
|
@param[in] This Calling context.
|
||||||
|
@param[in] Handle Parent Handle.
|
||||||
|
@param[in] DiskIo Parent DiskIo interface.
|
||||||
|
@param[in] DiskIo2 Parent DiskIo2 interface.
|
||||||
|
@param[in] BlockIo Parent BlockIo interface.
|
||||||
|
@param[in] BlockIo2 Parent BlockIo2 interface.
|
||||||
|
@param[in] DevicePath Parent Device Path
|
||||||
|
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS Child handle(s) was added.
|
||||||
|
@retval EFI_MEDIA_CHANGED Media changed Detected.
|
||||||
|
@retval other no child handle was added.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
PartitionInstallUdfChildHandles (
|
||||||
|
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||||
|
IN EFI_HANDLE Handle,
|
||||||
|
IN EFI_DISK_IO_PROTOCOL *DiskIo,
|
||||||
|
IN EFI_DISK_IO2_PROTOCOL *DiskIo2,
|
||||||
|
IN EFI_BLOCK_IO_PROTOCOL *BlockIo,
|
||||||
|
IN EFI_BLOCK_IO2_PROTOCOL *BlockIo2,
|
||||||
|
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||||||
|
);
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
(*PARTITION_DETECT_ROUTINE) (
|
(*PARTITION_DETECT_ROUTINE) (
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
# This module produces the logical Block I/O device that represents
|
# This module produces the logical Block I/O device that represents
|
||||||
# the bytes from Start to End of the Parent Block I/O device.
|
# the bytes from Start to End of the Parent Block I/O device.
|
||||||
# The partition of physical BlockIo device supported is one of legacy MBR, GPT,
|
# The partition of physical BlockIo device supported is one of legacy MBR, GPT,
|
||||||
# and "El Torito" partitions.
|
# UDF and "El Torito" partitions.
|
||||||
#
|
#
|
||||||
# Caution: This module requires additional review when modified.
|
# Caution: This module requires additional review when modified.
|
||||||
# This driver will have external input - disk partition.
|
# This driver will have external input - disk partition.
|
||||||
@ -46,6 +46,7 @@
|
|||||||
Mbr.c
|
Mbr.c
|
||||||
Gpt.c
|
Gpt.c
|
||||||
ElTorito.c
|
ElTorito.c
|
||||||
|
Udf.c
|
||||||
Partition.c
|
Partition.c
|
||||||
Partition.h
|
Partition.h
|
||||||
|
|
||||||
|
318
MdeModulePkg/Universal/Disk/PartitionDxe/Udf.c
Normal file
318
MdeModulePkg/Universal/Disk/PartitionDxe/Udf.c
Normal file
@ -0,0 +1,318 @@
|
|||||||
|
/** @file
|
||||||
|
Scan for an UDF file system on a formatted media.
|
||||||
|
|
||||||
|
Copyright (C) 2014-2017 Paulo Alcantara <pcacjr@zytor.com>
|
||||||
|
|
||||||
|
This program and the accompanying materials are licensed and made available
|
||||||
|
under the terms and conditions of the BSD License which accompanies this
|
||||||
|
distribution. The full text of the license may be found at
|
||||||
|
http://opensource.org/licenses/bsd-license.php
|
||||||
|
|
||||||
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
|
||||||
|
WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "Partition.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// C5BD4D42-1A76-4996-8956-73CDA326CD0A
|
||||||
|
//
|
||||||
|
#define EFI_UDF_DEVICE_PATH_GUID \
|
||||||
|
{ 0xC5BD4D42, 0x1A76, 0x4996, \
|
||||||
|
{ 0x89, 0x56, 0x73, 0xCD, 0xA3, 0x26, 0xCD, 0x0A } \
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
VENDOR_DEVICE_PATH DevicePath;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL End;
|
||||||
|
} UDF_DEVICE_PATH;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Vendor-Defined Media Device Path for UDF file system
|
||||||
|
//
|
||||||
|
UDF_DEVICE_PATH gUdfDevicePath = {
|
||||||
|
{ { MEDIA_DEVICE_PATH, MEDIA_VENDOR_DP,
|
||||||
|
{ sizeof (VENDOR_DEVICE_PATH), 0 } },
|
||||||
|
EFI_UDF_DEVICE_PATH_GUID
|
||||||
|
},
|
||||||
|
{ END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE,
|
||||||
|
{ sizeof (EFI_DEVICE_PATH_PROTOCOL), 0 }
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
FindAnchorVolumeDescriptorPointer (
|
||||||
|
IN EFI_BLOCK_IO_PROTOCOL *BlockIo,
|
||||||
|
IN EFI_DISK_IO_PROTOCOL *DiskIo,
|
||||||
|
OUT UDF_ANCHOR_VOLUME_DESCRIPTOR_POINTER *AnchorPoint
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
UINT32 BlockSize = BlockIo->Media->BlockSize;
|
||||||
|
EFI_LBA EndLBA = BlockIo->Media->LastBlock;
|
||||||
|
EFI_LBA DescriptorLBAs[] = { 256, EndLBA - 256, EndLBA, 512 };
|
||||||
|
UINTN Index;
|
||||||
|
|
||||||
|
for (Index = 0; Index < ARRAY_SIZE (DescriptorLBAs); Index++) {
|
||||||
|
Status = DiskIo->ReadDisk (
|
||||||
|
DiskIo,
|
||||||
|
BlockIo->Media->MediaId,
|
||||||
|
MultU64x32 (DescriptorLBAs[Index], BlockSize),
|
||||||
|
sizeof (UDF_ANCHOR_VOLUME_DESCRIPTOR_POINTER),
|
||||||
|
(VOID *)AnchorPoint
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Check if read LBA has a valid AVDP descriptor.
|
||||||
|
//
|
||||||
|
if (IS_AVDP (AnchorPoint)) {
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// No AVDP found.
|
||||||
|
//
|
||||||
|
return EFI_VOLUME_CORRUPTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Check if block device supports a valid UDF file system as specified by OSTA
|
||||||
|
Universal Disk Format Specification 2.60.
|
||||||
|
|
||||||
|
@param[in] BlockIo BlockIo interface.
|
||||||
|
@param[in] DiskIo DiskIo interface.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS UDF file system found.
|
||||||
|
@retval EFI_UNSUPPORTED UDF file system not found.
|
||||||
|
@retval EFI_NO_MEDIA The device has no media.
|
||||||
|
@retval EFI_DEVICE_ERROR The device reported an error.
|
||||||
|
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.
|
||||||
|
@retval EFI_OUT_OF_RESOURCES The scan was not successful due to lack of
|
||||||
|
resources.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
SupportUdfFileSystem (
|
||||||
|
IN EFI_BLOCK_IO_PROTOCOL *BlockIo,
|
||||||
|
IN EFI_DISK_IO_PROTOCOL *DiskIo
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
UINT64 Offset;
|
||||||
|
UINT64 EndDiskOffset;
|
||||||
|
CDROM_VOLUME_DESCRIPTOR VolDescriptor;
|
||||||
|
CDROM_VOLUME_DESCRIPTOR TerminatingVolDescriptor;
|
||||||
|
UDF_ANCHOR_VOLUME_DESCRIPTOR_POINTER AnchorPoint;
|
||||||
|
|
||||||
|
ZeroMem ((VOID *)&TerminatingVolDescriptor, sizeof (CDROM_VOLUME_DESCRIPTOR));
|
||||||
|
|
||||||
|
//
|
||||||
|
// Start Volume Recognition Sequence
|
||||||
|
//
|
||||||
|
EndDiskOffset = MultU64x32 (BlockIo->Media->LastBlock,
|
||||||
|
BlockIo->Media->BlockSize);
|
||||||
|
|
||||||
|
for (Offset = UDF_VRS_START_OFFSET; Offset < EndDiskOffset;
|
||||||
|
Offset += UDF_LOGICAL_SECTOR_SIZE) {
|
||||||
|
//
|
||||||
|
// Check if block device has a Volume Structure Descriptor and an Extended
|
||||||
|
// Area.
|
||||||
|
//
|
||||||
|
Status = DiskIo->ReadDisk (
|
||||||
|
DiskIo,
|
||||||
|
BlockIo->Media->MediaId,
|
||||||
|
Offset,
|
||||||
|
sizeof (CDROM_VOLUME_DESCRIPTOR),
|
||||||
|
(VOID *)&VolDescriptor
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CompareMem ((VOID *)VolDescriptor.Unknown.Id,
|
||||||
|
(VOID *)UDF_BEA_IDENTIFIER,
|
||||||
|
sizeof (VolDescriptor.Unknown.Id)) == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((CompareMem ((VOID *)VolDescriptor.Unknown.Id,
|
||||||
|
(VOID *)CDVOL_ID,
|
||||||
|
sizeof (VolDescriptor.Unknown.Id)) != 0) ||
|
||||||
|
(CompareMem ((VOID *)&VolDescriptor,
|
||||||
|
(VOID *)&TerminatingVolDescriptor,
|
||||||
|
sizeof (CDROM_VOLUME_DESCRIPTOR)) == 0)) {
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Look for "NSR0{2,3}" identifiers in the Extended Area.
|
||||||
|
//
|
||||||
|
Offset += UDF_LOGICAL_SECTOR_SIZE;
|
||||||
|
if (Offset >= EndDiskOffset) {
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = DiskIo->ReadDisk (
|
||||||
|
DiskIo,
|
||||||
|
BlockIo->Media->MediaId,
|
||||||
|
Offset,
|
||||||
|
sizeof (CDROM_VOLUME_DESCRIPTOR),
|
||||||
|
(VOID *)&VolDescriptor
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((CompareMem ((VOID *)VolDescriptor.Unknown.Id,
|
||||||
|
(VOID *)UDF_NSR2_IDENTIFIER,
|
||||||
|
sizeof (VolDescriptor.Unknown.Id)) != 0) &&
|
||||||
|
(CompareMem ((VOID *)VolDescriptor.Unknown.Id,
|
||||||
|
(VOID *)UDF_NSR3_IDENTIFIER,
|
||||||
|
sizeof (VolDescriptor.Unknown.Id)) != 0)) {
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Look for "TEA01" identifier in the Extended Area
|
||||||
|
//
|
||||||
|
Offset += UDF_LOGICAL_SECTOR_SIZE;
|
||||||
|
if (Offset >= EndDiskOffset) {
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = DiskIo->ReadDisk (
|
||||||
|
DiskIo,
|
||||||
|
BlockIo->Media->MediaId,
|
||||||
|
Offset,
|
||||||
|
sizeof (CDROM_VOLUME_DESCRIPTOR),
|
||||||
|
(VOID *)&VolDescriptor
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CompareMem ((VOID *)VolDescriptor.Unknown.Id,
|
||||||
|
(VOID *)UDF_TEA_IDENTIFIER,
|
||||||
|
sizeof (VolDescriptor.Unknown.Id)) != 0) {
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = FindAnchorVolumeDescriptorPointer (BlockIo, DiskIo, &AnchorPoint);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Install child handles if the Handle supports UDF/ECMA-167 volume format.
|
||||||
|
|
||||||
|
@param[in] This Calling context.
|
||||||
|
@param[in] Handle Parent Handle.
|
||||||
|
@param[in] DiskIo Parent DiskIo interface.
|
||||||
|
@param[in] DiskIo2 Parent DiskIo2 interface.
|
||||||
|
@param[in] BlockIo Parent BlockIo interface.
|
||||||
|
@param[in] BlockIo2 Parent BlockIo2 interface.
|
||||||
|
@param[in] DevicePath Parent Device Path
|
||||||
|
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS Child handle(s) was added.
|
||||||
|
@retval EFI_MEDIA_CHANGED Media changed Detected.
|
||||||
|
@retval other no child handle was added.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
PartitionInstallUdfChildHandles (
|
||||||
|
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||||
|
IN EFI_HANDLE Handle,
|
||||||
|
IN EFI_DISK_IO_PROTOCOL *DiskIo,
|
||||||
|
IN EFI_DISK_IO2_PROTOCOL *DiskIo2,
|
||||||
|
IN EFI_BLOCK_IO_PROTOCOL *BlockIo,
|
||||||
|
IN EFI_BLOCK_IO2_PROTOCOL *BlockIo2,
|
||||||
|
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
EFI_BLOCK_IO_MEDIA *Media;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *DevicePathNode;
|
||||||
|
EFI_GUID *VendorDefinedGuid;
|
||||||
|
EFI_GUID UdfDevPathGuid = EFI_UDF_DEVICE_PATH_GUID;
|
||||||
|
EFI_PARTITION_INFO_PROTOCOL PartitionInfo;
|
||||||
|
|
||||||
|
Media = BlockIo->Media;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check if UDF logical block size is multiple of underlying device block size
|
||||||
|
//
|
||||||
|
if ((UDF_LOGICAL_SECTOR_SIZE % Media->BlockSize) != 0 ||
|
||||||
|
Media->BlockSize > UDF_LOGICAL_SECTOR_SIZE) {
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
DevicePathNode = DevicePath;
|
||||||
|
while (!IsDevicePathEnd (DevicePathNode)) {
|
||||||
|
//
|
||||||
|
// Do not allow checking for UDF file systems in CDROM "El Torito"
|
||||||
|
// partitions, and skip duplicate installation of UDF file system child
|
||||||
|
// nodes.
|
||||||
|
//
|
||||||
|
if (DevicePathType (DevicePathNode) == MEDIA_DEVICE_PATH) {
|
||||||
|
if (DevicePathSubType (DevicePathNode) == MEDIA_CDROM_DP) {
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
if (DevicePathSubType (DevicePathNode) == MEDIA_VENDOR_DP) {
|
||||||
|
VendorDefinedGuid = (EFI_GUID *)((UINTN)DevicePathNode +
|
||||||
|
OFFSET_OF (VENDOR_DEVICE_PATH, Guid));
|
||||||
|
if (CompareGuid (VendorDefinedGuid, &UdfDevPathGuid)) {
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Try next device path node
|
||||||
|
//
|
||||||
|
DevicePathNode = NextDevicePathNode (DevicePathNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check if block device supports an UDF file system
|
||||||
|
//
|
||||||
|
Status = SupportUdfFileSystem (BlockIo, DiskIo);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Create Partition Info protocol for UDF file system
|
||||||
|
//
|
||||||
|
ZeroMem (&PartitionInfo, sizeof (EFI_PARTITION_INFO_PROTOCOL));
|
||||||
|
PartitionInfo.Revision = EFI_PARTITION_INFO_PROTOCOL_REVISION;
|
||||||
|
PartitionInfo.Type = PARTITION_TYPE_OTHER;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Install partition child handle for UDF file system
|
||||||
|
//
|
||||||
|
Status = PartitionInstallChildHandle (
|
||||||
|
This,
|
||||||
|
Handle,
|
||||||
|
DiskIo,
|
||||||
|
DiskIo2,
|
||||||
|
BlockIo,
|
||||||
|
BlockIo2,
|
||||||
|
DevicePath,
|
||||||
|
(EFI_DEVICE_PATH_PROTOCOL *)&gUdfDevicePath,
|
||||||
|
&PartitionInfo,
|
||||||
|
0,
|
||||||
|
Media->LastBlock,
|
||||||
|
Media->BlockSize
|
||||||
|
);
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
|
Status = EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user