From 264d16fcbf7b51c8d03d56e21cbeb5933eeb29e1 Mon Sep 17 00:00:00 2001 From: Paulo Alcantara Date: Sat, 23 Sep 2017 02:11:31 +0800 Subject: [PATCH] MdePkg: Add UDF volume structure definitions This patch adds a few more UDF volume structures in order to detect an UDF file system which is supported by current EDK2 UDF file system implementation in Partition driver. Cc: Michael D Kinney Cc: Liming Gao Cc: Laszlo Ersek Cc: Ruiyu Ni Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Paulo Alcantara Build-tested-by: Laszlo Ersek Reviewed-by: Star Zeng Tested-by: Hao Wu Build-tested-by: Star Zeng Build-tested-by: Paulo Alcantara Reviewed-by: Ruiyu Ni --- MdePkg/Include/IndustryStandard/Udf.h | 97 +++++++++++++++++++++++++-- 1 file changed, 92 insertions(+), 5 deletions(-) diff --git a/MdePkg/Include/IndustryStandard/Udf.h b/MdePkg/Include/IndustryStandard/Udf.h index 0febb4bcda..5806560aee 100644 --- a/MdePkg/Include/IndustryStandard/Udf.h +++ b/MdePkg/Include/IndustryStandard/Udf.h @@ -24,11 +24,22 @@ #define UDF_LOGICAL_SECTOR_SIZE ((UINT64)(1ULL << UDF_LOGICAL_SECTOR_SHIFT)) #define UDF_VRS_START_OFFSET ((UINT64)(16ULL << UDF_LOGICAL_SECTOR_SHIFT)) -#define _GET_TAG_ID(_Pointer) \ - (((UDF_DESCRIPTOR_TAG *)(_Pointer))->TagIdentifier) - -#define IS_AVDP(_Pointer) \ - ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 2)) +typedef enum { + UdfPrimaryVolumeDescriptor = 1, + UdfAnchorVolumeDescriptorPointer = 2, + UdfVolumeDescriptorPointer = 3, + UdfImplemenationUseVolumeDescriptor = 4, + UdfPartitionDescriptor = 5, + UdfLogicalVolumeDescriptor = 6, + UdfUnallocatedSpaceDescriptor = 7, + UdfTerminatingDescriptor = 8, + UdfLogicalVolumeIntegrityDescriptor = 9, + UdfFileSetDescriptor = 256, + UdfFileIdentifierDescriptor = 257, + UdfAllocationExtentDescriptor = 258, + UdfFileEntry = 261, + UdfExtendedFileEntry = 266, +} UDF_VOLUME_DESCRIPTOR_ID; #pragma pack(1) @@ -48,6 +59,66 @@ typedef struct { UINT32 ExtentLocation; } UDF_EXTENT_AD; +typedef struct { + UINT8 CharacterSetType; + UINT8 CharacterSetInfo[63]; +} UDF_CHAR_SPEC; + +typedef struct { + UINT8 Flags; + UINT8 Identifier[23]; + union { + // + // Domain Entity Identifier + // + struct { + UINT16 UdfRevision; + UINT8 DomainFlags; + UINT8 Reserved[5]; + } Domain; + // + // UDF Entity Identifier + // + struct { + UINT16 UdfRevision; + UINT8 OSClass; + UINT8 OSIdentifier; + UINT8 Reserved[4]; + } Entity; + // + // Implementation Entity Identifier + // + struct { + UINT8 OSClass; + UINT8 OSIdentifier; + UINT8 ImplementationUseArea[6]; + } ImplementationEntity; + // + // Application Entity Identifier + // + struct { + UINT8 ApplicationUseArea[8]; + } ApplicationEntity; + // + // Raw Identifier Suffix + // + struct { + UINT8 Data[8]; + } Raw; + } Suffix; +} UDF_ENTITY_ID; + +typedef struct { + UINT32 LogicalBlockNumber; + UINT16 PartitionReferenceNumber; +} UDF_LB_ADDR; + +typedef struct { + UINT32 ExtentLength; + UDF_LB_ADDR ExtentLocation; + UINT8 ImplementationUse[6]; +} UDF_LONG_ALLOCATION_DESCRIPTOR; + typedef struct { UDF_DESCRIPTOR_TAG DescriptorTag; UDF_EXTENT_AD MainVolumeDescriptorSequenceExtent; @@ -55,6 +126,22 @@ typedef struct { UINT8 Reserved[480]; } UDF_ANCHOR_VOLUME_DESCRIPTOR_POINTER; +typedef struct { + UDF_DESCRIPTOR_TAG DescriptorTag; + UINT32 VolumeDescriptorSequenceNumber; + UDF_CHAR_SPEC DescriptorCharacterSet; + UINT8 LogicalVolumeIdentifier[128]; + UINT32 LogicalBlockSize; + UDF_ENTITY_ID DomainIdentifier; + UDF_LONG_ALLOCATION_DESCRIPTOR LogicalVolumeContentsUse; + UINT32 MapTableLength; + UINT32 NumberOfPartitionMaps; + UDF_ENTITY_ID ImplementationIdentifier; + UINT8 ImplementationUse[128]; + UDF_EXTENT_AD IntegritySequenceExtent; + UINT8 PartitionMaps[6]; +} UDF_LOGICAL_VOLUME_DESCRIPTOR; + #pragma pack() #endif -- 2.39.2