cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

osta_udf.h (9026B)


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