linux/fs/udf/osta_udf.h
<<
>>
Prefs
   1/*
   2 * osta_udf.h
   3 *
   4 * This file is based on OSTA UDF(tm) 2.60 (March 1, 2005)
   5 * http://www.osta.org
   6 *
   7 * Copyright (c) 2001-2004  Ben Fennema
   8 * 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 without
  12 * modification, are permitted provided that the following conditions
  13 * are met:
  14 * 1. Redistributions of source code must retain the above copyright
  15 *    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 products
  18 *    derived from this software without specific prior written permission.
  19 *
  20 * Alternatively, this software may be distributed under the terms of the
  21 * GNU Public License ("GPL").
  22 *
  23 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  26 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
  27 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  33 * SUCH DAMAGE.
  34 */
  35
  36/**
  37 * @file
  38 * OSTA-UDF defines and structure definitions
  39 */
  40
  41#include "ecma_167.h"
  42
  43#ifndef _OSTA_UDF_H
  44#define _OSTA_UDF_H 1
  45
  46/* OSTA CS0 Charspec (UDF 2.60 2.1.2) */
  47#define UDF_CHAR_SET_TYPE               0
  48#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 0x01
  80#define DOMAIN_FLAGS_SOFT_WRITE_PROTECT 0x02
  81
  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          0xF8U
 198
 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           0xFA
 216#define ICBTAG_FILE_TYPE_MIRROR         0xFB
 217#define ICBTAG_FILE_TYPE_BITMAP         0xFC
 218
 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                0x0001
 226
 227/* Real-Time Files (UDF 2.60 6.11) */
 228#define ICBTAG_FILE_TYPE_REALTIME       0xF9U
 229
 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              0x00U
 275#define UDF_OS_CLASS_DOS                0x01U
 276#define UDF_OS_CLASS_OS2                0x02U
 277#define UDF_OS_CLASS_MAC                0x03U
 278#define UDF_OS_CLASS_UNIX               0x04U
 279#define UDF_OS_CLASS_WIN9X              0x05U
 280#define UDF_OS_CLASS_WINNT              0x06U
 281#define UDF_OS_CLASS_OS400              0x07U
 282#define UDF_OS_CLASS_BEOS               0x08U
 283#define UDF_OS_CLASS_WINCE              0x09U
 284
 285#define UDF_OS_ID_UNDEF                 0x00U
 286#define UDF_OS_ID_DOS                   0x00U
 287#define UDF_OS_ID_OS2                   0x00U
 288#define UDF_OS_ID_MAC                   0x00U
 289#define UDF_OS_ID_MAX_OSX               0x01U
 290#define UDF_OS_ID_UNIX                  0x00U
 291#define UDF_OS_ID_AIX                   0x01U
 292#define UDF_OS_ID_SOLARIS               0x02U
 293#define UDF_OS_ID_HPUX                  0x03U
 294#define UDF_OS_ID_IRIX                  0x04U
 295#define UDF_OS_ID_LINUX                 0x05U
 296#define UDF_OS_ID_MKLINUX               0x06U
 297#define UDF_OS_ID_FREEBSD               0x07U
 298#define UDF_OS_ID_NETBSD                0x08U
 299#define UDF_OS_ID_WIN9X                 0x00U
 300#define UDF_OS_ID_WINNT                 0x00U
 301#define UDF_OS_ID_OS400                 0x00U
 302#define UDF_OS_ID_BEOS                  0x00U
 303#define UDF_OS_ID_WINCE                 0x00U
 304
 305#endif /* _OSTA_UDF_H */
 306