11da177e4SLinus Torvalds /* 21da177e4SLinus Torvalds * ecma_167.h 31da177e4SLinus Torvalds * 41da177e4SLinus Torvalds * This file is based on ECMA-167 3rd edition (June 1997) 5248727a4SAlexander A. Klimov * https://www.ecma.ch 61da177e4SLinus Torvalds * 761464467SPali Rohár * Copyright (c) 2001-2002 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 * ECMA-167r3 defines and structure definitions 3961464467SPali Rohár */ 4061464467SPali Rohár 411da177e4SLinus Torvalds #include <linux/types.h> 421da177e4SLinus Torvalds 431da177e4SLinus Torvalds #ifndef _ECMA_167_H 441da177e4SLinus Torvalds #define _ECMA_167_H 1 451da177e4SLinus Torvalds 4661464467SPali Rohár /* Character sets and coding - d-characters (ECMA 167r3 1/7.2) */ 4761464467SPali Rohár typedef uint8_t dchars; 4861464467SPali Rohár 491da177e4SLinus Torvalds /* Character set specification (ECMA 167r3 1/7.2.1) */ 505ca4e4beSPekka Enberg struct charspec { 511da177e4SLinus Torvalds uint8_t charSetType; 521da177e4SLinus Torvalds uint8_t charSetInfo[63]; 5375f27138SFabian Frederick } __packed; 541da177e4SLinus Torvalds 551da177e4SLinus Torvalds /* Character Set Type (ECMA 167r3 1/7.2.1.1) */ 561da177e4SLinus Torvalds #define CHARSPEC_TYPE_CS0 0x00 /* (1/7.2.2) */ 571da177e4SLinus Torvalds #define CHARSPEC_TYPE_CS1 0x01 /* (1/7.2.3) */ 581da177e4SLinus Torvalds #define CHARSPEC_TYPE_CS2 0x02 /* (1/7.2.4) */ 591da177e4SLinus Torvalds #define CHARSPEC_TYPE_CS3 0x03 /* (1/7.2.5) */ 601da177e4SLinus Torvalds #define CHARSPEC_TYPE_CS4 0x04 /* (1/7.2.6) */ 611da177e4SLinus Torvalds #define CHARSPEC_TYPE_CS5 0x05 /* (1/7.2.7) */ 621da177e4SLinus Torvalds #define CHARSPEC_TYPE_CS6 0x06 /* (1/7.2.8) */ 631da177e4SLinus Torvalds #define CHARSPEC_TYPE_CS7 0x07 /* (1/7.2.9) */ 641da177e4SLinus Torvalds #define CHARSPEC_TYPE_CS8 0x08 /* (1/7.2.10) */ 651da177e4SLinus Torvalds 6661464467SPali Rohár /* Fixed-length character fields - d-string (EMCA 167r3 1/7.2.12) */ 671da177e4SLinus Torvalds typedef uint8_t dstring; 681da177e4SLinus Torvalds 691da177e4SLinus Torvalds /* Timestamp (ECMA 167r3 1/7.3) */ 705ca4e4beSPekka Enberg struct timestamp { 711da177e4SLinus Torvalds __le16 typeAndTimezone; 721da177e4SLinus Torvalds __le16 year; 731da177e4SLinus Torvalds uint8_t month; 741da177e4SLinus Torvalds uint8_t day; 751da177e4SLinus Torvalds uint8_t hour; 761da177e4SLinus Torvalds uint8_t minute; 771da177e4SLinus Torvalds uint8_t second; 781da177e4SLinus Torvalds uint8_t centiseconds; 791da177e4SLinus Torvalds uint8_t hundredsOfMicroseconds; 801da177e4SLinus Torvalds uint8_t microseconds; 8175f27138SFabian Frederick } __packed; 821da177e4SLinus Torvalds 831da177e4SLinus Torvalds /* Type and Time Zone (ECMA 167r3 1/7.3.1) */ 841da177e4SLinus Torvalds #define TIMESTAMP_TYPE_MASK 0xF000 851da177e4SLinus Torvalds #define TIMESTAMP_TYPE_CUT 0x0000 861da177e4SLinus Torvalds #define TIMESTAMP_TYPE_LOCAL 0x1000 871da177e4SLinus Torvalds #define TIMESTAMP_TYPE_AGREEMENT 0x2000 881da177e4SLinus Torvalds #define TIMESTAMP_TIMEZONE_MASK 0x0FFF 891da177e4SLinus Torvalds 901da177e4SLinus Torvalds /* Entity identifier (ECMA 167r3 1/7.4) */ 915ca4e4beSPekka Enberg struct regid { 921da177e4SLinus Torvalds uint8_t flags; 931da177e4SLinus Torvalds uint8_t ident[23]; 941da177e4SLinus Torvalds uint8_t identSuffix[8]; 9575f27138SFabian Frederick } __packed; 961da177e4SLinus Torvalds 971da177e4SLinus Torvalds /* Flags (ECMA 167r3 1/7.4.1) */ 9849be68c4SPali Rohár #define ENTITYID_FLAGS_DIRTY 0x01 9949be68c4SPali Rohár #define ENTITYID_FLAGS_PROTECTED 0x02 1001da177e4SLinus Torvalds 1011da177e4SLinus Torvalds /* Volume Structure Descriptor (ECMA 167r3 2/9.1) */ 1021da177e4SLinus Torvalds #define VSD_STD_ID_LEN 5 103cb00ea35SCyrill Gorcunov struct volStructDesc { 1041da177e4SLinus Torvalds uint8_t structType; 1051da177e4SLinus Torvalds uint8_t stdIdent[VSD_STD_ID_LEN]; 1061da177e4SLinus Torvalds uint8_t structVersion; 1071da177e4SLinus Torvalds uint8_t structData[2041]; 10875f27138SFabian Frederick } __packed; 1091da177e4SLinus Torvalds 1101da177e4SLinus Torvalds /* Standard Identifier (EMCA 167r2 2/9.1.2) */ 1111da177e4SLinus Torvalds #define VSD_STD_ID_NSR02 "NSR02" /* (3/9.1) */ 1121da177e4SLinus Torvalds 1131da177e4SLinus Torvalds /* Standard Identifier (ECMA 167r3 2/9.1.2) */ 1141da177e4SLinus Torvalds #define VSD_STD_ID_BEA01 "BEA01" /* (2/9.2) */ 1151da177e4SLinus Torvalds #define VSD_STD_ID_BOOT2 "BOOT2" /* (2/9.4) */ 1161da177e4SLinus Torvalds #define VSD_STD_ID_CD001 "CD001" /* (ECMA-119) */ 1171da177e4SLinus Torvalds #define VSD_STD_ID_CDW02 "CDW02" /* (ECMA-168) */ 1181da177e4SLinus Torvalds #define VSD_STD_ID_NSR03 "NSR03" /* (3/9.1) */ 1191da177e4SLinus Torvalds #define VSD_STD_ID_TEA01 "TEA01" /* (2/9.3) */ 1201da177e4SLinus Torvalds 1211da177e4SLinus Torvalds /* Beginning Extended Area Descriptor (ECMA 167r3 2/9.2) */ 122cb00ea35SCyrill Gorcunov struct beginningExtendedAreaDesc { 1231da177e4SLinus Torvalds uint8_t structType; 1241da177e4SLinus Torvalds uint8_t stdIdent[VSD_STD_ID_LEN]; 1251da177e4SLinus Torvalds uint8_t structVersion; 1261da177e4SLinus Torvalds uint8_t structData[2041]; 12775f27138SFabian Frederick } __packed; 1281da177e4SLinus Torvalds 1291da177e4SLinus Torvalds /* Terminating Extended Area Descriptor (ECMA 167r3 2/9.3) */ 130cb00ea35SCyrill Gorcunov struct terminatingExtendedAreaDesc { 1311da177e4SLinus Torvalds uint8_t structType; 1321da177e4SLinus Torvalds uint8_t stdIdent[VSD_STD_ID_LEN]; 1331da177e4SLinus Torvalds uint8_t structVersion; 1341da177e4SLinus Torvalds uint8_t structData[2041]; 13575f27138SFabian Frederick } __packed; 1361da177e4SLinus Torvalds 1371da177e4SLinus Torvalds /* Boot Descriptor (ECMA 167r3 2/9.4) */ 138cb00ea35SCyrill Gorcunov struct bootDesc { 1391da177e4SLinus Torvalds uint8_t structType; 1401da177e4SLinus Torvalds uint8_t stdIdent[VSD_STD_ID_LEN]; 1411da177e4SLinus Torvalds uint8_t structVersion; 1421da177e4SLinus Torvalds uint8_t reserved1; 1435ca4e4beSPekka Enberg struct regid archType; 1445ca4e4beSPekka Enberg struct regid bootIdent; 1451da177e4SLinus Torvalds __le32 bootExtLocation; 1461da177e4SLinus Torvalds __le32 bootExtLength; 1471da177e4SLinus Torvalds __le64 loadAddress; 1481da177e4SLinus Torvalds __le64 startAddress; 1495ca4e4beSPekka Enberg struct timestamp descCreationDateAndTime; 1501da177e4SLinus Torvalds __le16 flags; 1511da177e4SLinus Torvalds uint8_t reserved2[32]; 1521da177e4SLinus Torvalds uint8_t bootUse[1906]; 15375f27138SFabian Frederick } __packed; 1541da177e4SLinus Torvalds 1551da177e4SLinus Torvalds /* Flags (ECMA 167r3 2/9.4.12) */ 1561da177e4SLinus Torvalds #define BOOT_FLAGS_ERASE 0x01 1571da177e4SLinus Torvalds 1581da177e4SLinus Torvalds /* Extent Descriptor (ECMA 167r3 3/7.1) */ 1595ca4e4beSPekka Enberg struct extent_ad { 1601da177e4SLinus Torvalds __le32 extLength; 1611da177e4SLinus Torvalds __le32 extLocation; 16275f27138SFabian Frederick } __packed; 1631da177e4SLinus Torvalds 1645ca4e4beSPekka Enberg struct kernel_extent_ad { 1651da177e4SLinus Torvalds uint32_t extLength; 1661da177e4SLinus Torvalds uint32_t extLocation; 1675ca4e4beSPekka Enberg }; 1681da177e4SLinus Torvalds 1691da177e4SLinus Torvalds /* Descriptor Tag (ECMA 167r3 3/7.2) */ 1705ca4e4beSPekka Enberg struct tag { 1711da177e4SLinus Torvalds __le16 tagIdent; 1721da177e4SLinus Torvalds __le16 descVersion; 1731da177e4SLinus Torvalds uint8_t tagChecksum; 1741da177e4SLinus Torvalds uint8_t reserved; 1751da177e4SLinus Torvalds __le16 tagSerialNum; 1761da177e4SLinus Torvalds __le16 descCRC; 1771da177e4SLinus Torvalds __le16 descCRCLength; 1781da177e4SLinus Torvalds __le32 tagLocation; 17975f27138SFabian Frederick } __packed; 1801da177e4SLinus Torvalds 1811da177e4SLinus Torvalds /* Tag Identifier (ECMA 167r3 3/7.2.1) */ 1821da177e4SLinus Torvalds #define TAG_IDENT_PVD 0x0001 1831da177e4SLinus Torvalds #define TAG_IDENT_AVDP 0x0002 1841da177e4SLinus Torvalds #define TAG_IDENT_VDP 0x0003 1851da177e4SLinus Torvalds #define TAG_IDENT_IUVD 0x0004 1861da177e4SLinus Torvalds #define TAG_IDENT_PD 0x0005 1871da177e4SLinus Torvalds #define TAG_IDENT_LVD 0x0006 1881da177e4SLinus Torvalds #define TAG_IDENT_USD 0x0007 1891da177e4SLinus Torvalds #define TAG_IDENT_TD 0x0008 1901da177e4SLinus Torvalds #define TAG_IDENT_LVID 0x0009 1911da177e4SLinus Torvalds 1921da177e4SLinus Torvalds /* NSR Descriptor (ECMA 167r3 3/9.1) */ 193cb00ea35SCyrill Gorcunov struct NSRDesc { 1941da177e4SLinus Torvalds uint8_t structType; 1951da177e4SLinus Torvalds uint8_t stdIdent[VSD_STD_ID_LEN]; 1961da177e4SLinus Torvalds uint8_t structVersion; 1971da177e4SLinus Torvalds uint8_t reserved; 1981da177e4SLinus Torvalds uint8_t structData[2040]; 19975f27138SFabian Frederick } __packed; 2001da177e4SLinus Torvalds 20161464467SPali Rohár /* Generic Descriptor */ 20261464467SPali Rohár struct genericDesc { 20361464467SPali Rohár struct tag descTag; 20461464467SPali Rohár __le32 volDescSeqNum; 20561464467SPali Rohár uint8_t reserved[492]; 20661464467SPali Rohár } __packed; 20761464467SPali Rohár 2081da177e4SLinus Torvalds /* Primary Volume Descriptor (ECMA 167r3 3/10.1) */ 209cb00ea35SCyrill Gorcunov struct primaryVolDesc { 2105ca4e4beSPekka Enberg struct tag descTag; 2111da177e4SLinus Torvalds __le32 volDescSeqNum; 2121da177e4SLinus Torvalds __le32 primaryVolDescNum; 2131da177e4SLinus Torvalds dstring volIdent[32]; 2141da177e4SLinus Torvalds __le16 volSeqNum; 2151da177e4SLinus Torvalds __le16 maxVolSeqNum; 2161da177e4SLinus Torvalds __le16 interchangeLvl; 2171da177e4SLinus Torvalds __le16 maxInterchangeLvl; 2181da177e4SLinus Torvalds __le32 charSetList; 2191da177e4SLinus Torvalds __le32 maxCharSetList; 2201da177e4SLinus Torvalds dstring volSetIdent[128]; 2215ca4e4beSPekka Enberg struct charspec descCharSet; 2225ca4e4beSPekka Enberg struct charspec explanatoryCharSet; 2235ca4e4beSPekka Enberg struct extent_ad volAbstract; 2245ca4e4beSPekka Enberg struct extent_ad volCopyright; 2255ca4e4beSPekka Enberg struct regid appIdent; 2265ca4e4beSPekka Enberg struct timestamp recordingDateAndTime; 2275ca4e4beSPekka Enberg struct regid impIdent; 2281da177e4SLinus Torvalds uint8_t impUse[64]; 2291da177e4SLinus Torvalds __le32 predecessorVolDescSeqLocation; 2301da177e4SLinus Torvalds __le16 flags; 2311da177e4SLinus Torvalds uint8_t reserved[22]; 23275f27138SFabian Frederick } __packed; 2331da177e4SLinus Torvalds 2341da177e4SLinus Torvalds /* Flags (ECMA 167r3 3/10.1.21) */ 2351da177e4SLinus Torvalds #define PVD_FLAGS_VSID_COMMON 0x0001 2361da177e4SLinus Torvalds 2371da177e4SLinus Torvalds /* Anchor Volume Descriptor Pointer (ECMA 167r3 3/10.2) */ 238cb00ea35SCyrill Gorcunov struct anchorVolDescPtr { 2395ca4e4beSPekka Enberg struct tag descTag; 2405ca4e4beSPekka Enberg struct extent_ad mainVolDescSeqExt; 2415ca4e4beSPekka Enberg struct extent_ad reserveVolDescSeqExt; 2421da177e4SLinus Torvalds uint8_t reserved[480]; 24375f27138SFabian Frederick } __packed; 2441da177e4SLinus Torvalds 2451da177e4SLinus Torvalds /* Volume Descriptor Pointer (ECMA 167r3 3/10.3) */ 246cb00ea35SCyrill Gorcunov struct volDescPtr { 2475ca4e4beSPekka Enberg struct tag descTag; 2481da177e4SLinus Torvalds __le32 volDescSeqNum; 2495ca4e4beSPekka Enberg struct extent_ad nextVolDescSeqExt; 2501da177e4SLinus Torvalds uint8_t reserved[484]; 25175f27138SFabian Frederick } __packed; 2521da177e4SLinus Torvalds 2531da177e4SLinus Torvalds /* Implementation Use Volume Descriptor (ECMA 167r3 3/10.4) */ 254cb00ea35SCyrill Gorcunov struct impUseVolDesc { 2555ca4e4beSPekka Enberg struct tag descTag; 2561da177e4SLinus Torvalds __le32 volDescSeqNum; 2575ca4e4beSPekka Enberg struct regid impIdent; 2581da177e4SLinus Torvalds uint8_t impUse[460]; 25975f27138SFabian Frederick } __packed; 2601da177e4SLinus Torvalds 2611da177e4SLinus Torvalds /* Partition Descriptor (ECMA 167r3 3/10.5) */ 262cb00ea35SCyrill Gorcunov struct partitionDesc { 2635ca4e4beSPekka Enberg struct tag descTag; 2641da177e4SLinus Torvalds __le32 volDescSeqNum; 2651da177e4SLinus Torvalds __le16 partitionFlags; 2661da177e4SLinus Torvalds __le16 partitionNumber; 2675ca4e4beSPekka Enberg struct regid partitionContents; 2681da177e4SLinus Torvalds uint8_t partitionContentsUse[128]; 2691da177e4SLinus Torvalds __le32 accessType; 2701da177e4SLinus Torvalds __le32 partitionStartingLocation; 2711da177e4SLinus Torvalds __le32 partitionLength; 2725ca4e4beSPekka Enberg struct regid impIdent; 2731da177e4SLinus Torvalds uint8_t impUse[128]; 2741da177e4SLinus Torvalds uint8_t reserved[156]; 27575f27138SFabian Frederick } __packed; 2761da177e4SLinus Torvalds 2771da177e4SLinus Torvalds /* Partition Flags (ECMA 167r3 3/10.5.3) */ 2781da177e4SLinus Torvalds #define PD_PARTITION_FLAGS_ALLOC 0x0001 2791da177e4SLinus Torvalds 2801da177e4SLinus Torvalds /* Partition Contents (ECMA 167r2 3/10.5.3) */ 2811da177e4SLinus Torvalds #define PD_PARTITION_CONTENTS_NSR02 "+NSR02" 2821da177e4SLinus Torvalds 2831da177e4SLinus Torvalds /* Partition Contents (ECMA 167r3 3/10.5.5) */ 2841da177e4SLinus Torvalds #define PD_PARTITION_CONTENTS_FDC01 "+FDC01" 2851da177e4SLinus Torvalds #define PD_PARTITION_CONTENTS_CD001 "+CD001" 2861da177e4SLinus Torvalds #define PD_PARTITION_CONTENTS_CDW02 "+CDW02" 2871da177e4SLinus Torvalds #define PD_PARTITION_CONTENTS_NSR03 "+NSR03" 2881da177e4SLinus Torvalds 2891da177e4SLinus Torvalds /* Access Type (ECMA 167r3 3/10.5.7) */ 2901da177e4SLinus Torvalds #define PD_ACCESS_TYPE_NONE 0x00000000 2911da177e4SLinus Torvalds #define PD_ACCESS_TYPE_READ_ONLY 0x00000001 2921da177e4SLinus Torvalds #define PD_ACCESS_TYPE_WRITE_ONCE 0x00000002 2931da177e4SLinus Torvalds #define PD_ACCESS_TYPE_REWRITABLE 0x00000003 2941da177e4SLinus Torvalds #define PD_ACCESS_TYPE_OVERWRITABLE 0x00000004 2951da177e4SLinus Torvalds 2961da177e4SLinus Torvalds /* Logical Volume Descriptor (ECMA 167r3 3/10.6) */ 297cb00ea35SCyrill Gorcunov struct logicalVolDesc { 2985ca4e4beSPekka Enberg struct tag descTag; 2991da177e4SLinus Torvalds __le32 volDescSeqNum; 3005ca4e4beSPekka Enberg struct charspec descCharSet; 3011da177e4SLinus Torvalds dstring logicalVolIdent[128]; 3021da177e4SLinus Torvalds __le32 logicalBlockSize; 3035ca4e4beSPekka Enberg struct regid domainIdent; 3041da177e4SLinus Torvalds uint8_t logicalVolContentsUse[16]; 3051da177e4SLinus Torvalds __le32 mapTableLength; 3061da177e4SLinus Torvalds __le32 numPartitionMaps; 3075ca4e4beSPekka Enberg struct regid impIdent; 3081da177e4SLinus Torvalds uint8_t impUse[128]; 3095ca4e4beSPekka Enberg struct extent_ad integritySeqExt; 310b3c8c980SJan Kara uint8_t partitionMaps[]; 31175f27138SFabian Frederick } __packed; 3121da177e4SLinus Torvalds 3131da177e4SLinus Torvalds /* Generic Partition Map (ECMA 167r3 3/10.7.1) */ 314cb00ea35SCyrill Gorcunov struct genericPartitionMap { 3151da177e4SLinus Torvalds uint8_t partitionMapType; 3161da177e4SLinus Torvalds uint8_t partitionMapLength; 317b3c8c980SJan Kara uint8_t partitionMapping[]; 31875f27138SFabian Frederick } __packed; 3191da177e4SLinus Torvalds 3201da177e4SLinus Torvalds /* Partition Map Type (ECMA 167r3 3/10.7.1.1) */ 3211da177e4SLinus Torvalds #define GP_PARTITION_MAP_TYPE_UNDEF 0x00 32261464467SPali Rohár #define GP_PARTITION_MAP_TYPE_1 0x01 3231da177e4SLinus Torvalds #define GP_PARTITION_MAP_TYPE_2 0x02 3241da177e4SLinus Torvalds 3251da177e4SLinus Torvalds /* Type 1 Partition Map (ECMA 167r3 3/10.7.2) */ 326cb00ea35SCyrill Gorcunov struct genericPartitionMap1 { 3271da177e4SLinus Torvalds uint8_t partitionMapType; 3281da177e4SLinus Torvalds uint8_t partitionMapLength; 3291da177e4SLinus Torvalds __le16 volSeqNum; 3301da177e4SLinus Torvalds __le16 partitionNum; 33175f27138SFabian Frederick } __packed; 3321da177e4SLinus Torvalds 3331da177e4SLinus Torvalds /* Type 2 Partition Map (ECMA 167r3 3/10.7.3) */ 334cb00ea35SCyrill Gorcunov struct genericPartitionMap2 { 3351da177e4SLinus Torvalds uint8_t partitionMapType; 3361da177e4SLinus Torvalds uint8_t partitionMapLength; 3371da177e4SLinus Torvalds uint8_t partitionIdent[62]; 33875f27138SFabian Frederick } __packed; 3391da177e4SLinus Torvalds 3401da177e4SLinus Torvalds /* Unallocated Space Descriptor (ECMA 167r3 3/10.8) */ 341cb00ea35SCyrill Gorcunov struct unallocSpaceDesc { 3425ca4e4beSPekka Enberg struct tag descTag; 3431da177e4SLinus Torvalds __le32 volDescSeqNum; 3441da177e4SLinus Torvalds __le32 numAllocDescs; 345b3c8c980SJan Kara struct extent_ad allocDescs[]; 34675f27138SFabian Frederick } __packed; 3471da177e4SLinus Torvalds 3481da177e4SLinus Torvalds /* Terminating Descriptor (ECMA 167r3 3/10.9) */ 349cb00ea35SCyrill Gorcunov struct terminatingDesc { 3505ca4e4beSPekka Enberg struct tag descTag; 3511da177e4SLinus Torvalds uint8_t reserved[496]; 35275f27138SFabian Frederick } __packed; 3531da177e4SLinus Torvalds 3541da177e4SLinus Torvalds /* Logical Volume Integrity Descriptor (ECMA 167r3 3/10.10) */ 355cb00ea35SCyrill Gorcunov struct logicalVolIntegrityDesc { 3565ca4e4beSPekka Enberg struct tag descTag; 3575ca4e4beSPekka Enberg struct timestamp recordingDateAndTime; 3581da177e4SLinus Torvalds __le32 integrityType; 3595ca4e4beSPekka Enberg struct extent_ad nextIntegrityExt; 3601da177e4SLinus Torvalds uint8_t logicalVolContentsUse[32]; 3611da177e4SLinus Torvalds __le32 numOfPartitions; 3621da177e4SLinus Torvalds __le32 lengthOfImpUse; 363b3c8c980SJan Kara __le32 freeSpaceTable[]; 364b3c8c980SJan Kara /* __le32 sizeTable[]; */ 365b3c8c980SJan Kara /* uint8_t impUse[]; */ 36675f27138SFabian Frederick } __packed; 3671da177e4SLinus Torvalds 3681da177e4SLinus Torvalds /* Integrity Type (ECMA 167r3 3/10.10.3) */ 3691da177e4SLinus Torvalds #define LVID_INTEGRITY_TYPE_OPEN 0x00000000 3701da177e4SLinus Torvalds #define LVID_INTEGRITY_TYPE_CLOSE 0x00000001 3711da177e4SLinus Torvalds 3721da177e4SLinus Torvalds /* Recorded Address (ECMA 167r3 4/7.1) */ 3735ca4e4beSPekka Enberg struct lb_addr { 3741da177e4SLinus Torvalds __le32 logicalBlockNum; 3751da177e4SLinus Torvalds __le16 partitionReferenceNum; 37675f27138SFabian Frederick } __packed; 3771da177e4SLinus Torvalds 3781da177e4SLinus Torvalds /* ... and its in-core analog */ 3795ca4e4beSPekka Enberg struct kernel_lb_addr { 3801da177e4SLinus Torvalds uint32_t logicalBlockNum; 3811da177e4SLinus Torvalds uint16_t partitionReferenceNum; 3825ca4e4beSPekka Enberg }; 3831da177e4SLinus Torvalds 3841da177e4SLinus Torvalds /* Short Allocation Descriptor (ECMA 167r3 4/14.14.1) */ 3855ca4e4beSPekka Enberg struct short_ad { 3861da177e4SLinus Torvalds __le32 extLength; 3871da177e4SLinus Torvalds __le32 extPosition; 38875f27138SFabian Frederick } __packed; 3891da177e4SLinus Torvalds 3901da177e4SLinus Torvalds /* Long Allocation Descriptor (ECMA 167r3 4/14.14.2) */ 3915ca4e4beSPekka Enberg struct long_ad { 3921da177e4SLinus Torvalds __le32 extLength; 3935ca4e4beSPekka Enberg struct lb_addr extLocation; 3941da177e4SLinus Torvalds uint8_t impUse[6]; 39575f27138SFabian Frederick } __packed; 3961da177e4SLinus Torvalds 3975ca4e4beSPekka Enberg struct kernel_long_ad { 3981da177e4SLinus Torvalds uint32_t extLength; 3995ca4e4beSPekka Enberg struct kernel_lb_addr extLocation; 4001da177e4SLinus Torvalds uint8_t impUse[6]; 4015ca4e4beSPekka Enberg }; 4021da177e4SLinus Torvalds 4031da177e4SLinus Torvalds /* Extended Allocation Descriptor (ECMA 167r3 4/14.14.3) */ 4045ca4e4beSPekka Enberg struct ext_ad { 4051da177e4SLinus Torvalds __le32 extLength; 4061da177e4SLinus Torvalds __le32 recordedLength; 4071da177e4SLinus Torvalds __le32 informationLength; 4085ca4e4beSPekka Enberg struct lb_addr extLocation; 40975f27138SFabian Frederick } __packed; 4101da177e4SLinus Torvalds 4115ca4e4beSPekka Enberg struct kernel_ext_ad { 4121da177e4SLinus Torvalds uint32_t extLength; 4131da177e4SLinus Torvalds uint32_t recordedLength; 4141da177e4SLinus Torvalds uint32_t informationLength; 4155ca4e4beSPekka Enberg struct kernel_lb_addr extLocation; 4165ca4e4beSPekka Enberg }; 4171da177e4SLinus Torvalds 4181da177e4SLinus Torvalds /* Descriptor Tag (ECMA 167r3 4/7.2 - See 3/7.2) */ 4191da177e4SLinus Torvalds 4201da177e4SLinus Torvalds /* Tag Identifier (ECMA 167r3 4/7.2.1) */ 4211da177e4SLinus Torvalds #define TAG_IDENT_FSD 0x0100 4221da177e4SLinus Torvalds #define TAG_IDENT_FID 0x0101 4231da177e4SLinus Torvalds #define TAG_IDENT_AED 0x0102 4241da177e4SLinus Torvalds #define TAG_IDENT_IE 0x0103 4251da177e4SLinus Torvalds #define TAG_IDENT_TE 0x0104 4261da177e4SLinus Torvalds #define TAG_IDENT_FE 0x0105 4271da177e4SLinus Torvalds #define TAG_IDENT_EAHD 0x0106 4281da177e4SLinus Torvalds #define TAG_IDENT_USE 0x0107 4291da177e4SLinus Torvalds #define TAG_IDENT_SBD 0x0108 4301da177e4SLinus Torvalds #define TAG_IDENT_PIE 0x0109 4311da177e4SLinus Torvalds #define TAG_IDENT_EFE 0x010A 4321da177e4SLinus Torvalds 4331da177e4SLinus Torvalds /* File Set Descriptor (ECMA 167r3 4/14.1) */ 434cb00ea35SCyrill Gorcunov struct fileSetDesc { 4355ca4e4beSPekka Enberg struct tag descTag; 4365ca4e4beSPekka Enberg struct timestamp recordingDateAndTime; 4371da177e4SLinus Torvalds __le16 interchangeLvl; 4381da177e4SLinus Torvalds __le16 maxInterchangeLvl; 4391da177e4SLinus Torvalds __le32 charSetList; 4401da177e4SLinus Torvalds __le32 maxCharSetList; 4411da177e4SLinus Torvalds __le32 fileSetNum; 4421da177e4SLinus Torvalds __le32 fileSetDescNum; 4435ca4e4beSPekka Enberg struct charspec logicalVolIdentCharSet; 4441da177e4SLinus Torvalds dstring logicalVolIdent[128]; 4455ca4e4beSPekka Enberg struct charspec fileSetCharSet; 4461da177e4SLinus Torvalds dstring fileSetIdent[32]; 4471da177e4SLinus Torvalds dstring copyrightFileIdent[32]; 4481da177e4SLinus Torvalds dstring abstractFileIdent[32]; 4495ca4e4beSPekka Enberg struct long_ad rootDirectoryICB; 4505ca4e4beSPekka Enberg struct regid domainIdent; 4515ca4e4beSPekka Enberg struct long_ad nextExt; 4525ca4e4beSPekka Enberg struct long_ad streamDirectoryICB; 4531da177e4SLinus Torvalds uint8_t reserved[32]; 45475f27138SFabian Frederick } __packed; 4551da177e4SLinus Torvalds 4561da177e4SLinus Torvalds /* Partition Header Descriptor (ECMA 167r3 4/14.3) */ 457cb00ea35SCyrill Gorcunov struct partitionHeaderDesc { 4585ca4e4beSPekka Enberg struct short_ad unallocSpaceTable; 4595ca4e4beSPekka Enberg struct short_ad unallocSpaceBitmap; 4605ca4e4beSPekka Enberg struct short_ad partitionIntegrityTable; 4615ca4e4beSPekka Enberg struct short_ad freedSpaceTable; 4625ca4e4beSPekka Enberg struct short_ad freedSpaceBitmap; 4631da177e4SLinus Torvalds uint8_t reserved[88]; 46475f27138SFabian Frederick } __packed; 4651da177e4SLinus Torvalds 4661da177e4SLinus Torvalds /* File Identifier Descriptor (ECMA 167r3 4/14.4) */ 467cb00ea35SCyrill Gorcunov struct fileIdentDesc { 4685ca4e4beSPekka Enberg struct tag descTag; 4691da177e4SLinus Torvalds __le16 fileVersionNum; 4701da177e4SLinus Torvalds uint8_t fileCharacteristics; 4711da177e4SLinus Torvalds uint8_t lengthFileIdent; 4725ca4e4beSPekka Enberg struct long_ad icb; 4731da177e4SLinus Torvalds __le16 lengthOfImpUse; 474*979a6e28SJan Kara uint8_t impUse[]; 475*979a6e28SJan Kara /* uint8_t fileIdent[]; */ 476*979a6e28SJan Kara /* uint8_t padding[]; */ 47775f27138SFabian Frederick } __packed; 4781da177e4SLinus Torvalds 4791da177e4SLinus Torvalds /* File Characteristics (ECMA 167r3 4/14.4.3) */ 4801da177e4SLinus Torvalds #define FID_FILE_CHAR_HIDDEN 0x01 4811da177e4SLinus Torvalds #define FID_FILE_CHAR_DIRECTORY 0x02 4821da177e4SLinus Torvalds #define FID_FILE_CHAR_DELETED 0x04 4831da177e4SLinus Torvalds #define FID_FILE_CHAR_PARENT 0x08 4841da177e4SLinus Torvalds #define FID_FILE_CHAR_METADATA 0x10 4851da177e4SLinus Torvalds 4861da177e4SLinus Torvalds /* Allocation Ext Descriptor (ECMA 167r3 4/14.5) */ 487cb00ea35SCyrill Gorcunov struct allocExtDesc { 4885ca4e4beSPekka Enberg struct tag descTag; 4891da177e4SLinus Torvalds __le32 previousAllocExtLocation; 4901da177e4SLinus Torvalds __le32 lengthAllocDescs; 49175f27138SFabian Frederick } __packed; 4921da177e4SLinus Torvalds 4931da177e4SLinus Torvalds /* ICB Tag (ECMA 167r3 4/14.6) */ 4945ca4e4beSPekka Enberg struct icbtag { 4951da177e4SLinus Torvalds __le32 priorRecordedNumDirectEntries; 4961da177e4SLinus Torvalds __le16 strategyType; 4971da177e4SLinus Torvalds __le16 strategyParameter; 4981da177e4SLinus Torvalds __le16 numEntries; 4991da177e4SLinus Torvalds uint8_t reserved; 5001da177e4SLinus Torvalds uint8_t fileType; 5015ca4e4beSPekka Enberg struct lb_addr parentICBLocation; 5021da177e4SLinus Torvalds __le16 flags; 50375f27138SFabian Frederick } __packed; 5041da177e4SLinus Torvalds 5051da177e4SLinus Torvalds /* Strategy Type (ECMA 167r3 4/14.6.2) */ 5061da177e4SLinus Torvalds #define ICBTAG_STRATEGY_TYPE_UNDEF 0x0000 5071da177e4SLinus Torvalds #define ICBTAG_STRATEGY_TYPE_1 0x0001 5081da177e4SLinus Torvalds #define ICBTAG_STRATEGY_TYPE_2 0x0002 5091da177e4SLinus Torvalds #define ICBTAG_STRATEGY_TYPE_3 0x0003 5101da177e4SLinus Torvalds #define ICBTAG_STRATEGY_TYPE_4 0x0004 5111da177e4SLinus Torvalds 5121da177e4SLinus Torvalds /* File Type (ECMA 167r3 4/14.6.6) */ 5131da177e4SLinus Torvalds #define ICBTAG_FILE_TYPE_UNDEF 0x00 5141da177e4SLinus Torvalds #define ICBTAG_FILE_TYPE_USE 0x01 5151da177e4SLinus Torvalds #define ICBTAG_FILE_TYPE_PIE 0x02 5161da177e4SLinus Torvalds #define ICBTAG_FILE_TYPE_IE 0x03 5171da177e4SLinus Torvalds #define ICBTAG_FILE_TYPE_DIRECTORY 0x04 5181da177e4SLinus Torvalds #define ICBTAG_FILE_TYPE_REGULAR 0x05 5191da177e4SLinus Torvalds #define ICBTAG_FILE_TYPE_BLOCK 0x06 5201da177e4SLinus Torvalds #define ICBTAG_FILE_TYPE_CHAR 0x07 5211da177e4SLinus Torvalds #define ICBTAG_FILE_TYPE_EA 0x08 5221da177e4SLinus Torvalds #define ICBTAG_FILE_TYPE_FIFO 0x09 5231da177e4SLinus Torvalds #define ICBTAG_FILE_TYPE_SOCKET 0x0A 5241da177e4SLinus Torvalds #define ICBTAG_FILE_TYPE_TE 0x0B 5251da177e4SLinus Torvalds #define ICBTAG_FILE_TYPE_SYMLINK 0x0C 5261da177e4SLinus Torvalds #define ICBTAG_FILE_TYPE_STREAMDIR 0x0D 5271da177e4SLinus Torvalds 5281da177e4SLinus Torvalds /* Flags (ECMA 167r3 4/14.6.8) */ 5291da177e4SLinus Torvalds #define ICBTAG_FLAG_AD_MASK 0x0007 5301da177e4SLinus Torvalds #define ICBTAG_FLAG_AD_SHORT 0x0000 5311da177e4SLinus Torvalds #define ICBTAG_FLAG_AD_LONG 0x0001 5321da177e4SLinus Torvalds #define ICBTAG_FLAG_AD_EXTENDED 0x0002 5331da177e4SLinus Torvalds #define ICBTAG_FLAG_AD_IN_ICB 0x0003 5341da177e4SLinus Torvalds #define ICBTAG_FLAG_SORTED 0x0008 5351da177e4SLinus Torvalds #define ICBTAG_FLAG_NONRELOCATABLE 0x0010 5361da177e4SLinus Torvalds #define ICBTAG_FLAG_ARCHIVE 0x0020 5371da177e4SLinus Torvalds #define ICBTAG_FLAG_SETUID 0x0040 5381da177e4SLinus Torvalds #define ICBTAG_FLAG_SETGID 0x0080 5391da177e4SLinus Torvalds #define ICBTAG_FLAG_STICKY 0x0100 5401da177e4SLinus Torvalds #define ICBTAG_FLAG_CONTIGUOUS 0x0200 5411da177e4SLinus Torvalds #define ICBTAG_FLAG_SYSTEM 0x0400 5421da177e4SLinus Torvalds #define ICBTAG_FLAG_TRANSFORMED 0x0800 5431da177e4SLinus Torvalds #define ICBTAG_FLAG_MULTIVERSIONS 0x1000 5441da177e4SLinus Torvalds #define ICBTAG_FLAG_STREAM 0x2000 5451da177e4SLinus Torvalds 5461da177e4SLinus Torvalds /* Indirect Entry (ECMA 167r3 4/14.7) */ 547cb00ea35SCyrill Gorcunov struct indirectEntry { 5485ca4e4beSPekka Enberg struct tag descTag; 5495ca4e4beSPekka Enberg struct icbtag icbTag; 5505ca4e4beSPekka Enberg struct long_ad indirectICB; 55175f27138SFabian Frederick } __packed; 5521da177e4SLinus Torvalds 5531da177e4SLinus Torvalds /* Terminal Entry (ECMA 167r3 4/14.8) */ 554cb00ea35SCyrill Gorcunov struct terminalEntry { 5555ca4e4beSPekka Enberg struct tag descTag; 5565ca4e4beSPekka Enberg struct icbtag icbTag; 55775f27138SFabian Frederick } __packed; 5581da177e4SLinus Torvalds 5591da177e4SLinus Torvalds /* File Entry (ECMA 167r3 4/14.9) */ 560cb00ea35SCyrill Gorcunov struct fileEntry { 5615ca4e4beSPekka Enberg struct tag descTag; 5625ca4e4beSPekka Enberg struct icbtag icbTag; 5631da177e4SLinus Torvalds __le32 uid; 5641da177e4SLinus Torvalds __le32 gid; 5651da177e4SLinus Torvalds __le32 permissions; 5661da177e4SLinus Torvalds __le16 fileLinkCount; 5671da177e4SLinus Torvalds uint8_t recordFormat; 5681da177e4SLinus Torvalds uint8_t recordDisplayAttr; 5691da177e4SLinus Torvalds __le32 recordLength; 5701da177e4SLinus Torvalds __le64 informationLength; 5711da177e4SLinus Torvalds __le64 logicalBlocksRecorded; 5725ca4e4beSPekka Enberg struct timestamp accessTime; 5735ca4e4beSPekka Enberg struct timestamp modificationTime; 5745ca4e4beSPekka Enberg struct timestamp attrTime; 5751da177e4SLinus Torvalds __le32 checkpoint; 5765ca4e4beSPekka Enberg struct long_ad extendedAttrICB; 5775ca4e4beSPekka Enberg struct regid impIdent; 5781da177e4SLinus Torvalds __le64 uniqueID; 5791da177e4SLinus Torvalds __le32 lengthExtendedAttr; 5801da177e4SLinus Torvalds __le32 lengthAllocDescs; 581b3c8c980SJan Kara uint8_t extendedAttr[]; 582b3c8c980SJan Kara /* uint8_t allocDescs[]; */ 58375f27138SFabian Frederick } __packed; 5841da177e4SLinus Torvalds 5851da177e4SLinus Torvalds /* Permissions (ECMA 167r3 4/14.9.5) */ 5861da177e4SLinus Torvalds #define FE_PERM_O_EXEC 0x00000001U 5871da177e4SLinus Torvalds #define FE_PERM_O_WRITE 0x00000002U 5881da177e4SLinus Torvalds #define FE_PERM_O_READ 0x00000004U 5891da177e4SLinus Torvalds #define FE_PERM_O_CHATTR 0x00000008U 5901da177e4SLinus Torvalds #define FE_PERM_O_DELETE 0x00000010U 5911da177e4SLinus Torvalds #define FE_PERM_G_EXEC 0x00000020U 5921da177e4SLinus Torvalds #define FE_PERM_G_WRITE 0x00000040U 5931da177e4SLinus Torvalds #define FE_PERM_G_READ 0x00000080U 5941da177e4SLinus Torvalds #define FE_PERM_G_CHATTR 0x00000100U 5951da177e4SLinus Torvalds #define FE_PERM_G_DELETE 0x00000200U 5961da177e4SLinus Torvalds #define FE_PERM_U_EXEC 0x00000400U 5971da177e4SLinus Torvalds #define FE_PERM_U_WRITE 0x00000800U 5981da177e4SLinus Torvalds #define FE_PERM_U_READ 0x00001000U 5991da177e4SLinus Torvalds #define FE_PERM_U_CHATTR 0x00002000U 6001da177e4SLinus Torvalds #define FE_PERM_U_DELETE 0x00004000U 6011da177e4SLinus Torvalds 6021da177e4SLinus Torvalds /* Record Format (ECMA 167r3 4/14.9.7) */ 6031da177e4SLinus Torvalds #define FE_RECORD_FMT_UNDEF 0x00 6041da177e4SLinus Torvalds #define FE_RECORD_FMT_FIXED_PAD 0x01 6051da177e4SLinus Torvalds #define FE_RECORD_FMT_FIXED 0x02 6061da177e4SLinus Torvalds #define FE_RECORD_FMT_VARIABLE8 0x03 6071da177e4SLinus Torvalds #define FE_RECORD_FMT_VARIABLE16 0x04 6081da177e4SLinus Torvalds #define FE_RECORD_FMT_VARIABLE16_MSB 0x05 6091da177e4SLinus Torvalds #define FE_RECORD_FMT_VARIABLE32 0x06 6101da177e4SLinus Torvalds #define FE_RECORD_FMT_PRINT 0x07 6111da177e4SLinus Torvalds #define FE_RECORD_FMT_LF 0x08 6121da177e4SLinus Torvalds #define FE_RECORD_FMT_CR 0x09 6131da177e4SLinus Torvalds #define FE_RECORD_FMT_CRLF 0x0A 6141da177e4SLinus Torvalds #define FE_RECORD_FMT_LFCR 0x0B 6151da177e4SLinus Torvalds 6161da177e4SLinus Torvalds /* Record Display Attributes (ECMA 167r3 4/14.9.8) */ 6171da177e4SLinus Torvalds #define FE_RECORD_DISPLAY_ATTR_UNDEF 0x00 6181da177e4SLinus Torvalds #define FE_RECORD_DISPLAY_ATTR_1 0x01 6191da177e4SLinus Torvalds #define FE_RECORD_DISPLAY_ATTR_2 0x02 6201da177e4SLinus Torvalds #define FE_RECORD_DISPLAY_ATTR_3 0x03 6211da177e4SLinus Torvalds 6221da177e4SLinus Torvalds /* Extended Attribute Header Descriptor (ECMA 167r3 4/14.10.1) */ 623cb00ea35SCyrill Gorcunov struct extendedAttrHeaderDesc { 6245ca4e4beSPekka Enberg struct tag descTag; 6251da177e4SLinus Torvalds __le32 impAttrLocation; 6261da177e4SLinus Torvalds __le32 appAttrLocation; 62775f27138SFabian Frederick } __packed; 6281da177e4SLinus Torvalds 6291da177e4SLinus Torvalds /* Generic Format (ECMA 167r3 4/14.10.2) */ 630cb00ea35SCyrill Gorcunov struct genericFormat { 6311da177e4SLinus Torvalds __le32 attrType; 6321da177e4SLinus Torvalds uint8_t attrSubtype; 6331da177e4SLinus Torvalds uint8_t reserved[3]; 6341da177e4SLinus Torvalds __le32 attrLength; 635b3c8c980SJan Kara uint8_t attrData[]; 63675f27138SFabian Frederick } __packed; 6371da177e4SLinus Torvalds 6381da177e4SLinus Torvalds /* Character Set Information (ECMA 167r3 4/14.10.3) */ 639cb00ea35SCyrill Gorcunov struct charSetInfo { 6401da177e4SLinus Torvalds __le32 attrType; 6411da177e4SLinus Torvalds uint8_t attrSubtype; 6421da177e4SLinus Torvalds uint8_t reserved[3]; 6431da177e4SLinus Torvalds __le32 attrLength; 6441da177e4SLinus Torvalds __le32 escapeSeqLength; 6451da177e4SLinus Torvalds uint8_t charSetType; 646b3c8c980SJan Kara uint8_t escapeSeq[]; 64775f27138SFabian Frederick } __packed; 6481da177e4SLinus Torvalds 6491da177e4SLinus Torvalds /* Alternate Permissions (ECMA 167r3 4/14.10.4) */ 650cb00ea35SCyrill Gorcunov struct altPerms { 6511da177e4SLinus Torvalds __le32 attrType; 6521da177e4SLinus Torvalds uint8_t attrSubtype; 6531da177e4SLinus Torvalds uint8_t reserved[3]; 6541da177e4SLinus Torvalds __le32 attrLength; 6551da177e4SLinus Torvalds __le16 ownerIdent; 6561da177e4SLinus Torvalds __le16 groupIdent; 6571da177e4SLinus Torvalds __le16 permission; 65875f27138SFabian Frederick } __packed; 6591da177e4SLinus Torvalds 6601da177e4SLinus Torvalds /* File Times Extended Attribute (ECMA 167r3 4/14.10.5) */ 661cb00ea35SCyrill Gorcunov struct fileTimesExtAttr { 6621da177e4SLinus Torvalds __le32 attrType; 6631da177e4SLinus Torvalds uint8_t attrSubtype; 6641da177e4SLinus Torvalds uint8_t reserved[3]; 6651da177e4SLinus Torvalds __le32 attrLength; 6661da177e4SLinus Torvalds __le32 dataLength; 6671da177e4SLinus Torvalds __le32 fileTimeExistence; 6681da177e4SLinus Torvalds uint8_t fileTimes; 66975f27138SFabian Frederick } __packed; 6701da177e4SLinus Torvalds 6711da177e4SLinus Torvalds /* FileTimeExistence (ECMA 167r3 4/14.10.5.6) */ 6721da177e4SLinus Torvalds #define FTE_CREATION 0x00000001 6731da177e4SLinus Torvalds #define FTE_DELETION 0x00000004 6741da177e4SLinus Torvalds #define FTE_EFFECTIVE 0x00000008 6751da177e4SLinus Torvalds #define FTE_BACKUP 0x00000002 6761da177e4SLinus Torvalds 6771da177e4SLinus Torvalds /* Information Times Extended Attribute (ECMA 167r3 4/14.10.6) */ 678cb00ea35SCyrill Gorcunov struct infoTimesExtAttr { 6791da177e4SLinus Torvalds __le32 attrType; 6801da177e4SLinus Torvalds uint8_t attrSubtype; 6811da177e4SLinus Torvalds uint8_t reserved[3]; 6821da177e4SLinus Torvalds __le32 attrLength; 6831da177e4SLinus Torvalds __le32 dataLength; 6841da177e4SLinus Torvalds __le32 infoTimeExistence; 685b3c8c980SJan Kara uint8_t infoTimes[]; 68675f27138SFabian Frederick } __packed; 6871da177e4SLinus Torvalds 6881da177e4SLinus Torvalds /* Device Specification (ECMA 167r3 4/14.10.7) */ 689cb00ea35SCyrill Gorcunov struct deviceSpec { 6901da177e4SLinus Torvalds __le32 attrType; 6911da177e4SLinus Torvalds uint8_t attrSubtype; 6921da177e4SLinus Torvalds uint8_t reserved[3]; 6931da177e4SLinus Torvalds __le32 attrLength; 6941da177e4SLinus Torvalds __le32 impUseLength; 6951da177e4SLinus Torvalds __le32 majorDeviceIdent; 6961da177e4SLinus Torvalds __le32 minorDeviceIdent; 697b3c8c980SJan Kara uint8_t impUse[]; 69875f27138SFabian Frederick } __packed; 6991da177e4SLinus Torvalds 7001da177e4SLinus Torvalds /* Implementation Use Extended Attr (ECMA 167r3 4/14.10.8) */ 701cb00ea35SCyrill Gorcunov struct impUseExtAttr { 7021da177e4SLinus Torvalds __le32 attrType; 7031da177e4SLinus Torvalds uint8_t attrSubtype; 7041da177e4SLinus Torvalds uint8_t reserved[3]; 7051da177e4SLinus Torvalds __le32 attrLength; 7061da177e4SLinus Torvalds __le32 impUseLength; 7075ca4e4beSPekka Enberg struct regid impIdent; 708b3c8c980SJan Kara uint8_t impUse[]; 70975f27138SFabian Frederick } __packed; 7101da177e4SLinus Torvalds 7111da177e4SLinus Torvalds /* Application Use Extended Attribute (ECMA 167r3 4/14.10.9) */ 712cb00ea35SCyrill Gorcunov struct appUseExtAttr { 7131da177e4SLinus Torvalds __le32 attrType; 7141da177e4SLinus Torvalds uint8_t attrSubtype; 7151da177e4SLinus Torvalds uint8_t reserved[3]; 7161da177e4SLinus Torvalds __le32 attrLength; 7171da177e4SLinus Torvalds __le32 appUseLength; 7185ca4e4beSPekka Enberg struct regid appIdent; 719b3c8c980SJan Kara uint8_t appUse[]; 72075f27138SFabian Frederick } __packed; 7211da177e4SLinus Torvalds 7221da177e4SLinus Torvalds #define EXTATTR_CHAR_SET 1 7231da177e4SLinus Torvalds #define EXTATTR_ALT_PERMS 3 7241da177e4SLinus Torvalds #define EXTATTR_FILE_TIMES 5 7251da177e4SLinus Torvalds #define EXTATTR_INFO_TIMES 6 7261da177e4SLinus Torvalds #define EXTATTR_DEV_SPEC 12 7271da177e4SLinus Torvalds #define EXTATTR_IMP_USE 2048 7281da177e4SLinus Torvalds #define EXTATTR_APP_USE 65536 72961464467SPali Rohár #define EXTATTR_SUBTYPE 1 7301da177e4SLinus Torvalds 7311da177e4SLinus Torvalds /* Unallocated Space Entry (ECMA 167r3 4/14.11) */ 732cb00ea35SCyrill Gorcunov struct unallocSpaceEntry { 7335ca4e4beSPekka Enberg struct tag descTag; 7345ca4e4beSPekka Enberg struct icbtag icbTag; 7351da177e4SLinus Torvalds __le32 lengthAllocDescs; 736b3c8c980SJan Kara uint8_t allocDescs[]; 73775f27138SFabian Frederick } __packed; 7381da177e4SLinus Torvalds 7391da177e4SLinus Torvalds /* Space Bitmap Descriptor (ECMA 167r3 4/14.12) */ 740cb00ea35SCyrill Gorcunov struct spaceBitmapDesc { 7415ca4e4beSPekka Enberg struct tag descTag; 7421da177e4SLinus Torvalds __le32 numOfBits; 7431da177e4SLinus Torvalds __le32 numOfBytes; 744b3c8c980SJan Kara uint8_t bitmap[]; 74575f27138SFabian Frederick } __packed; 7461da177e4SLinus Torvalds 7471da177e4SLinus Torvalds /* Partition Integrity Entry (ECMA 167r3 4/14.13) */ 748cb00ea35SCyrill Gorcunov struct partitionIntegrityEntry { 7495ca4e4beSPekka Enberg struct tag descTag; 7505ca4e4beSPekka Enberg struct icbtag icbTag; 7515ca4e4beSPekka Enberg struct timestamp recordingDateAndTime; 7521da177e4SLinus Torvalds uint8_t integrityType; 7531da177e4SLinus Torvalds uint8_t reserved[175]; 7545ca4e4beSPekka Enberg struct regid impIdent; 7551da177e4SLinus Torvalds uint8_t impUse[256]; 75675f27138SFabian Frederick } __packed; 7571da177e4SLinus Torvalds 7581da177e4SLinus Torvalds /* Short Allocation Descriptor (ECMA 167r3 4/14.14.1) */ 7591da177e4SLinus Torvalds 7601da177e4SLinus Torvalds /* Extent Length (ECMA 167r3 4/14.14.1.1) */ 76161464467SPali Rohár #define EXT_LENGTH_MASK 0x3FFFFFFF 76261464467SPali Rohár #define EXT_TYPE_MASK 0xC0000000 7631da177e4SLinus Torvalds #define EXT_RECORDED_ALLOCATED 0x00000000 7641da177e4SLinus Torvalds #define EXT_NOT_RECORDED_ALLOCATED 0x40000000 7651da177e4SLinus Torvalds #define EXT_NOT_RECORDED_NOT_ALLOCATED 0x80000000 766800552ceSPali Rohár #define EXT_NEXT_EXTENT_ALLOCDESCS 0xC0000000 7671da177e4SLinus Torvalds 7681da177e4SLinus Torvalds /* Long Allocation Descriptor (ECMA 167r3 4/14.14.2) */ 7691da177e4SLinus Torvalds 7701da177e4SLinus Torvalds /* Extended Allocation Descriptor (ECMA 167r3 4/14.14.3) */ 7711da177e4SLinus Torvalds 7721da177e4SLinus Torvalds /* Logical Volume Header Descriptor (ECMA 167r3 4/14.15) */ 773cb00ea35SCyrill Gorcunov struct logicalVolHeaderDesc { 7741da177e4SLinus Torvalds __le64 uniqueID; 7751da177e4SLinus Torvalds uint8_t reserved[24]; 77675f27138SFabian Frederick } __packed; 7771da177e4SLinus Torvalds 7781da177e4SLinus Torvalds /* Path Component (ECMA 167r3 4/14.16.1) */ 779cb00ea35SCyrill Gorcunov struct pathComponent { 7801da177e4SLinus Torvalds uint8_t componentType; 7811da177e4SLinus Torvalds uint8_t lengthComponentIdent; 7821da177e4SLinus Torvalds __le16 componentFileVersionNum; 783b3c8c980SJan Kara dchars componentIdent[]; 78475f27138SFabian Frederick } __packed; 7851da177e4SLinus Torvalds 7861da177e4SLinus Torvalds /* File Entry (ECMA 167r3 4/14.17) */ 787cb00ea35SCyrill Gorcunov struct extendedFileEntry { 7885ca4e4beSPekka Enberg struct tag descTag; 7895ca4e4beSPekka Enberg struct icbtag icbTag; 7901da177e4SLinus Torvalds __le32 uid; 7911da177e4SLinus Torvalds __le32 gid; 7921da177e4SLinus Torvalds __le32 permissions; 7931da177e4SLinus Torvalds __le16 fileLinkCount; 7941da177e4SLinus Torvalds uint8_t recordFormat; 7951da177e4SLinus Torvalds uint8_t recordDisplayAttr; 7961da177e4SLinus Torvalds __le32 recordLength; 7971da177e4SLinus Torvalds __le64 informationLength; 7981da177e4SLinus Torvalds __le64 objectSize; 7991da177e4SLinus Torvalds __le64 logicalBlocksRecorded; 8005ca4e4beSPekka Enberg struct timestamp accessTime; 8015ca4e4beSPekka Enberg struct timestamp modificationTime; 8025ca4e4beSPekka Enberg struct timestamp createTime; 8035ca4e4beSPekka Enberg struct timestamp attrTime; 8041da177e4SLinus Torvalds __le32 checkpoint; 8051da177e4SLinus Torvalds __le32 reserved; 8065ca4e4beSPekka Enberg struct long_ad extendedAttrICB; 8075ca4e4beSPekka Enberg struct long_ad streamDirectoryICB; 8085ca4e4beSPekka Enberg struct regid impIdent; 8091da177e4SLinus Torvalds __le64 uniqueID; 8101da177e4SLinus Torvalds __le32 lengthExtendedAttr; 8111da177e4SLinus Torvalds __le32 lengthAllocDescs; 812b3c8c980SJan Kara uint8_t extendedAttr[]; 813b3c8c980SJan Kara /* uint8_t allocDescs[]; */ 81475f27138SFabian Frederick } __packed; 8151da177e4SLinus Torvalds 8161da177e4SLinus Torvalds #endif /* _ECMA_167_H */ 817