brintos

brintos / linux-shallow public Read only

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