306 lines · c
1/*2 * osta_udf.h3 *4 * This file is based on OSTA UDF(tm) 2.60 (March 1, 2005)5 * http://www.osta.org6 *7 * Copyright (c) 2001-2004 Ben Fennema8 * Copyright (c) 2017-2019 Pali Rohár <pali@kernel.org>9 * All rights reserved.10 *11 * Redistribution and use in source and binary forms, with or without12 * modification, are permitted provided that the following conditions13 * are met:14 * 1. Redistributions of source code must retain the above copyright15 * notice, this list of conditions, and the following disclaimer,16 * without modification.17 * 2. The name of the author may not be used to endorse or promote products18 * derived from this software without specific prior written permission.19 *20 * Alternatively, this software may be distributed under the terms of the21 * GNU Public License ("GPL").22 *23 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE26 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR27 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF33 * SUCH DAMAGE.34 */35 36/**37 * @file38 * OSTA-UDF defines and structure definitions39 */40 41#include "ecma_167.h"42 43#ifndef _OSTA_UDF_H44#define _OSTA_UDF_H 145 46/* OSTA CS0 Charspec (UDF 2.60 2.1.2) */47#define UDF_CHAR_SET_TYPE 048#define UDF_CHAR_SET_INFO "OSTA Compressed Unicode"49 50/* Entity Identifier (UDF 2.60 2.1.5) */51/* Identifiers (UDF 2.60 2.1.5.2) */52/* Implementation Use Extended Attribute (UDF 2.60 3.3.4.5) */53/* Virtual Allocation Table (UDF 1.50 2.2.10) */54/* Logical Volume Extended Information (UDF 1.50 Errata, DCN 5003, 3.3.4.5.1.3) */55/* OS2EA (UDF 1.50 3.3.4.5.3.1) */56/* MacUniqueIDTable (UDF 1.50 3.3.4.5.4.3) */57/* MacResourceFork (UDF 1.50 3.3.4.5.4.4) */58#define UDF_ID_DEVELOPER "*Linux UDFFS"59#define UDF_ID_COMPLIANT "*OSTA UDF Compliant"60#define UDF_ID_LV_INFO "*UDF LV Info"61#define UDF_ID_FREE_EA "*UDF FreeEASpace"62#define UDF_ID_FREE_APP_EA "*UDF FreeAppEASpace"63#define UDF_ID_DVD_CGMS "*UDF DVD CGMS Info"64#define UDF_ID_VAT_LVEXTENSION "*UDF VAT LVExtension"65#define UDF_ID_OS2_EA "*UDF OS/2 EA"66#define UDF_ID_OS2_EA_LENGTH "*UDF OS/2 EALength"67#define UDF_ID_MAC_VOLUME "*UDF Mac VolumeInfo"68#define UDF_ID_MAC_FINDER "*UDF Mac FinderInfo"69#define UDF_ID_MAC_UNIQUE "*UDF Mac UniqueIDTable"70#define UDF_ID_MAC_RESOURCE "*UDF Mac ResourceFork"71#define UDF_ID_OS400_DIRINFO "*UDF OS/400 DirInfo"72#define UDF_ID_VIRTUAL "*UDF Virtual Partition"73#define UDF_ID_SPARABLE "*UDF Sparable Partition"74#define UDF_ID_ALLOC "*UDF Virtual Alloc Tbl"75#define UDF_ID_SPARING "*UDF Sparing Table"76#define UDF_ID_METADATA "*UDF Metadata Partition"77 78/* Identifier Suffix (UDF 2.60 2.1.5.3) */79#define DOMAIN_FLAGS_HARD_WRITE_PROTECT 0x0180#define DOMAIN_FLAGS_SOFT_WRITE_PROTECT 0x0281 82struct domainIdentSuffix {83 __le16 UDFRevision;84 uint8_t domainFlags;85 uint8_t reserved[5];86} __packed;87 88struct UDFIdentSuffix {89 __le16 UDFRevision;90 uint8_t OSClass;91 uint8_t OSIdentifier;92 uint8_t reserved[4];93} __packed;94 95struct impIdentSuffix {96 uint8_t OSClass;97 uint8_t OSIdentifier;98 uint8_t impUse[6];99} __packed;100 101struct appIdentSuffix {102 uint8_t impUse[8];103} __packed;104 105/* Logical Volume Integrity Descriptor (UDF 2.60 2.2.6) */106/* Implementation Use (UDF 2.60 2.2.6.4) */107struct logicalVolIntegrityDescImpUse {108 struct regid impIdent;109 __le32 numFiles;110 __le32 numDirs;111 __le16 minUDFReadRev;112 __le16 minUDFWriteRev;113 __le16 maxUDFWriteRev;114 uint8_t impUse[];115} __packed;116 117/* Implementation Use Volume Descriptor (UDF 2.60 2.2.7) */118/* Implementation Use (UDF 2.60 2.2.7.2) */119struct impUseVolDescImpUse {120 struct charspec LVICharset;121 dstring logicalVolIdent[128];122 dstring LVInfo1[36];123 dstring LVInfo2[36];124 dstring LVInfo3[36];125 struct regid impIdent;126 uint8_t impUse[128];127} __packed;128 129struct udfPartitionMap2 {130 uint8_t partitionMapType;131 uint8_t partitionMapLength;132 uint8_t reserved1[2];133 struct regid partIdent;134 __le16 volSeqNum;135 __le16 partitionNum;136} __packed;137 138/* Virtual Partition Map (UDF 2.60 2.2.8) */139struct virtualPartitionMap {140 uint8_t partitionMapType;141 uint8_t partitionMapLength;142 uint8_t reserved1[2];143 struct regid partIdent;144 __le16 volSeqNum;145 __le16 partitionNum;146 uint8_t reserved2[24];147} __packed;148 149/* Sparable Partition Map (UDF 2.60 2.2.9) */150struct sparablePartitionMap {151 uint8_t partitionMapType;152 uint8_t partitionMapLength;153 uint8_t reserved1[2];154 struct regid partIdent;155 __le16 volSeqNum;156 __le16 partitionNum;157 __le16 packetLength;158 uint8_t numSparingTables;159 uint8_t reserved2[1];160 __le32 sizeSparingTable;161 __le32 locSparingTable[4];162} __packed;163 164/* Metadata Partition Map (UDF 2.60 2.2.10) */165struct metadataPartitionMap {166 uint8_t partitionMapType;167 uint8_t partitionMapLength;168 uint8_t reserved1[2];169 struct regid partIdent;170 __le16 volSeqNum;171 __le16 partitionNum;172 __le32 metadataFileLoc;173 __le32 metadataMirrorFileLoc;174 __le32 metadataBitmapFileLoc;175 __le32 allocUnitSize;176 __le16 alignUnitSize;177 uint8_t flags;178 uint8_t reserved2[5];179} __packed;180 181/* Virtual Allocation Table (UDF 2.60 2.2.11) */182struct virtualAllocationTable20 {183 __le16 lengthHeader;184 __le16 lengthImpUse;185 dstring logicalVolIdent[128];186 __le32 previousVATICBLoc;187 __le32 numFiles;188 __le32 numDirs;189 __le16 minUDFReadRev;190 __le16 minUDFWriteRev;191 __le16 maxUDFWriteRev;192 __le16 reserved;193 uint8_t impUse[];194 /* __le32 vatEntry[]; */195} __packed;196 197#define ICBTAG_FILE_TYPE_VAT20 0xF8U198 199/* Sparing Table (UDF 2.60 2.2.12) */200struct sparingEntry {201 __le32 origLocation;202 __le32 mappedLocation;203} __packed;204 205struct sparingTable {206 struct tag descTag;207 struct regid sparingIdent;208 __le16 reallocationTableLen;209 __le16 reserved;210 __le32 sequenceNum;211 struct sparingEntry mapEntry[];212} __packed;213 214/* Metadata File (and Metadata Mirror File) (UDF 2.60 2.2.13.1) */215#define ICBTAG_FILE_TYPE_MAIN 0xFA216#define ICBTAG_FILE_TYPE_MIRROR 0xFB217#define ICBTAG_FILE_TYPE_BITMAP 0xFC218 219/* struct long_ad ICB - ADImpUse (UDF 2.60 2.2.4.3) */220struct allocDescImpUse {221 __le16 flags;222 uint8_t impUse[4];223} __packed;224 225#define AD_IU_EXT_ERASED 0x0001226 227/* Real-Time Files (UDF 2.60 6.11) */228#define ICBTAG_FILE_TYPE_REALTIME 0xF9U229 230/* Implementation Use Extended Attribute (UDF 2.60 3.3.4.5) */231/* FreeEASpace (UDF 2.60 3.3.4.5.1.1) */232struct freeEaSpace {233 __le16 headerChecksum;234 uint8_t freeEASpace[];235} __packed;236 237/* DVD Copyright Management Information (UDF 2.60 3.3.4.5.1.2) */238struct DVDCopyrightImpUse {239 __le16 headerChecksum;240 uint8_t CGMSInfo;241 uint8_t dataType;242 uint8_t protectionSystemInfo[4];243} __packed;244 245/* Logical Volume Extended Information (UDF 1.50 Errata, DCN 5003, 3.3.4.5.1.3) */246struct LVExtensionEA {247 __le16 headerChecksum;248 __le64 verificationID;249 __le32 numFiles;250 __le32 numDirs;251 dstring logicalVolIdent[128];252} __packed;253 254/* Application Use Extended Attribute (UDF 2.60 3.3.4.6) */255/* FreeAppEASpace (UDF 2.60 3.3.4.6.1) */256struct freeAppEASpace {257 __le16 headerChecksum;258 uint8_t freeEASpace[];259} __packed;260 261/* UDF Defined System Stream (UDF 2.60 3.3.7) */262#define UDF_ID_UNIQUE_ID "*UDF Unique ID Mapping Data"263#define UDF_ID_NON_ALLOC "*UDF Non-Allocatable Space"264#define UDF_ID_POWER_CAL "*UDF Power Cal Table"265#define UDF_ID_BACKUP "*UDF Backup"266 267/* UDF Defined Non-System Streams (UDF 2.60 3.3.8) */268#define UDF_ID_MAC_RESOURCE_FORK_STREAM "*UDF Macintosh Resource Fork"269/* #define UDF_ID_OS2_EA "*UDF OS/2 EA" */270#define UDF_ID_NT_ACL "*UDF NT ACL"271#define UDF_ID_UNIX_ACL "*UDF UNIX ACL"272 273/* Operating System Identifiers (UDF 2.60 6.3) */274#define UDF_OS_CLASS_UNDEF 0x00U275#define UDF_OS_CLASS_DOS 0x01U276#define UDF_OS_CLASS_OS2 0x02U277#define UDF_OS_CLASS_MAC 0x03U278#define UDF_OS_CLASS_UNIX 0x04U279#define UDF_OS_CLASS_WIN9X 0x05U280#define UDF_OS_CLASS_WINNT 0x06U281#define UDF_OS_CLASS_OS400 0x07U282#define UDF_OS_CLASS_BEOS 0x08U283#define UDF_OS_CLASS_WINCE 0x09U284 285#define UDF_OS_ID_UNDEF 0x00U286#define UDF_OS_ID_DOS 0x00U287#define UDF_OS_ID_OS2 0x00U288#define UDF_OS_ID_MAC 0x00U289#define UDF_OS_ID_MAX_OSX 0x01U290#define UDF_OS_ID_UNIX 0x00U291#define UDF_OS_ID_AIX 0x01U292#define UDF_OS_ID_SOLARIS 0x02U293#define UDF_OS_ID_HPUX 0x03U294#define UDF_OS_ID_IRIX 0x04U295#define UDF_OS_ID_LINUX 0x05U296#define UDF_OS_ID_MKLINUX 0x06U297#define UDF_OS_ID_FREEBSD 0x07U298#define UDF_OS_ID_NETBSD 0x08U299#define UDF_OS_ID_WIN9X 0x00U300#define UDF_OS_ID_WINNT 0x00U301#define UDF_OS_ID_OS400 0x00U302#define UDF_OS_ID_BEOS 0x00U303#define UDF_OS_ID_WINCE 0x00U304 305#endif /* _OSTA_UDF_H */306