| /** @file | |
| OSTA Universal Disk Format (UDF) definitions. | |
| Copyright (C) 2014-2017 Paulo Alcantara <pcacjr@zytor.com> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef __UDF_H__ | |
| #define __UDF_H__ | |
| #define UDF_BEA_IDENTIFIER "BEA01" | |
| #define UDF_NSR2_IDENTIFIER "NSR02" | |
| #define UDF_NSR3_IDENTIFIER "NSR03" | |
| #define UDF_TEA_IDENTIFIER "TEA01" | |
| #define UDF_LOGICAL_SECTOR_SHIFT 11 | |
| #define UDF_LOGICAL_SECTOR_SIZE ((UINT64)(1ULL << UDF_LOGICAL_SECTOR_SHIFT)) | |
| #define UDF_VRS_START_OFFSET ((UINT64)(16ULL << UDF_LOGICAL_SECTOR_SHIFT)) | |
| 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) | |
| typedef struct { | |
| UINT16 TagIdentifier; | |
| UINT16 DescriptorVersion; | |
| UINT8 TagChecksum; | |
| UINT8 Reserved; | |
| UINT16 TagSerialNumber; | |
| UINT16 DescriptorCRC; | |
| UINT16 DescriptorCRCLength; | |
| UINT32 TagLocation; | |
| } UDF_DESCRIPTOR_TAG; | |
| typedef struct { | |
| UINT32 ExtentLength; | |
| 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; | |
| UDF_EXTENT_AD ReserveVolumeDescriptorSequenceExtent; | |
| 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 |