162306a36Sopenharmony_ci/* 262306a36Sopenharmony_ci * ecma_167.h 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * This file is based on ECMA-167 3rd edition (June 1997) 562306a36Sopenharmony_ci * https://www.ecma.ch 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Copyright (c) 2001-2002 Ben Fennema 862306a36Sopenharmony_ci * Copyright (c) 2017-2019 Pali Rohár <pali@kernel.org> 962306a36Sopenharmony_ci * All rights reserved. 1062306a36Sopenharmony_ci * 1162306a36Sopenharmony_ci * Redistribution and use in source and binary forms, with or without 1262306a36Sopenharmony_ci * modification, are permitted provided that the following conditions 1362306a36Sopenharmony_ci * are met: 1462306a36Sopenharmony_ci * 1. Redistributions of source code must retain the above copyright 1562306a36Sopenharmony_ci * notice, this list of conditions, and the following disclaimer, 1662306a36Sopenharmony_ci * without modification. 1762306a36Sopenharmony_ci * 2. The name of the author may not be used to endorse or promote products 1862306a36Sopenharmony_ci * derived from this software without specific prior written permission. 1962306a36Sopenharmony_ci * 2062306a36Sopenharmony_ci * Alternatively, this software may be distributed under the terms of the 2162306a36Sopenharmony_ci * GNU Public License ("GPL"). 2262306a36Sopenharmony_ci * 2362306a36Sopenharmony_ci * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 2462306a36Sopenharmony_ci * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2562306a36Sopenharmony_ci * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2662306a36Sopenharmony_ci * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 2762306a36Sopenharmony_ci * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2862306a36Sopenharmony_ci * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2962306a36Sopenharmony_ci * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 3062306a36Sopenharmony_ci * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 3162306a36Sopenharmony_ci * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3262306a36Sopenharmony_ci * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3362306a36Sopenharmony_ci * SUCH DAMAGE. 3462306a36Sopenharmony_ci */ 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci/** 3762306a36Sopenharmony_ci * @file 3862306a36Sopenharmony_ci * ECMA-167r3 defines and structure definitions 3962306a36Sopenharmony_ci */ 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci#include <linux/types.h> 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci#ifndef _ECMA_167_H 4462306a36Sopenharmony_ci#define _ECMA_167_H 1 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci/* Character sets and coding - d-characters (ECMA 167r3 1/7.2) */ 4762306a36Sopenharmony_citypedef uint8_t dchars; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci/* Character set specification (ECMA 167r3 1/7.2.1) */ 5062306a36Sopenharmony_cistruct charspec { 5162306a36Sopenharmony_ci uint8_t charSetType; 5262306a36Sopenharmony_ci uint8_t charSetInfo[63]; 5362306a36Sopenharmony_ci} __packed; 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci/* Character Set Type (ECMA 167r3 1/7.2.1.1) */ 5662306a36Sopenharmony_ci#define CHARSPEC_TYPE_CS0 0x00 /* (1/7.2.2) */ 5762306a36Sopenharmony_ci#define CHARSPEC_TYPE_CS1 0x01 /* (1/7.2.3) */ 5862306a36Sopenharmony_ci#define CHARSPEC_TYPE_CS2 0x02 /* (1/7.2.4) */ 5962306a36Sopenharmony_ci#define CHARSPEC_TYPE_CS3 0x03 /* (1/7.2.5) */ 6062306a36Sopenharmony_ci#define CHARSPEC_TYPE_CS4 0x04 /* (1/7.2.6) */ 6162306a36Sopenharmony_ci#define CHARSPEC_TYPE_CS5 0x05 /* (1/7.2.7) */ 6262306a36Sopenharmony_ci#define CHARSPEC_TYPE_CS6 0x06 /* (1/7.2.8) */ 6362306a36Sopenharmony_ci#define CHARSPEC_TYPE_CS7 0x07 /* (1/7.2.9) */ 6462306a36Sopenharmony_ci#define CHARSPEC_TYPE_CS8 0x08 /* (1/7.2.10) */ 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci/* Fixed-length character fields - d-string (EMCA 167r3 1/7.2.12) */ 6762306a36Sopenharmony_citypedef uint8_t dstring; 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci/* Timestamp (ECMA 167r3 1/7.3) */ 7062306a36Sopenharmony_cistruct timestamp { 7162306a36Sopenharmony_ci __le16 typeAndTimezone; 7262306a36Sopenharmony_ci __le16 year; 7362306a36Sopenharmony_ci uint8_t month; 7462306a36Sopenharmony_ci uint8_t day; 7562306a36Sopenharmony_ci uint8_t hour; 7662306a36Sopenharmony_ci uint8_t minute; 7762306a36Sopenharmony_ci uint8_t second; 7862306a36Sopenharmony_ci uint8_t centiseconds; 7962306a36Sopenharmony_ci uint8_t hundredsOfMicroseconds; 8062306a36Sopenharmony_ci uint8_t microseconds; 8162306a36Sopenharmony_ci} __packed; 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci/* Type and Time Zone (ECMA 167r3 1/7.3.1) */ 8462306a36Sopenharmony_ci#define TIMESTAMP_TYPE_MASK 0xF000 8562306a36Sopenharmony_ci#define TIMESTAMP_TYPE_CUT 0x0000 8662306a36Sopenharmony_ci#define TIMESTAMP_TYPE_LOCAL 0x1000 8762306a36Sopenharmony_ci#define TIMESTAMP_TYPE_AGREEMENT 0x2000 8862306a36Sopenharmony_ci#define TIMESTAMP_TIMEZONE_MASK 0x0FFF 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ci/* Entity identifier (ECMA 167r3 1/7.4) */ 9162306a36Sopenharmony_cistruct regid { 9262306a36Sopenharmony_ci uint8_t flags; 9362306a36Sopenharmony_ci uint8_t ident[23]; 9462306a36Sopenharmony_ci uint8_t identSuffix[8]; 9562306a36Sopenharmony_ci} __packed; 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci/* Flags (ECMA 167r3 1/7.4.1) */ 9862306a36Sopenharmony_ci#define ENTITYID_FLAGS_DIRTY 0x01 9962306a36Sopenharmony_ci#define ENTITYID_FLAGS_PROTECTED 0x02 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci/* Volume Structure Descriptor (ECMA 167r3 2/9.1) */ 10262306a36Sopenharmony_ci#define VSD_STD_ID_LEN 5 10362306a36Sopenharmony_cistruct volStructDesc { 10462306a36Sopenharmony_ci uint8_t structType; 10562306a36Sopenharmony_ci uint8_t stdIdent[VSD_STD_ID_LEN]; 10662306a36Sopenharmony_ci uint8_t structVersion; 10762306a36Sopenharmony_ci uint8_t structData[2041]; 10862306a36Sopenharmony_ci} __packed; 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci/* Standard Identifier (EMCA 167r2 2/9.1.2) */ 11162306a36Sopenharmony_ci#define VSD_STD_ID_NSR02 "NSR02" /* (3/9.1) */ 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ci/* Standard Identifier (ECMA 167r3 2/9.1.2) */ 11462306a36Sopenharmony_ci#define VSD_STD_ID_BEA01 "BEA01" /* (2/9.2) */ 11562306a36Sopenharmony_ci#define VSD_STD_ID_BOOT2 "BOOT2" /* (2/9.4) */ 11662306a36Sopenharmony_ci#define VSD_STD_ID_CD001 "CD001" /* (ECMA-119) */ 11762306a36Sopenharmony_ci#define VSD_STD_ID_CDW02 "CDW02" /* (ECMA-168) */ 11862306a36Sopenharmony_ci#define VSD_STD_ID_NSR03 "NSR03" /* (3/9.1) */ 11962306a36Sopenharmony_ci#define VSD_STD_ID_TEA01 "TEA01" /* (2/9.3) */ 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci/* Beginning Extended Area Descriptor (ECMA 167r3 2/9.2) */ 12262306a36Sopenharmony_cistruct beginningExtendedAreaDesc { 12362306a36Sopenharmony_ci uint8_t structType; 12462306a36Sopenharmony_ci uint8_t stdIdent[VSD_STD_ID_LEN]; 12562306a36Sopenharmony_ci uint8_t structVersion; 12662306a36Sopenharmony_ci uint8_t structData[2041]; 12762306a36Sopenharmony_ci} __packed; 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci/* Terminating Extended Area Descriptor (ECMA 167r3 2/9.3) */ 13062306a36Sopenharmony_cistruct terminatingExtendedAreaDesc { 13162306a36Sopenharmony_ci uint8_t structType; 13262306a36Sopenharmony_ci uint8_t stdIdent[VSD_STD_ID_LEN]; 13362306a36Sopenharmony_ci uint8_t structVersion; 13462306a36Sopenharmony_ci uint8_t structData[2041]; 13562306a36Sopenharmony_ci} __packed; 13662306a36Sopenharmony_ci 13762306a36Sopenharmony_ci/* Boot Descriptor (ECMA 167r3 2/9.4) */ 13862306a36Sopenharmony_cistruct bootDesc { 13962306a36Sopenharmony_ci uint8_t structType; 14062306a36Sopenharmony_ci uint8_t stdIdent[VSD_STD_ID_LEN]; 14162306a36Sopenharmony_ci uint8_t structVersion; 14262306a36Sopenharmony_ci uint8_t reserved1; 14362306a36Sopenharmony_ci struct regid archType; 14462306a36Sopenharmony_ci struct regid bootIdent; 14562306a36Sopenharmony_ci __le32 bootExtLocation; 14662306a36Sopenharmony_ci __le32 bootExtLength; 14762306a36Sopenharmony_ci __le64 loadAddress; 14862306a36Sopenharmony_ci __le64 startAddress; 14962306a36Sopenharmony_ci struct timestamp descCreationDateAndTime; 15062306a36Sopenharmony_ci __le16 flags; 15162306a36Sopenharmony_ci uint8_t reserved2[32]; 15262306a36Sopenharmony_ci uint8_t bootUse[1906]; 15362306a36Sopenharmony_ci} __packed; 15462306a36Sopenharmony_ci 15562306a36Sopenharmony_ci/* Flags (ECMA 167r3 2/9.4.12) */ 15662306a36Sopenharmony_ci#define BOOT_FLAGS_ERASE 0x01 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ci/* Extent Descriptor (ECMA 167r3 3/7.1) */ 15962306a36Sopenharmony_cistruct extent_ad { 16062306a36Sopenharmony_ci __le32 extLength; 16162306a36Sopenharmony_ci __le32 extLocation; 16262306a36Sopenharmony_ci} __packed; 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_cistruct kernel_extent_ad { 16562306a36Sopenharmony_ci uint32_t extLength; 16662306a36Sopenharmony_ci uint32_t extLocation; 16762306a36Sopenharmony_ci}; 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ci/* Descriptor Tag (ECMA 167r3 3/7.2) */ 17062306a36Sopenharmony_cistruct tag { 17162306a36Sopenharmony_ci __le16 tagIdent; 17262306a36Sopenharmony_ci __le16 descVersion; 17362306a36Sopenharmony_ci uint8_t tagChecksum; 17462306a36Sopenharmony_ci uint8_t reserved; 17562306a36Sopenharmony_ci __le16 tagSerialNum; 17662306a36Sopenharmony_ci __le16 descCRC; 17762306a36Sopenharmony_ci __le16 descCRCLength; 17862306a36Sopenharmony_ci __le32 tagLocation; 17962306a36Sopenharmony_ci} __packed; 18062306a36Sopenharmony_ci 18162306a36Sopenharmony_ci/* Tag Identifier (ECMA 167r3 3/7.2.1) */ 18262306a36Sopenharmony_ci#define TAG_IDENT_PVD 0x0001 18362306a36Sopenharmony_ci#define TAG_IDENT_AVDP 0x0002 18462306a36Sopenharmony_ci#define TAG_IDENT_VDP 0x0003 18562306a36Sopenharmony_ci#define TAG_IDENT_IUVD 0x0004 18662306a36Sopenharmony_ci#define TAG_IDENT_PD 0x0005 18762306a36Sopenharmony_ci#define TAG_IDENT_LVD 0x0006 18862306a36Sopenharmony_ci#define TAG_IDENT_USD 0x0007 18962306a36Sopenharmony_ci#define TAG_IDENT_TD 0x0008 19062306a36Sopenharmony_ci#define TAG_IDENT_LVID 0x0009 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_ci/* NSR Descriptor (ECMA 167r3 3/9.1) */ 19362306a36Sopenharmony_cistruct NSRDesc { 19462306a36Sopenharmony_ci uint8_t structType; 19562306a36Sopenharmony_ci uint8_t stdIdent[VSD_STD_ID_LEN]; 19662306a36Sopenharmony_ci uint8_t structVersion; 19762306a36Sopenharmony_ci uint8_t reserved; 19862306a36Sopenharmony_ci uint8_t structData[2040]; 19962306a36Sopenharmony_ci} __packed; 20062306a36Sopenharmony_ci 20162306a36Sopenharmony_ci/* Generic Descriptor */ 20262306a36Sopenharmony_cistruct genericDesc { 20362306a36Sopenharmony_ci struct tag descTag; 20462306a36Sopenharmony_ci __le32 volDescSeqNum; 20562306a36Sopenharmony_ci uint8_t reserved[492]; 20662306a36Sopenharmony_ci} __packed; 20762306a36Sopenharmony_ci 20862306a36Sopenharmony_ci/* Primary Volume Descriptor (ECMA 167r3 3/10.1) */ 20962306a36Sopenharmony_cistruct primaryVolDesc { 21062306a36Sopenharmony_ci struct tag descTag; 21162306a36Sopenharmony_ci __le32 volDescSeqNum; 21262306a36Sopenharmony_ci __le32 primaryVolDescNum; 21362306a36Sopenharmony_ci dstring volIdent[32]; 21462306a36Sopenharmony_ci __le16 volSeqNum; 21562306a36Sopenharmony_ci __le16 maxVolSeqNum; 21662306a36Sopenharmony_ci __le16 interchangeLvl; 21762306a36Sopenharmony_ci __le16 maxInterchangeLvl; 21862306a36Sopenharmony_ci __le32 charSetList; 21962306a36Sopenharmony_ci __le32 maxCharSetList; 22062306a36Sopenharmony_ci dstring volSetIdent[128]; 22162306a36Sopenharmony_ci struct charspec descCharSet; 22262306a36Sopenharmony_ci struct charspec explanatoryCharSet; 22362306a36Sopenharmony_ci struct extent_ad volAbstract; 22462306a36Sopenharmony_ci struct extent_ad volCopyright; 22562306a36Sopenharmony_ci struct regid appIdent; 22662306a36Sopenharmony_ci struct timestamp recordingDateAndTime; 22762306a36Sopenharmony_ci struct regid impIdent; 22862306a36Sopenharmony_ci uint8_t impUse[64]; 22962306a36Sopenharmony_ci __le32 predecessorVolDescSeqLocation; 23062306a36Sopenharmony_ci __le16 flags; 23162306a36Sopenharmony_ci uint8_t reserved[22]; 23262306a36Sopenharmony_ci} __packed; 23362306a36Sopenharmony_ci 23462306a36Sopenharmony_ci/* Flags (ECMA 167r3 3/10.1.21) */ 23562306a36Sopenharmony_ci#define PVD_FLAGS_VSID_COMMON 0x0001 23662306a36Sopenharmony_ci 23762306a36Sopenharmony_ci/* Anchor Volume Descriptor Pointer (ECMA 167r3 3/10.2) */ 23862306a36Sopenharmony_cistruct anchorVolDescPtr { 23962306a36Sopenharmony_ci struct tag descTag; 24062306a36Sopenharmony_ci struct extent_ad mainVolDescSeqExt; 24162306a36Sopenharmony_ci struct extent_ad reserveVolDescSeqExt; 24262306a36Sopenharmony_ci uint8_t reserved[480]; 24362306a36Sopenharmony_ci} __packed; 24462306a36Sopenharmony_ci 24562306a36Sopenharmony_ci/* Volume Descriptor Pointer (ECMA 167r3 3/10.3) */ 24662306a36Sopenharmony_cistruct volDescPtr { 24762306a36Sopenharmony_ci struct tag descTag; 24862306a36Sopenharmony_ci __le32 volDescSeqNum; 24962306a36Sopenharmony_ci struct extent_ad nextVolDescSeqExt; 25062306a36Sopenharmony_ci uint8_t reserved[484]; 25162306a36Sopenharmony_ci} __packed; 25262306a36Sopenharmony_ci 25362306a36Sopenharmony_ci/* Implementation Use Volume Descriptor (ECMA 167r3 3/10.4) */ 25462306a36Sopenharmony_cistruct impUseVolDesc { 25562306a36Sopenharmony_ci struct tag descTag; 25662306a36Sopenharmony_ci __le32 volDescSeqNum; 25762306a36Sopenharmony_ci struct regid impIdent; 25862306a36Sopenharmony_ci uint8_t impUse[460]; 25962306a36Sopenharmony_ci} __packed; 26062306a36Sopenharmony_ci 26162306a36Sopenharmony_ci/* Partition Descriptor (ECMA 167r3 3/10.5) */ 26262306a36Sopenharmony_cistruct partitionDesc { 26362306a36Sopenharmony_ci struct tag descTag; 26462306a36Sopenharmony_ci __le32 volDescSeqNum; 26562306a36Sopenharmony_ci __le16 partitionFlags; 26662306a36Sopenharmony_ci __le16 partitionNumber; 26762306a36Sopenharmony_ci struct regid partitionContents; 26862306a36Sopenharmony_ci uint8_t partitionContentsUse[128]; 26962306a36Sopenharmony_ci __le32 accessType; 27062306a36Sopenharmony_ci __le32 partitionStartingLocation; 27162306a36Sopenharmony_ci __le32 partitionLength; 27262306a36Sopenharmony_ci struct regid impIdent; 27362306a36Sopenharmony_ci uint8_t impUse[128]; 27462306a36Sopenharmony_ci uint8_t reserved[156]; 27562306a36Sopenharmony_ci} __packed; 27662306a36Sopenharmony_ci 27762306a36Sopenharmony_ci/* Partition Flags (ECMA 167r3 3/10.5.3) */ 27862306a36Sopenharmony_ci#define PD_PARTITION_FLAGS_ALLOC 0x0001 27962306a36Sopenharmony_ci 28062306a36Sopenharmony_ci/* Partition Contents (ECMA 167r2 3/10.5.3) */ 28162306a36Sopenharmony_ci#define PD_PARTITION_CONTENTS_NSR02 "+NSR02" 28262306a36Sopenharmony_ci 28362306a36Sopenharmony_ci/* Partition Contents (ECMA 167r3 3/10.5.5) */ 28462306a36Sopenharmony_ci#define PD_PARTITION_CONTENTS_FDC01 "+FDC01" 28562306a36Sopenharmony_ci#define PD_PARTITION_CONTENTS_CD001 "+CD001" 28662306a36Sopenharmony_ci#define PD_PARTITION_CONTENTS_CDW02 "+CDW02" 28762306a36Sopenharmony_ci#define PD_PARTITION_CONTENTS_NSR03 "+NSR03" 28862306a36Sopenharmony_ci 28962306a36Sopenharmony_ci/* Access Type (ECMA 167r3 3/10.5.7) */ 29062306a36Sopenharmony_ci#define PD_ACCESS_TYPE_NONE 0x00000000 29162306a36Sopenharmony_ci#define PD_ACCESS_TYPE_READ_ONLY 0x00000001 29262306a36Sopenharmony_ci#define PD_ACCESS_TYPE_WRITE_ONCE 0x00000002 29362306a36Sopenharmony_ci#define PD_ACCESS_TYPE_REWRITABLE 0x00000003 29462306a36Sopenharmony_ci#define PD_ACCESS_TYPE_OVERWRITABLE 0x00000004 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_ci/* Logical Volume Descriptor (ECMA 167r3 3/10.6) */ 29762306a36Sopenharmony_cistruct logicalVolDesc { 29862306a36Sopenharmony_ci struct tag descTag; 29962306a36Sopenharmony_ci __le32 volDescSeqNum; 30062306a36Sopenharmony_ci struct charspec descCharSet; 30162306a36Sopenharmony_ci dstring logicalVolIdent[128]; 30262306a36Sopenharmony_ci __le32 logicalBlockSize; 30362306a36Sopenharmony_ci struct regid domainIdent; 30462306a36Sopenharmony_ci uint8_t logicalVolContentsUse[16]; 30562306a36Sopenharmony_ci __le32 mapTableLength; 30662306a36Sopenharmony_ci __le32 numPartitionMaps; 30762306a36Sopenharmony_ci struct regid impIdent; 30862306a36Sopenharmony_ci uint8_t impUse[128]; 30962306a36Sopenharmony_ci struct extent_ad integritySeqExt; 31062306a36Sopenharmony_ci uint8_t partitionMaps[]; 31162306a36Sopenharmony_ci} __packed; 31262306a36Sopenharmony_ci 31362306a36Sopenharmony_ci/* Generic Partition Map (ECMA 167r3 3/10.7.1) */ 31462306a36Sopenharmony_cistruct genericPartitionMap { 31562306a36Sopenharmony_ci uint8_t partitionMapType; 31662306a36Sopenharmony_ci uint8_t partitionMapLength; 31762306a36Sopenharmony_ci uint8_t partitionMapping[]; 31862306a36Sopenharmony_ci} __packed; 31962306a36Sopenharmony_ci 32062306a36Sopenharmony_ci/* Partition Map Type (ECMA 167r3 3/10.7.1.1) */ 32162306a36Sopenharmony_ci#define GP_PARTITION_MAP_TYPE_UNDEF 0x00 32262306a36Sopenharmony_ci#define GP_PARTITION_MAP_TYPE_1 0x01 32362306a36Sopenharmony_ci#define GP_PARTITION_MAP_TYPE_2 0x02 32462306a36Sopenharmony_ci 32562306a36Sopenharmony_ci/* Type 1 Partition Map (ECMA 167r3 3/10.7.2) */ 32662306a36Sopenharmony_cistruct genericPartitionMap1 { 32762306a36Sopenharmony_ci uint8_t partitionMapType; 32862306a36Sopenharmony_ci uint8_t partitionMapLength; 32962306a36Sopenharmony_ci __le16 volSeqNum; 33062306a36Sopenharmony_ci __le16 partitionNum; 33162306a36Sopenharmony_ci} __packed; 33262306a36Sopenharmony_ci 33362306a36Sopenharmony_ci/* Type 2 Partition Map (ECMA 167r3 3/10.7.3) */ 33462306a36Sopenharmony_cistruct genericPartitionMap2 { 33562306a36Sopenharmony_ci uint8_t partitionMapType; 33662306a36Sopenharmony_ci uint8_t partitionMapLength; 33762306a36Sopenharmony_ci uint8_t partitionIdent[62]; 33862306a36Sopenharmony_ci} __packed; 33962306a36Sopenharmony_ci 34062306a36Sopenharmony_ci/* Unallocated Space Descriptor (ECMA 167r3 3/10.8) */ 34162306a36Sopenharmony_cistruct unallocSpaceDesc { 34262306a36Sopenharmony_ci struct tag descTag; 34362306a36Sopenharmony_ci __le32 volDescSeqNum; 34462306a36Sopenharmony_ci __le32 numAllocDescs; 34562306a36Sopenharmony_ci struct extent_ad allocDescs[]; 34662306a36Sopenharmony_ci} __packed; 34762306a36Sopenharmony_ci 34862306a36Sopenharmony_ci/* Terminating Descriptor (ECMA 167r3 3/10.9) */ 34962306a36Sopenharmony_cistruct terminatingDesc { 35062306a36Sopenharmony_ci struct tag descTag; 35162306a36Sopenharmony_ci uint8_t reserved[496]; 35262306a36Sopenharmony_ci} __packed; 35362306a36Sopenharmony_ci 35462306a36Sopenharmony_ci/* Logical Volume Integrity Descriptor (ECMA 167r3 3/10.10) */ 35562306a36Sopenharmony_cistruct logicalVolIntegrityDesc { 35662306a36Sopenharmony_ci struct tag descTag; 35762306a36Sopenharmony_ci struct timestamp recordingDateAndTime; 35862306a36Sopenharmony_ci __le32 integrityType; 35962306a36Sopenharmony_ci struct extent_ad nextIntegrityExt; 36062306a36Sopenharmony_ci uint8_t logicalVolContentsUse[32]; 36162306a36Sopenharmony_ci __le32 numOfPartitions; 36262306a36Sopenharmony_ci __le32 lengthOfImpUse; 36362306a36Sopenharmony_ci __le32 freeSpaceTable[]; 36462306a36Sopenharmony_ci /* __le32 sizeTable[]; */ 36562306a36Sopenharmony_ci /* uint8_t impUse[]; */ 36662306a36Sopenharmony_ci} __packed; 36762306a36Sopenharmony_ci 36862306a36Sopenharmony_ci/* Integrity Type (ECMA 167r3 3/10.10.3) */ 36962306a36Sopenharmony_ci#define LVID_INTEGRITY_TYPE_OPEN 0x00000000 37062306a36Sopenharmony_ci#define LVID_INTEGRITY_TYPE_CLOSE 0x00000001 37162306a36Sopenharmony_ci 37262306a36Sopenharmony_ci/* Recorded Address (ECMA 167r3 4/7.1) */ 37362306a36Sopenharmony_cistruct lb_addr { 37462306a36Sopenharmony_ci __le32 logicalBlockNum; 37562306a36Sopenharmony_ci __le16 partitionReferenceNum; 37662306a36Sopenharmony_ci} __packed; 37762306a36Sopenharmony_ci 37862306a36Sopenharmony_ci/* ... and its in-core analog */ 37962306a36Sopenharmony_cistruct kernel_lb_addr { 38062306a36Sopenharmony_ci uint32_t logicalBlockNum; 38162306a36Sopenharmony_ci uint16_t partitionReferenceNum; 38262306a36Sopenharmony_ci}; 38362306a36Sopenharmony_ci 38462306a36Sopenharmony_ci/* Short Allocation Descriptor (ECMA 167r3 4/14.14.1) */ 38562306a36Sopenharmony_cistruct short_ad { 38662306a36Sopenharmony_ci __le32 extLength; 38762306a36Sopenharmony_ci __le32 extPosition; 38862306a36Sopenharmony_ci} __packed; 38962306a36Sopenharmony_ci 39062306a36Sopenharmony_ci/* Long Allocation Descriptor (ECMA 167r3 4/14.14.2) */ 39162306a36Sopenharmony_cistruct long_ad { 39262306a36Sopenharmony_ci __le32 extLength; 39362306a36Sopenharmony_ci struct lb_addr extLocation; 39462306a36Sopenharmony_ci uint8_t impUse[6]; 39562306a36Sopenharmony_ci} __packed; 39662306a36Sopenharmony_ci 39762306a36Sopenharmony_cistruct kernel_long_ad { 39862306a36Sopenharmony_ci uint32_t extLength; 39962306a36Sopenharmony_ci struct kernel_lb_addr extLocation; 40062306a36Sopenharmony_ci uint8_t impUse[6]; 40162306a36Sopenharmony_ci}; 40262306a36Sopenharmony_ci 40362306a36Sopenharmony_ci/* Extended Allocation Descriptor (ECMA 167r3 4/14.14.3) */ 40462306a36Sopenharmony_cistruct ext_ad { 40562306a36Sopenharmony_ci __le32 extLength; 40662306a36Sopenharmony_ci __le32 recordedLength; 40762306a36Sopenharmony_ci __le32 informationLength; 40862306a36Sopenharmony_ci struct lb_addr extLocation; 40962306a36Sopenharmony_ci} __packed; 41062306a36Sopenharmony_ci 41162306a36Sopenharmony_cistruct kernel_ext_ad { 41262306a36Sopenharmony_ci uint32_t extLength; 41362306a36Sopenharmony_ci uint32_t recordedLength; 41462306a36Sopenharmony_ci uint32_t informationLength; 41562306a36Sopenharmony_ci struct kernel_lb_addr extLocation; 41662306a36Sopenharmony_ci}; 41762306a36Sopenharmony_ci 41862306a36Sopenharmony_ci/* Descriptor Tag (ECMA 167r3 4/7.2 - See 3/7.2) */ 41962306a36Sopenharmony_ci 42062306a36Sopenharmony_ci/* Tag Identifier (ECMA 167r3 4/7.2.1) */ 42162306a36Sopenharmony_ci#define TAG_IDENT_FSD 0x0100 42262306a36Sopenharmony_ci#define TAG_IDENT_FID 0x0101 42362306a36Sopenharmony_ci#define TAG_IDENT_AED 0x0102 42462306a36Sopenharmony_ci#define TAG_IDENT_IE 0x0103 42562306a36Sopenharmony_ci#define TAG_IDENT_TE 0x0104 42662306a36Sopenharmony_ci#define TAG_IDENT_FE 0x0105 42762306a36Sopenharmony_ci#define TAG_IDENT_EAHD 0x0106 42862306a36Sopenharmony_ci#define TAG_IDENT_USE 0x0107 42962306a36Sopenharmony_ci#define TAG_IDENT_SBD 0x0108 43062306a36Sopenharmony_ci#define TAG_IDENT_PIE 0x0109 43162306a36Sopenharmony_ci#define TAG_IDENT_EFE 0x010A 43262306a36Sopenharmony_ci 43362306a36Sopenharmony_ci/* File Set Descriptor (ECMA 167r3 4/14.1) */ 43462306a36Sopenharmony_cistruct fileSetDesc { 43562306a36Sopenharmony_ci struct tag descTag; 43662306a36Sopenharmony_ci struct timestamp recordingDateAndTime; 43762306a36Sopenharmony_ci __le16 interchangeLvl; 43862306a36Sopenharmony_ci __le16 maxInterchangeLvl; 43962306a36Sopenharmony_ci __le32 charSetList; 44062306a36Sopenharmony_ci __le32 maxCharSetList; 44162306a36Sopenharmony_ci __le32 fileSetNum; 44262306a36Sopenharmony_ci __le32 fileSetDescNum; 44362306a36Sopenharmony_ci struct charspec logicalVolIdentCharSet; 44462306a36Sopenharmony_ci dstring logicalVolIdent[128]; 44562306a36Sopenharmony_ci struct charspec fileSetCharSet; 44662306a36Sopenharmony_ci dstring fileSetIdent[32]; 44762306a36Sopenharmony_ci dstring copyrightFileIdent[32]; 44862306a36Sopenharmony_ci dstring abstractFileIdent[32]; 44962306a36Sopenharmony_ci struct long_ad rootDirectoryICB; 45062306a36Sopenharmony_ci struct regid domainIdent; 45162306a36Sopenharmony_ci struct long_ad nextExt; 45262306a36Sopenharmony_ci struct long_ad streamDirectoryICB; 45362306a36Sopenharmony_ci uint8_t reserved[32]; 45462306a36Sopenharmony_ci} __packed; 45562306a36Sopenharmony_ci 45662306a36Sopenharmony_ci/* Partition Header Descriptor (ECMA 167r3 4/14.3) */ 45762306a36Sopenharmony_cistruct partitionHeaderDesc { 45862306a36Sopenharmony_ci struct short_ad unallocSpaceTable; 45962306a36Sopenharmony_ci struct short_ad unallocSpaceBitmap; 46062306a36Sopenharmony_ci struct short_ad partitionIntegrityTable; 46162306a36Sopenharmony_ci struct short_ad freedSpaceTable; 46262306a36Sopenharmony_ci struct short_ad freedSpaceBitmap; 46362306a36Sopenharmony_ci uint8_t reserved[88]; 46462306a36Sopenharmony_ci} __packed; 46562306a36Sopenharmony_ci 46662306a36Sopenharmony_ci/* File Identifier Descriptor (ECMA 167r3 4/14.4) */ 46762306a36Sopenharmony_cistruct fileIdentDesc { 46862306a36Sopenharmony_ci struct tag descTag; 46962306a36Sopenharmony_ci __le16 fileVersionNum; 47062306a36Sopenharmony_ci uint8_t fileCharacteristics; 47162306a36Sopenharmony_ci uint8_t lengthFileIdent; 47262306a36Sopenharmony_ci struct long_ad icb; 47362306a36Sopenharmony_ci __le16 lengthOfImpUse; 47462306a36Sopenharmony_ci uint8_t impUse[]; 47562306a36Sopenharmony_ci /* uint8_t fileIdent[]; */ 47662306a36Sopenharmony_ci /* uint8_t padding[]; */ 47762306a36Sopenharmony_ci} __packed; 47862306a36Sopenharmony_ci 47962306a36Sopenharmony_ci/* File Characteristics (ECMA 167r3 4/14.4.3) */ 48062306a36Sopenharmony_ci#define FID_FILE_CHAR_HIDDEN 0x01 48162306a36Sopenharmony_ci#define FID_FILE_CHAR_DIRECTORY 0x02 48262306a36Sopenharmony_ci#define FID_FILE_CHAR_DELETED 0x04 48362306a36Sopenharmony_ci#define FID_FILE_CHAR_PARENT 0x08 48462306a36Sopenharmony_ci#define FID_FILE_CHAR_METADATA 0x10 48562306a36Sopenharmony_ci 48662306a36Sopenharmony_ci/* Allocation Ext Descriptor (ECMA 167r3 4/14.5) */ 48762306a36Sopenharmony_cistruct allocExtDesc { 48862306a36Sopenharmony_ci struct tag descTag; 48962306a36Sopenharmony_ci __le32 previousAllocExtLocation; 49062306a36Sopenharmony_ci __le32 lengthAllocDescs; 49162306a36Sopenharmony_ci} __packed; 49262306a36Sopenharmony_ci 49362306a36Sopenharmony_ci/* ICB Tag (ECMA 167r3 4/14.6) */ 49462306a36Sopenharmony_cistruct icbtag { 49562306a36Sopenharmony_ci __le32 priorRecordedNumDirectEntries; 49662306a36Sopenharmony_ci __le16 strategyType; 49762306a36Sopenharmony_ci __le16 strategyParameter; 49862306a36Sopenharmony_ci __le16 numEntries; 49962306a36Sopenharmony_ci uint8_t reserved; 50062306a36Sopenharmony_ci uint8_t fileType; 50162306a36Sopenharmony_ci struct lb_addr parentICBLocation; 50262306a36Sopenharmony_ci __le16 flags; 50362306a36Sopenharmony_ci} __packed; 50462306a36Sopenharmony_ci 50562306a36Sopenharmony_ci/* Strategy Type (ECMA 167r3 4/14.6.2) */ 50662306a36Sopenharmony_ci#define ICBTAG_STRATEGY_TYPE_UNDEF 0x0000 50762306a36Sopenharmony_ci#define ICBTAG_STRATEGY_TYPE_1 0x0001 50862306a36Sopenharmony_ci#define ICBTAG_STRATEGY_TYPE_2 0x0002 50962306a36Sopenharmony_ci#define ICBTAG_STRATEGY_TYPE_3 0x0003 51062306a36Sopenharmony_ci#define ICBTAG_STRATEGY_TYPE_4 0x0004 51162306a36Sopenharmony_ci 51262306a36Sopenharmony_ci/* File Type (ECMA 167r3 4/14.6.6) */ 51362306a36Sopenharmony_ci#define ICBTAG_FILE_TYPE_UNDEF 0x00 51462306a36Sopenharmony_ci#define ICBTAG_FILE_TYPE_USE 0x01 51562306a36Sopenharmony_ci#define ICBTAG_FILE_TYPE_PIE 0x02 51662306a36Sopenharmony_ci#define ICBTAG_FILE_TYPE_IE 0x03 51762306a36Sopenharmony_ci#define ICBTAG_FILE_TYPE_DIRECTORY 0x04 51862306a36Sopenharmony_ci#define ICBTAG_FILE_TYPE_REGULAR 0x05 51962306a36Sopenharmony_ci#define ICBTAG_FILE_TYPE_BLOCK 0x06 52062306a36Sopenharmony_ci#define ICBTAG_FILE_TYPE_CHAR 0x07 52162306a36Sopenharmony_ci#define ICBTAG_FILE_TYPE_EA 0x08 52262306a36Sopenharmony_ci#define ICBTAG_FILE_TYPE_FIFO 0x09 52362306a36Sopenharmony_ci#define ICBTAG_FILE_TYPE_SOCKET 0x0A 52462306a36Sopenharmony_ci#define ICBTAG_FILE_TYPE_TE 0x0B 52562306a36Sopenharmony_ci#define ICBTAG_FILE_TYPE_SYMLINK 0x0C 52662306a36Sopenharmony_ci#define ICBTAG_FILE_TYPE_STREAMDIR 0x0D 52762306a36Sopenharmony_ci 52862306a36Sopenharmony_ci/* Flags (ECMA 167r3 4/14.6.8) */ 52962306a36Sopenharmony_ci#define ICBTAG_FLAG_AD_MASK 0x0007 53062306a36Sopenharmony_ci#define ICBTAG_FLAG_AD_SHORT 0x0000 53162306a36Sopenharmony_ci#define ICBTAG_FLAG_AD_LONG 0x0001 53262306a36Sopenharmony_ci#define ICBTAG_FLAG_AD_EXTENDED 0x0002 53362306a36Sopenharmony_ci#define ICBTAG_FLAG_AD_IN_ICB 0x0003 53462306a36Sopenharmony_ci#define ICBTAG_FLAG_SORTED 0x0008 53562306a36Sopenharmony_ci#define ICBTAG_FLAG_NONRELOCATABLE 0x0010 53662306a36Sopenharmony_ci#define ICBTAG_FLAG_ARCHIVE 0x0020 53762306a36Sopenharmony_ci#define ICBTAG_FLAG_SETUID 0x0040 53862306a36Sopenharmony_ci#define ICBTAG_FLAG_SETGID 0x0080 53962306a36Sopenharmony_ci#define ICBTAG_FLAG_STICKY 0x0100 54062306a36Sopenharmony_ci#define ICBTAG_FLAG_CONTIGUOUS 0x0200 54162306a36Sopenharmony_ci#define ICBTAG_FLAG_SYSTEM 0x0400 54262306a36Sopenharmony_ci#define ICBTAG_FLAG_TRANSFORMED 0x0800 54362306a36Sopenharmony_ci#define ICBTAG_FLAG_MULTIVERSIONS 0x1000 54462306a36Sopenharmony_ci#define ICBTAG_FLAG_STREAM 0x2000 54562306a36Sopenharmony_ci 54662306a36Sopenharmony_ci/* Indirect Entry (ECMA 167r3 4/14.7) */ 54762306a36Sopenharmony_cistruct indirectEntry { 54862306a36Sopenharmony_ci struct tag descTag; 54962306a36Sopenharmony_ci struct icbtag icbTag; 55062306a36Sopenharmony_ci struct long_ad indirectICB; 55162306a36Sopenharmony_ci} __packed; 55262306a36Sopenharmony_ci 55362306a36Sopenharmony_ci/* Terminal Entry (ECMA 167r3 4/14.8) */ 55462306a36Sopenharmony_cistruct terminalEntry { 55562306a36Sopenharmony_ci struct tag descTag; 55662306a36Sopenharmony_ci struct icbtag icbTag; 55762306a36Sopenharmony_ci} __packed; 55862306a36Sopenharmony_ci 55962306a36Sopenharmony_ci/* File Entry (ECMA 167r3 4/14.9) */ 56062306a36Sopenharmony_cistruct fileEntry { 56162306a36Sopenharmony_ci struct tag descTag; 56262306a36Sopenharmony_ci struct icbtag icbTag; 56362306a36Sopenharmony_ci __le32 uid; 56462306a36Sopenharmony_ci __le32 gid; 56562306a36Sopenharmony_ci __le32 permissions; 56662306a36Sopenharmony_ci __le16 fileLinkCount; 56762306a36Sopenharmony_ci uint8_t recordFormat; 56862306a36Sopenharmony_ci uint8_t recordDisplayAttr; 56962306a36Sopenharmony_ci __le32 recordLength; 57062306a36Sopenharmony_ci __le64 informationLength; 57162306a36Sopenharmony_ci __le64 logicalBlocksRecorded; 57262306a36Sopenharmony_ci struct timestamp accessTime; 57362306a36Sopenharmony_ci struct timestamp modificationTime; 57462306a36Sopenharmony_ci struct timestamp attrTime; 57562306a36Sopenharmony_ci __le32 checkpoint; 57662306a36Sopenharmony_ci struct long_ad extendedAttrICB; 57762306a36Sopenharmony_ci struct regid impIdent; 57862306a36Sopenharmony_ci __le64 uniqueID; 57962306a36Sopenharmony_ci __le32 lengthExtendedAttr; 58062306a36Sopenharmony_ci __le32 lengthAllocDescs; 58162306a36Sopenharmony_ci uint8_t extendedAttr[]; 58262306a36Sopenharmony_ci /* uint8_t allocDescs[]; */ 58362306a36Sopenharmony_ci} __packed; 58462306a36Sopenharmony_ci 58562306a36Sopenharmony_ci/* Permissions (ECMA 167r3 4/14.9.5) */ 58662306a36Sopenharmony_ci#define FE_PERM_O_EXEC 0x00000001U 58762306a36Sopenharmony_ci#define FE_PERM_O_WRITE 0x00000002U 58862306a36Sopenharmony_ci#define FE_PERM_O_READ 0x00000004U 58962306a36Sopenharmony_ci#define FE_PERM_O_CHATTR 0x00000008U 59062306a36Sopenharmony_ci#define FE_PERM_O_DELETE 0x00000010U 59162306a36Sopenharmony_ci#define FE_PERM_G_EXEC 0x00000020U 59262306a36Sopenharmony_ci#define FE_PERM_G_WRITE 0x00000040U 59362306a36Sopenharmony_ci#define FE_PERM_G_READ 0x00000080U 59462306a36Sopenharmony_ci#define FE_PERM_G_CHATTR 0x00000100U 59562306a36Sopenharmony_ci#define FE_PERM_G_DELETE 0x00000200U 59662306a36Sopenharmony_ci#define FE_PERM_U_EXEC 0x00000400U 59762306a36Sopenharmony_ci#define FE_PERM_U_WRITE 0x00000800U 59862306a36Sopenharmony_ci#define FE_PERM_U_READ 0x00001000U 59962306a36Sopenharmony_ci#define FE_PERM_U_CHATTR 0x00002000U 60062306a36Sopenharmony_ci#define FE_PERM_U_DELETE 0x00004000U 60162306a36Sopenharmony_ci 60262306a36Sopenharmony_ci/* Record Format (ECMA 167r3 4/14.9.7) */ 60362306a36Sopenharmony_ci#define FE_RECORD_FMT_UNDEF 0x00 60462306a36Sopenharmony_ci#define FE_RECORD_FMT_FIXED_PAD 0x01 60562306a36Sopenharmony_ci#define FE_RECORD_FMT_FIXED 0x02 60662306a36Sopenharmony_ci#define FE_RECORD_FMT_VARIABLE8 0x03 60762306a36Sopenharmony_ci#define FE_RECORD_FMT_VARIABLE16 0x04 60862306a36Sopenharmony_ci#define FE_RECORD_FMT_VARIABLE16_MSB 0x05 60962306a36Sopenharmony_ci#define FE_RECORD_FMT_VARIABLE32 0x06 61062306a36Sopenharmony_ci#define FE_RECORD_FMT_PRINT 0x07 61162306a36Sopenharmony_ci#define FE_RECORD_FMT_LF 0x08 61262306a36Sopenharmony_ci#define FE_RECORD_FMT_CR 0x09 61362306a36Sopenharmony_ci#define FE_RECORD_FMT_CRLF 0x0A 61462306a36Sopenharmony_ci#define FE_RECORD_FMT_LFCR 0x0B 61562306a36Sopenharmony_ci 61662306a36Sopenharmony_ci/* Record Display Attributes (ECMA 167r3 4/14.9.8) */ 61762306a36Sopenharmony_ci#define FE_RECORD_DISPLAY_ATTR_UNDEF 0x00 61862306a36Sopenharmony_ci#define FE_RECORD_DISPLAY_ATTR_1 0x01 61962306a36Sopenharmony_ci#define FE_RECORD_DISPLAY_ATTR_2 0x02 62062306a36Sopenharmony_ci#define FE_RECORD_DISPLAY_ATTR_3 0x03 62162306a36Sopenharmony_ci 62262306a36Sopenharmony_ci/* Extended Attribute Header Descriptor (ECMA 167r3 4/14.10.1) */ 62362306a36Sopenharmony_cistruct extendedAttrHeaderDesc { 62462306a36Sopenharmony_ci struct tag descTag; 62562306a36Sopenharmony_ci __le32 impAttrLocation; 62662306a36Sopenharmony_ci __le32 appAttrLocation; 62762306a36Sopenharmony_ci} __packed; 62862306a36Sopenharmony_ci 62962306a36Sopenharmony_ci/* Generic Format (ECMA 167r3 4/14.10.2) */ 63062306a36Sopenharmony_cistruct genericFormat { 63162306a36Sopenharmony_ci __le32 attrType; 63262306a36Sopenharmony_ci uint8_t attrSubtype; 63362306a36Sopenharmony_ci uint8_t reserved[3]; 63462306a36Sopenharmony_ci __le32 attrLength; 63562306a36Sopenharmony_ci uint8_t attrData[]; 63662306a36Sopenharmony_ci} __packed; 63762306a36Sopenharmony_ci 63862306a36Sopenharmony_ci/* Character Set Information (ECMA 167r3 4/14.10.3) */ 63962306a36Sopenharmony_cistruct charSetInfo { 64062306a36Sopenharmony_ci __le32 attrType; 64162306a36Sopenharmony_ci uint8_t attrSubtype; 64262306a36Sopenharmony_ci uint8_t reserved[3]; 64362306a36Sopenharmony_ci __le32 attrLength; 64462306a36Sopenharmony_ci __le32 escapeSeqLength; 64562306a36Sopenharmony_ci uint8_t charSetType; 64662306a36Sopenharmony_ci uint8_t escapeSeq[]; 64762306a36Sopenharmony_ci} __packed; 64862306a36Sopenharmony_ci 64962306a36Sopenharmony_ci/* Alternate Permissions (ECMA 167r3 4/14.10.4) */ 65062306a36Sopenharmony_cistruct altPerms { 65162306a36Sopenharmony_ci __le32 attrType; 65262306a36Sopenharmony_ci uint8_t attrSubtype; 65362306a36Sopenharmony_ci uint8_t reserved[3]; 65462306a36Sopenharmony_ci __le32 attrLength; 65562306a36Sopenharmony_ci __le16 ownerIdent; 65662306a36Sopenharmony_ci __le16 groupIdent; 65762306a36Sopenharmony_ci __le16 permission; 65862306a36Sopenharmony_ci} __packed; 65962306a36Sopenharmony_ci 66062306a36Sopenharmony_ci/* File Times Extended Attribute (ECMA 167r3 4/14.10.5) */ 66162306a36Sopenharmony_cistruct fileTimesExtAttr { 66262306a36Sopenharmony_ci __le32 attrType; 66362306a36Sopenharmony_ci uint8_t attrSubtype; 66462306a36Sopenharmony_ci uint8_t reserved[3]; 66562306a36Sopenharmony_ci __le32 attrLength; 66662306a36Sopenharmony_ci __le32 dataLength; 66762306a36Sopenharmony_ci __le32 fileTimeExistence; 66862306a36Sopenharmony_ci uint8_t fileTimes; 66962306a36Sopenharmony_ci} __packed; 67062306a36Sopenharmony_ci 67162306a36Sopenharmony_ci/* FileTimeExistence (ECMA 167r3 4/14.10.5.6) */ 67262306a36Sopenharmony_ci#define FTE_CREATION 0x00000001 67362306a36Sopenharmony_ci#define FTE_DELETION 0x00000004 67462306a36Sopenharmony_ci#define FTE_EFFECTIVE 0x00000008 67562306a36Sopenharmony_ci#define FTE_BACKUP 0x00000002 67662306a36Sopenharmony_ci 67762306a36Sopenharmony_ci/* Information Times Extended Attribute (ECMA 167r3 4/14.10.6) */ 67862306a36Sopenharmony_cistruct infoTimesExtAttr { 67962306a36Sopenharmony_ci __le32 attrType; 68062306a36Sopenharmony_ci uint8_t attrSubtype; 68162306a36Sopenharmony_ci uint8_t reserved[3]; 68262306a36Sopenharmony_ci __le32 attrLength; 68362306a36Sopenharmony_ci __le32 dataLength; 68462306a36Sopenharmony_ci __le32 infoTimeExistence; 68562306a36Sopenharmony_ci uint8_t infoTimes[]; 68662306a36Sopenharmony_ci} __packed; 68762306a36Sopenharmony_ci 68862306a36Sopenharmony_ci/* Device Specification (ECMA 167r3 4/14.10.7) */ 68962306a36Sopenharmony_cistruct deviceSpec { 69062306a36Sopenharmony_ci __le32 attrType; 69162306a36Sopenharmony_ci uint8_t attrSubtype; 69262306a36Sopenharmony_ci uint8_t reserved[3]; 69362306a36Sopenharmony_ci __le32 attrLength; 69462306a36Sopenharmony_ci __le32 impUseLength; 69562306a36Sopenharmony_ci __le32 majorDeviceIdent; 69662306a36Sopenharmony_ci __le32 minorDeviceIdent; 69762306a36Sopenharmony_ci uint8_t impUse[]; 69862306a36Sopenharmony_ci} __packed; 69962306a36Sopenharmony_ci 70062306a36Sopenharmony_ci/* Implementation Use Extended Attr (ECMA 167r3 4/14.10.8) */ 70162306a36Sopenharmony_cistruct impUseExtAttr { 70262306a36Sopenharmony_ci __le32 attrType; 70362306a36Sopenharmony_ci uint8_t attrSubtype; 70462306a36Sopenharmony_ci uint8_t reserved[3]; 70562306a36Sopenharmony_ci __le32 attrLength; 70662306a36Sopenharmony_ci __le32 impUseLength; 70762306a36Sopenharmony_ci struct regid impIdent; 70862306a36Sopenharmony_ci uint8_t impUse[]; 70962306a36Sopenharmony_ci} __packed; 71062306a36Sopenharmony_ci 71162306a36Sopenharmony_ci/* Application Use Extended Attribute (ECMA 167r3 4/14.10.9) */ 71262306a36Sopenharmony_cistruct appUseExtAttr { 71362306a36Sopenharmony_ci __le32 attrType; 71462306a36Sopenharmony_ci uint8_t attrSubtype; 71562306a36Sopenharmony_ci uint8_t reserved[3]; 71662306a36Sopenharmony_ci __le32 attrLength; 71762306a36Sopenharmony_ci __le32 appUseLength; 71862306a36Sopenharmony_ci struct regid appIdent; 71962306a36Sopenharmony_ci uint8_t appUse[]; 72062306a36Sopenharmony_ci} __packed; 72162306a36Sopenharmony_ci 72262306a36Sopenharmony_ci#define EXTATTR_CHAR_SET 1 72362306a36Sopenharmony_ci#define EXTATTR_ALT_PERMS 3 72462306a36Sopenharmony_ci#define EXTATTR_FILE_TIMES 5 72562306a36Sopenharmony_ci#define EXTATTR_INFO_TIMES 6 72662306a36Sopenharmony_ci#define EXTATTR_DEV_SPEC 12 72762306a36Sopenharmony_ci#define EXTATTR_IMP_USE 2048 72862306a36Sopenharmony_ci#define EXTATTR_APP_USE 65536 72962306a36Sopenharmony_ci#define EXTATTR_SUBTYPE 1 73062306a36Sopenharmony_ci 73162306a36Sopenharmony_ci/* Unallocated Space Entry (ECMA 167r3 4/14.11) */ 73262306a36Sopenharmony_cistruct unallocSpaceEntry { 73362306a36Sopenharmony_ci struct tag descTag; 73462306a36Sopenharmony_ci struct icbtag icbTag; 73562306a36Sopenharmony_ci __le32 lengthAllocDescs; 73662306a36Sopenharmony_ci uint8_t allocDescs[]; 73762306a36Sopenharmony_ci} __packed; 73862306a36Sopenharmony_ci 73962306a36Sopenharmony_ci/* Space Bitmap Descriptor (ECMA 167r3 4/14.12) */ 74062306a36Sopenharmony_cistruct spaceBitmapDesc { 74162306a36Sopenharmony_ci struct tag descTag; 74262306a36Sopenharmony_ci __le32 numOfBits; 74362306a36Sopenharmony_ci __le32 numOfBytes; 74462306a36Sopenharmony_ci uint8_t bitmap[]; 74562306a36Sopenharmony_ci} __packed; 74662306a36Sopenharmony_ci 74762306a36Sopenharmony_ci/* Partition Integrity Entry (ECMA 167r3 4/14.13) */ 74862306a36Sopenharmony_cistruct partitionIntegrityEntry { 74962306a36Sopenharmony_ci struct tag descTag; 75062306a36Sopenharmony_ci struct icbtag icbTag; 75162306a36Sopenharmony_ci struct timestamp recordingDateAndTime; 75262306a36Sopenharmony_ci uint8_t integrityType; 75362306a36Sopenharmony_ci uint8_t reserved[175]; 75462306a36Sopenharmony_ci struct regid impIdent; 75562306a36Sopenharmony_ci uint8_t impUse[256]; 75662306a36Sopenharmony_ci} __packed; 75762306a36Sopenharmony_ci 75862306a36Sopenharmony_ci/* Short Allocation Descriptor (ECMA 167r3 4/14.14.1) */ 75962306a36Sopenharmony_ci 76062306a36Sopenharmony_ci/* Extent Length (ECMA 167r3 4/14.14.1.1) */ 76162306a36Sopenharmony_ci#define EXT_LENGTH_MASK 0x3FFFFFFF 76262306a36Sopenharmony_ci#define EXT_TYPE_MASK 0xC0000000 76362306a36Sopenharmony_ci#define EXT_RECORDED_ALLOCATED 0x00000000 76462306a36Sopenharmony_ci#define EXT_NOT_RECORDED_ALLOCATED 0x40000000 76562306a36Sopenharmony_ci#define EXT_NOT_RECORDED_NOT_ALLOCATED 0x80000000 76662306a36Sopenharmony_ci#define EXT_NEXT_EXTENT_ALLOCDESCS 0xC0000000 76762306a36Sopenharmony_ci 76862306a36Sopenharmony_ci/* Long Allocation Descriptor (ECMA 167r3 4/14.14.2) */ 76962306a36Sopenharmony_ci 77062306a36Sopenharmony_ci/* Extended Allocation Descriptor (ECMA 167r3 4/14.14.3) */ 77162306a36Sopenharmony_ci 77262306a36Sopenharmony_ci/* Logical Volume Header Descriptor (ECMA 167r3 4/14.15) */ 77362306a36Sopenharmony_cistruct logicalVolHeaderDesc { 77462306a36Sopenharmony_ci __le64 uniqueID; 77562306a36Sopenharmony_ci uint8_t reserved[24]; 77662306a36Sopenharmony_ci} __packed; 77762306a36Sopenharmony_ci 77862306a36Sopenharmony_ci/* Path Component (ECMA 167r3 4/14.16.1) */ 77962306a36Sopenharmony_cistruct pathComponent { 78062306a36Sopenharmony_ci uint8_t componentType; 78162306a36Sopenharmony_ci uint8_t lengthComponentIdent; 78262306a36Sopenharmony_ci __le16 componentFileVersionNum; 78362306a36Sopenharmony_ci dchars componentIdent[]; 78462306a36Sopenharmony_ci} __packed; 78562306a36Sopenharmony_ci 78662306a36Sopenharmony_ci/* File Entry (ECMA 167r3 4/14.17) */ 78762306a36Sopenharmony_cistruct extendedFileEntry { 78862306a36Sopenharmony_ci struct tag descTag; 78962306a36Sopenharmony_ci struct icbtag icbTag; 79062306a36Sopenharmony_ci __le32 uid; 79162306a36Sopenharmony_ci __le32 gid; 79262306a36Sopenharmony_ci __le32 permissions; 79362306a36Sopenharmony_ci __le16 fileLinkCount; 79462306a36Sopenharmony_ci uint8_t recordFormat; 79562306a36Sopenharmony_ci uint8_t recordDisplayAttr; 79662306a36Sopenharmony_ci __le32 recordLength; 79762306a36Sopenharmony_ci __le64 informationLength; 79862306a36Sopenharmony_ci __le64 objectSize; 79962306a36Sopenharmony_ci __le64 logicalBlocksRecorded; 80062306a36Sopenharmony_ci struct timestamp accessTime; 80162306a36Sopenharmony_ci struct timestamp modificationTime; 80262306a36Sopenharmony_ci struct timestamp createTime; 80362306a36Sopenharmony_ci struct timestamp attrTime; 80462306a36Sopenharmony_ci __le32 checkpoint; 80562306a36Sopenharmony_ci __le32 reserved; 80662306a36Sopenharmony_ci struct long_ad extendedAttrICB; 80762306a36Sopenharmony_ci struct long_ad streamDirectoryICB; 80862306a36Sopenharmony_ci struct regid impIdent; 80962306a36Sopenharmony_ci __le64 uniqueID; 81062306a36Sopenharmony_ci __le32 lengthExtendedAttr; 81162306a36Sopenharmony_ci __le32 lengthAllocDescs; 81262306a36Sopenharmony_ci uint8_t extendedAttr[]; 81362306a36Sopenharmony_ci /* uint8_t allocDescs[]; */ 81462306a36Sopenharmony_ci} __packed; 81562306a36Sopenharmony_ci 81662306a36Sopenharmony_ci#endif /* _ECMA_167_H */ 817