11da177e4SLinus Torvalds /* 21da177e4SLinus Torvalds * osta_udf.h 31da177e4SLinus Torvalds * 461464467SPali Rohár * This file is based on OSTA UDF(tm) 2.60 (March 1, 2005) 51da177e4SLinus Torvalds * http://www.osta.org 61da177e4SLinus Torvalds * 761464467SPali Rohár * Copyright (c) 2001-2004 Ben Fennema 8149ed3d4SPali Rohár * Copyright (c) 2017-2019 Pali Rohár <pali@kernel.org> 91da177e4SLinus Torvalds * All rights reserved. 101da177e4SLinus Torvalds * 111da177e4SLinus Torvalds * Redistribution and use in source and binary forms, with or without 121da177e4SLinus Torvalds * modification, are permitted provided that the following conditions 131da177e4SLinus Torvalds * are met: 141da177e4SLinus Torvalds * 1. Redistributions of source code must retain the above copyright 151da177e4SLinus Torvalds * notice, this list of conditions, and the following disclaimer, 161da177e4SLinus Torvalds * without modification. 171da177e4SLinus Torvalds * 2. The name of the author may not be used to endorse or promote products 181da177e4SLinus Torvalds * derived from this software without specific prior written permission. 191da177e4SLinus Torvalds * 201da177e4SLinus Torvalds * Alternatively, this software may be distributed under the terms of the 211da177e4SLinus Torvalds * GNU Public License ("GPL"). 221da177e4SLinus Torvalds * 231da177e4SLinus Torvalds * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 241da177e4SLinus Torvalds * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 251da177e4SLinus Torvalds * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 261da177e4SLinus Torvalds * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 271da177e4SLinus Torvalds * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 281da177e4SLinus Torvalds * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 291da177e4SLinus Torvalds * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 301da177e4SLinus Torvalds * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 311da177e4SLinus Torvalds * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 321da177e4SLinus Torvalds * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 331da177e4SLinus Torvalds * SUCH DAMAGE. 341da177e4SLinus Torvalds */ 351da177e4SLinus Torvalds 3661464467SPali Rohár /** 3761464467SPali Rohár * @file 3861464467SPali Rohár * OSTA-UDF defines and structure definitions 3961464467SPali Rohár */ 4061464467SPali Rohár 411da177e4SLinus Torvalds #include "ecma_167.h" 421da177e4SLinus Torvalds 431da177e4SLinus Torvalds #ifndef _OSTA_UDF_H 441da177e4SLinus Torvalds #define _OSTA_UDF_H 1 451da177e4SLinus Torvalds 4661464467SPali Rohár /* OSTA CS0 Charspec (UDF 2.60 2.1.2) */ 471da177e4SLinus Torvalds #define UDF_CHAR_SET_TYPE 0 481da177e4SLinus Torvalds #define UDF_CHAR_SET_INFO "OSTA Compressed Unicode" 491da177e4SLinus Torvalds 5061464467SPali Rohár /* Entity Identifier (UDF 2.60 2.1.5) */ 5161464467SPali Rohár /* Identifiers (UDF 2.60 2.1.5.2) */ 5261464467SPali Rohár /* Implementation Use Extended Attribute (UDF 2.60 3.3.4.5) */ 5361464467SPali Rohár /* Virtual Allocation Table (UDF 1.50 2.2.10) */ 5461464467SPali Rohár /* Logical Volume Extended Information (UDF 1.50 Errata, DCN 5003, 3.3.4.5.1.3) */ 5561464467SPali Rohár /* OS2EA (UDF 1.50 3.3.4.5.3.1) */ 5661464467SPali Rohár /* MacUniqueIDTable (UDF 1.50 3.3.4.5.4.3) */ 5761464467SPali Rohár /* MacResourceFork (UDF 1.50 3.3.4.5.4.4) */ 581da177e4SLinus Torvalds #define UDF_ID_DEVELOPER "*Linux UDFFS" 591da177e4SLinus Torvalds #define UDF_ID_COMPLIANT "*OSTA UDF Compliant" 601da177e4SLinus Torvalds #define UDF_ID_LV_INFO "*UDF LV Info" 611da177e4SLinus Torvalds #define UDF_ID_FREE_EA "*UDF FreeEASpace" 621da177e4SLinus Torvalds #define UDF_ID_FREE_APP_EA "*UDF FreeAppEASpace" 631da177e4SLinus Torvalds #define UDF_ID_DVD_CGMS "*UDF DVD CGMS Info" 6461464467SPali Rohár #define UDF_ID_VAT_LVEXTENSION "*UDF VAT LVExtension" 651da177e4SLinus Torvalds #define UDF_ID_OS2_EA "*UDF OS/2 EA" 661da177e4SLinus Torvalds #define UDF_ID_OS2_EA_LENGTH "*UDF OS/2 EALength" 671da177e4SLinus Torvalds #define UDF_ID_MAC_VOLUME "*UDF Mac VolumeInfo" 681da177e4SLinus Torvalds #define UDF_ID_MAC_FINDER "*UDF Mac FinderInfo" 691da177e4SLinus Torvalds #define UDF_ID_MAC_UNIQUE "*UDF Mac UniqueIDTable" 701da177e4SLinus Torvalds #define UDF_ID_MAC_RESOURCE "*UDF Mac ResourceFork" 7161464467SPali Rohár #define UDF_ID_OS400_DIRINFO "*UDF OS/400 DirInfo" 721da177e4SLinus Torvalds #define UDF_ID_VIRTUAL "*UDF Virtual Partition" 731da177e4SLinus Torvalds #define UDF_ID_SPARABLE "*UDF Sparable Partition" 741da177e4SLinus Torvalds #define UDF_ID_ALLOC "*UDF Virtual Alloc Tbl" 751da177e4SLinus Torvalds #define UDF_ID_SPARING "*UDF Sparing Table" 761da177e4SLinus Torvalds #define UDF_ID_METADATA "*UDF Metadata Partition" 771da177e4SLinus Torvalds 7861464467SPali Rohár /* Identifier Suffix (UDF 2.60 2.1.5.3) */ 79871b9b14SPali Rohár #define DOMAIN_FLAGS_HARD_WRITE_PROTECT 0x01 80871b9b14SPali Rohár #define DOMAIN_FLAGS_SOFT_WRITE_PROTECT 0x02 81871b9b14SPali Rohár 82871b9b14SPali Rohár struct domainIdentSuffix { 83871b9b14SPali Rohár __le16 UDFRevision; 84871b9b14SPali Rohár uint8_t domainFlags; 85871b9b14SPali Rohár uint8_t reserved[5]; 86871b9b14SPali Rohár } __packed; 871da177e4SLinus Torvalds 88cb00ea35SCyrill Gorcunov struct UDFIdentSuffix { 891da177e4SLinus Torvalds __le16 UDFRevision; 901da177e4SLinus Torvalds uint8_t OSClass; 911da177e4SLinus Torvalds uint8_t OSIdentifier; 921da177e4SLinus Torvalds uint8_t reserved[4]; 9375f27138SFabian Frederick } __packed; 941da177e4SLinus Torvalds 95cb00ea35SCyrill Gorcunov struct impIdentSuffix { 961da177e4SLinus Torvalds uint8_t OSClass; 971da177e4SLinus Torvalds uint8_t OSIdentifier; 9861464467SPali Rohár uint8_t impUse[6]; 9975f27138SFabian Frederick } __packed; 1001da177e4SLinus Torvalds 101cb00ea35SCyrill Gorcunov struct appIdentSuffix { 1021da177e4SLinus Torvalds uint8_t impUse[8]; 10375f27138SFabian Frederick } __packed; 1041da177e4SLinus Torvalds 10561464467SPali Rohár /* Logical Volume Integrity Descriptor (UDF 2.60 2.2.6) */ 10661464467SPali Rohár /* Implementation Use (UDF 2.60 2.2.6.4) */ 107cb00ea35SCyrill Gorcunov struct logicalVolIntegrityDescImpUse { 1085ca4e4beSPekka Enberg struct regid impIdent; 1091da177e4SLinus Torvalds __le32 numFiles; 1101da177e4SLinus Torvalds __le32 numDirs; 1111da177e4SLinus Torvalds __le16 minUDFReadRev; 1121da177e4SLinus Torvalds __le16 minUDFWriteRev; 1131da177e4SLinus Torvalds __le16 maxUDFWriteRev; 114*b3c8c980SJan Kara uint8_t impUse[]; 11575f27138SFabian Frederick } __packed; 1161da177e4SLinus Torvalds 11761464467SPali Rohár /* Implementation Use Volume Descriptor (UDF 2.60 2.2.7) */ 11861464467SPali Rohár /* Implementation Use (UDF 2.60 2.2.7.2) */ 119cb00ea35SCyrill Gorcunov struct impUseVolDescImpUse { 1205ca4e4beSPekka Enberg struct charspec LVICharset; 1211da177e4SLinus Torvalds dstring logicalVolIdent[128]; 1221da177e4SLinus Torvalds dstring LVInfo1[36]; 1231da177e4SLinus Torvalds dstring LVInfo2[36]; 1241da177e4SLinus Torvalds dstring LVInfo3[36]; 1255ca4e4beSPekka Enberg struct regid impIdent; 1261da177e4SLinus Torvalds uint8_t impUse[128]; 12775f27138SFabian Frederick } __packed; 1281da177e4SLinus Torvalds 129cb00ea35SCyrill Gorcunov struct udfPartitionMap2 { 1301da177e4SLinus Torvalds uint8_t partitionMapType; 1311da177e4SLinus Torvalds uint8_t partitionMapLength; 1321da177e4SLinus Torvalds uint8_t reserved1[2]; 1335ca4e4beSPekka Enberg struct regid partIdent; 1341da177e4SLinus Torvalds __le16 volSeqNum; 1351da177e4SLinus Torvalds __le16 partitionNum; 13675f27138SFabian Frederick } __packed; 1371da177e4SLinus Torvalds 13861464467SPali Rohár /* Virtual Partition Map (UDF 2.60 2.2.8) */ 139cb00ea35SCyrill Gorcunov struct virtualPartitionMap { 1401da177e4SLinus Torvalds uint8_t partitionMapType; 1411da177e4SLinus Torvalds uint8_t partitionMapLength; 1421da177e4SLinus Torvalds uint8_t reserved1[2]; 1435ca4e4beSPekka Enberg struct regid partIdent; 1441da177e4SLinus Torvalds __le16 volSeqNum; 1451da177e4SLinus Torvalds __le16 partitionNum; 1461da177e4SLinus Torvalds uint8_t reserved2[24]; 14775f27138SFabian Frederick } __packed; 1481da177e4SLinus Torvalds 14961464467SPali Rohár /* Sparable Partition Map (UDF 2.60 2.2.9) */ 150cb00ea35SCyrill Gorcunov struct sparablePartitionMap { 1511da177e4SLinus Torvalds uint8_t partitionMapType; 1521da177e4SLinus Torvalds uint8_t partitionMapLength; 1531da177e4SLinus Torvalds uint8_t reserved1[2]; 1545ca4e4beSPekka Enberg struct regid partIdent; 1551da177e4SLinus Torvalds __le16 volSeqNum; 1561da177e4SLinus Torvalds __le16 partitionNum; 1571da177e4SLinus Torvalds __le16 packetLength; 1581da177e4SLinus Torvalds uint8_t numSparingTables; 1591da177e4SLinus Torvalds uint8_t reserved2[1]; 1601da177e4SLinus Torvalds __le32 sizeSparingTable; 1611da177e4SLinus Torvalds __le32 locSparingTable[4]; 16275f27138SFabian Frederick } __packed; 1631da177e4SLinus Torvalds 16461464467SPali Rohár /* Metadata Partition Map (UDF 2.60 2.2.10) */ 165cb00ea35SCyrill Gorcunov struct metadataPartitionMap { 1661da177e4SLinus Torvalds uint8_t partitionMapType; 1671da177e4SLinus Torvalds uint8_t partitionMapLength; 1681da177e4SLinus Torvalds uint8_t reserved1[2]; 1695ca4e4beSPekka Enberg struct regid partIdent; 1701da177e4SLinus Torvalds __le16 volSeqNum; 1711da177e4SLinus Torvalds __le16 partitionNum; 1721da177e4SLinus Torvalds __le32 metadataFileLoc; 1731da177e4SLinus Torvalds __le32 metadataMirrorFileLoc; 1741da177e4SLinus Torvalds __le32 metadataBitmapFileLoc; 1751da177e4SLinus Torvalds __le32 allocUnitSize; 1761da177e4SLinus Torvalds __le16 alignUnitSize; 1771da177e4SLinus Torvalds uint8_t flags; 1781da177e4SLinus Torvalds uint8_t reserved2[5]; 17975f27138SFabian Frederick } __packed; 1801da177e4SLinus Torvalds 18161464467SPali Rohár /* Virtual Allocation Table (UDF 2.60 2.2.11) */ 182cb00ea35SCyrill Gorcunov struct virtualAllocationTable20 { 1831da177e4SLinus Torvalds __le16 lengthHeader; 1841da177e4SLinus Torvalds __le16 lengthImpUse; 1851da177e4SLinus Torvalds dstring logicalVolIdent[128]; 1861da177e4SLinus Torvalds __le32 previousVATICBLoc; 1871da177e4SLinus Torvalds __le32 numFiles; 1881da177e4SLinus Torvalds __le32 numDirs; 18961464467SPali Rohár __le16 minUDFReadRev; 19061464467SPali Rohár __le16 minUDFWriteRev; 19161464467SPali Rohár __le16 maxUDFWriteRev; 1921da177e4SLinus Torvalds __le16 reserved; 193*b3c8c980SJan Kara uint8_t impUse[]; 194*b3c8c980SJan Kara /* __le32 vatEntry[]; */ 19575f27138SFabian Frederick } __packed; 1961da177e4SLinus Torvalds 1971da177e4SLinus Torvalds #define ICBTAG_FILE_TYPE_VAT20 0xF8U 1981da177e4SLinus Torvalds 19961464467SPali Rohár /* Sparing Table (UDF 2.60 2.2.12) */ 200cb00ea35SCyrill Gorcunov struct sparingEntry { 2011da177e4SLinus Torvalds __le32 origLocation; 2021da177e4SLinus Torvalds __le32 mappedLocation; 20375f27138SFabian Frederick } __packed; 2041da177e4SLinus Torvalds 205cb00ea35SCyrill Gorcunov struct sparingTable { 2065ca4e4beSPekka Enberg struct tag descTag; 2075ca4e4beSPekka Enberg struct regid sparingIdent; 2081da177e4SLinus Torvalds __le16 reallocationTableLen; 2091da177e4SLinus Torvalds __le16 reserved; 2101da177e4SLinus Torvalds __le32 sequenceNum; 211*b3c8c980SJan Kara struct sparingEntry mapEntry[]; 21275f27138SFabian Frederick } __packed; 2131da177e4SLinus Torvalds 21461464467SPali Rohár /* Metadata File (and Metadata Mirror File) (UDF 2.60 2.2.13.1) */ 2151da177e4SLinus Torvalds #define ICBTAG_FILE_TYPE_MAIN 0xFA 2161da177e4SLinus Torvalds #define ICBTAG_FILE_TYPE_MIRROR 0xFB 2171da177e4SLinus Torvalds #define ICBTAG_FILE_TYPE_BITMAP 0xFC 2181da177e4SLinus Torvalds 219dcec10a5SRandy Dunlap /* struct long_ad ICB - ADImpUse (UDF 2.60 2.2.4.3) */ 220cb00ea35SCyrill Gorcunov struct allocDescImpUse { 2211da177e4SLinus Torvalds __le16 flags; 2221da177e4SLinus Torvalds uint8_t impUse[4]; 22375f27138SFabian Frederick } __packed; 2241da177e4SLinus Torvalds 2251da177e4SLinus Torvalds #define AD_IU_EXT_ERASED 0x0001 2261da177e4SLinus Torvalds 22761464467SPali Rohár /* Real-Time Files (UDF 2.60 6.11) */ 2281da177e4SLinus Torvalds #define ICBTAG_FILE_TYPE_REALTIME 0xF9U 2291da177e4SLinus Torvalds 23061464467SPali Rohár /* Implementation Use Extended Attribute (UDF 2.60 3.3.4.5) */ 23161464467SPali Rohár /* FreeEASpace (UDF 2.60 3.3.4.5.1.1) */ 232cb00ea35SCyrill Gorcunov struct freeEaSpace { 2331da177e4SLinus Torvalds __le16 headerChecksum; 234*b3c8c980SJan Kara uint8_t freeEASpace[]; 23575f27138SFabian Frederick } __packed; 2361da177e4SLinus Torvalds 23761464467SPali Rohár /* DVD Copyright Management Information (UDF 2.60 3.3.4.5.1.2) */ 238cb00ea35SCyrill Gorcunov struct DVDCopyrightImpUse { 2391da177e4SLinus Torvalds __le16 headerChecksum; 2401da177e4SLinus Torvalds uint8_t CGMSInfo; 2411da177e4SLinus Torvalds uint8_t dataType; 2421da177e4SLinus Torvalds uint8_t protectionSystemInfo[4]; 24375f27138SFabian Frederick } __packed; 2441da177e4SLinus Torvalds 24561464467SPali Rohár /* Logical Volume Extended Information (UDF 1.50 Errata, DCN 5003, 3.3.4.5.1.3) */ 24661464467SPali Rohár struct LVExtensionEA { 24761464467SPali Rohár __le16 headerChecksum; 24861464467SPali Rohár __le64 verificationID; 24961464467SPali Rohár __le32 numFiles; 25061464467SPali Rohár __le32 numDirs; 25161464467SPali Rohár dstring logicalVolIdent[128]; 25261464467SPali Rohár } __packed; 25361464467SPali Rohár 25461464467SPali Rohár /* Application Use Extended Attribute (UDF 2.60 3.3.4.6) */ 25561464467SPali Rohár /* FreeAppEASpace (UDF 2.60 3.3.4.6.1) */ 256cb00ea35SCyrill Gorcunov struct freeAppEASpace { 2571da177e4SLinus Torvalds __le16 headerChecksum; 258*b3c8c980SJan Kara uint8_t freeEASpace[]; 25975f27138SFabian Frederick } __packed; 2601da177e4SLinus Torvalds 26161464467SPali Rohár /* UDF Defined System Stream (UDF 2.60 3.3.7) */ 2621da177e4SLinus Torvalds #define UDF_ID_UNIQUE_ID "*UDF Unique ID Mapping Data" 2631da177e4SLinus Torvalds #define UDF_ID_NON_ALLOC "*UDF Non-Allocatable Space" 2641da177e4SLinus Torvalds #define UDF_ID_POWER_CAL "*UDF Power Cal Table" 2651da177e4SLinus Torvalds #define UDF_ID_BACKUP "*UDF Backup" 2661da177e4SLinus Torvalds 26761464467SPali Rohár /* UDF Defined Non-System Streams (UDF 2.60 3.3.8) */ 26861464467SPali Rohár #define UDF_ID_MAC_RESOURCE_FORK_STREAM "*UDF Macintosh Resource Fork" 26961464467SPali Rohár /* #define UDF_ID_OS2_EA "*UDF OS/2 EA" */ 27061464467SPali Rohár #define UDF_ID_NT_ACL "*UDF NT ACL" 27161464467SPali Rohár #define UDF_ID_UNIX_ACL "*UDF UNIX ACL" 27261464467SPali Rohár 27361464467SPali Rohár /* Operating System Identifiers (UDF 2.60 6.3) */ 2741da177e4SLinus Torvalds #define UDF_OS_CLASS_UNDEF 0x00U 2751da177e4SLinus Torvalds #define UDF_OS_CLASS_DOS 0x01U 2761da177e4SLinus Torvalds #define UDF_OS_CLASS_OS2 0x02U 2771da177e4SLinus Torvalds #define UDF_OS_CLASS_MAC 0x03U 2781da177e4SLinus Torvalds #define UDF_OS_CLASS_UNIX 0x04U 2791da177e4SLinus Torvalds #define UDF_OS_CLASS_WIN9X 0x05U 2801da177e4SLinus Torvalds #define UDF_OS_CLASS_WINNT 0x06U 2811da177e4SLinus Torvalds #define UDF_OS_CLASS_OS400 0x07U 2821da177e4SLinus Torvalds #define UDF_OS_CLASS_BEOS 0x08U 2831da177e4SLinus Torvalds #define UDF_OS_CLASS_WINCE 0x09U 2841da177e4SLinus Torvalds 2851da177e4SLinus Torvalds #define UDF_OS_ID_UNDEF 0x00U 2861da177e4SLinus Torvalds #define UDF_OS_ID_DOS 0x00U 2871da177e4SLinus Torvalds #define UDF_OS_ID_OS2 0x00U 2881da177e4SLinus Torvalds #define UDF_OS_ID_MAC 0x00U 2891da177e4SLinus Torvalds #define UDF_OS_ID_MAX_OSX 0x01U 2901da177e4SLinus Torvalds #define UDF_OS_ID_UNIX 0x00U 2911da177e4SLinus Torvalds #define UDF_OS_ID_AIX 0x01U 2921da177e4SLinus Torvalds #define UDF_OS_ID_SOLARIS 0x02U 2931da177e4SLinus Torvalds #define UDF_OS_ID_HPUX 0x03U 2941da177e4SLinus Torvalds #define UDF_OS_ID_IRIX 0x04U 2951da177e4SLinus Torvalds #define UDF_OS_ID_LINUX 0x05U 2961da177e4SLinus Torvalds #define UDF_OS_ID_MKLINUX 0x06U 2971da177e4SLinus Torvalds #define UDF_OS_ID_FREEBSD 0x07U 29861464467SPali Rohár #define UDF_OS_ID_NETBSD 0x08U 2991da177e4SLinus Torvalds #define UDF_OS_ID_WIN9X 0x00U 3001da177e4SLinus Torvalds #define UDF_OS_ID_WINNT 0x00U 3011da177e4SLinus Torvalds #define UDF_OS_ID_OS400 0x00U 3021da177e4SLinus Torvalds #define UDF_OS_ID_BEOS 0x00U 3031da177e4SLinus Torvalds #define UDF_OS_ID_WINCE 0x00U 3041da177e4SLinus Torvalds 3051da177e4SLinus Torvalds #endif /* _OSTA_UDF_H */ 306