1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2d2d58e0eSFabian Frederick #ifndef AMIGAFFS_H 3d2d58e0eSFabian Frederick #define AMIGAFFS_H 4d2d58e0eSFabian Frederick 5d2d58e0eSFabian Frederick #include <linux/types.h> 6d2d58e0eSFabian Frederick #include <asm/byteorder.h> 7d2d58e0eSFabian Frederick 8d2d58e0eSFabian Frederick #define FS_OFS 0x444F5300 9d2d58e0eSFabian Frederick #define FS_FFS 0x444F5301 10d2d58e0eSFabian Frederick #define FS_INTLOFS 0x444F5302 11d2d58e0eSFabian Frederick #define FS_INTLFFS 0x444F5303 12d2d58e0eSFabian Frederick #define FS_DCOFS 0x444F5304 13d2d58e0eSFabian Frederick #define FS_DCFFS 0x444F5305 14d2d58e0eSFabian Frederick #define MUFS_FS 0x6d754653 /* 'muFS' */ 15d2d58e0eSFabian Frederick #define MUFS_OFS 0x6d754600 /* 'muF\0' */ 16d2d58e0eSFabian Frederick #define MUFS_FFS 0x6d754601 /* 'muF\1' */ 17d2d58e0eSFabian Frederick #define MUFS_INTLOFS 0x6d754602 /* 'muF\2' */ 18d2d58e0eSFabian Frederick #define MUFS_INTLFFS 0x6d754603 /* 'muF\3' */ 19d2d58e0eSFabian Frederick #define MUFS_DCOFS 0x6d754604 /* 'muF\4' */ 20d2d58e0eSFabian Frederick #define MUFS_DCFFS 0x6d754605 /* 'muF\5' */ 21d2d58e0eSFabian Frederick 22d2d58e0eSFabian Frederick #define T_SHORT 2 23d2d58e0eSFabian Frederick #define T_LIST 16 24d2d58e0eSFabian Frederick #define T_DATA 8 25d2d58e0eSFabian Frederick 26d2d58e0eSFabian Frederick #define ST_LINKFILE -4 27d2d58e0eSFabian Frederick #define ST_FILE -3 28d2d58e0eSFabian Frederick #define ST_ROOT 1 29d2d58e0eSFabian Frederick #define ST_USERDIR 2 30d2d58e0eSFabian Frederick #define ST_SOFTLINK 3 31d2d58e0eSFabian Frederick #define ST_LINKDIR 4 32d2d58e0eSFabian Frederick 33d2d58e0eSFabian Frederick #define AFFS_ROOT_BMAPS 25 34d2d58e0eSFabian Frederick 35487b25bcSDeepa Dinamani /* Seconds since Amiga epoch of 1978/01/01 to UNIX */ 36487b25bcSDeepa Dinamani #define AFFS_EPOCH_DELTA ((8 * 365 + 2) * 86400LL) 37487b25bcSDeepa Dinamani 38d2d58e0eSFabian Frederick struct affs_date { 39d2d58e0eSFabian Frederick __be32 days; 40d2d58e0eSFabian Frederick __be32 mins; 41d2d58e0eSFabian Frederick __be32 ticks; 42d2d58e0eSFabian Frederick }; 43d2d58e0eSFabian Frederick 44d2d58e0eSFabian Frederick struct affs_short_date { 45d2d58e0eSFabian Frederick __be16 days; 46d2d58e0eSFabian Frederick __be16 mins; 47d2d58e0eSFabian Frederick __be16 ticks; 48d2d58e0eSFabian Frederick }; 49d2d58e0eSFabian Frederick 50d2d58e0eSFabian Frederick struct affs_root_head { 51d2d58e0eSFabian Frederick __be32 ptype; 52*bf751ad0SThorsten Blum /* The following fields are not used, but kept as documentation. */ 53d2d58e0eSFabian Frederick __be32 spare1; 54d2d58e0eSFabian Frederick __be32 spare2; 55d2d58e0eSFabian Frederick __be32 hash_size; 56d2d58e0eSFabian Frederick __be32 spare3; 57d2d58e0eSFabian Frederick __be32 checksum; 58*bf751ad0SThorsten Blum __be32 hashtable[]; 59d2d58e0eSFabian Frederick }; 60d2d58e0eSFabian Frederick 61d2d58e0eSFabian Frederick struct affs_root_tail { 62d2d58e0eSFabian Frederick __be32 bm_flag; 63d2d58e0eSFabian Frederick __be32 bm_blk[AFFS_ROOT_BMAPS]; 64d2d58e0eSFabian Frederick __be32 bm_ext; 65d2d58e0eSFabian Frederick struct affs_date root_change; 66d2d58e0eSFabian Frederick u8 disk_name[32]; 67d2d58e0eSFabian Frederick __be32 spare1; 68d2d58e0eSFabian Frederick __be32 spare2; 69d2d58e0eSFabian Frederick struct affs_date disk_change; 70d2d58e0eSFabian Frederick struct affs_date disk_create; 71d2d58e0eSFabian Frederick __be32 spare3; 72d2d58e0eSFabian Frederick __be32 spare4; 73d2d58e0eSFabian Frederick __be32 dcache; 74d2d58e0eSFabian Frederick __be32 stype; 75d2d58e0eSFabian Frederick }; 76d2d58e0eSFabian Frederick 77d2d58e0eSFabian Frederick struct affs_head { 78d2d58e0eSFabian Frederick __be32 ptype; 79d2d58e0eSFabian Frederick __be32 key; 80d2d58e0eSFabian Frederick __be32 block_count; 81d2d58e0eSFabian Frederick __be32 spare1; 82d2d58e0eSFabian Frederick __be32 first_data; 83d2d58e0eSFabian Frederick __be32 checksum; 8438a381a0SKees Cook __be32 table[]; 85d2d58e0eSFabian Frederick }; 86d2d58e0eSFabian Frederick 87d2d58e0eSFabian Frederick struct affs_tail { 88d2d58e0eSFabian Frederick __be32 spare1; 89d2d58e0eSFabian Frederick __be16 uid; 90d2d58e0eSFabian Frederick __be16 gid; 91d2d58e0eSFabian Frederick __be32 protect; 92d2d58e0eSFabian Frederick __be32 size; 93d2d58e0eSFabian Frederick u8 comment[92]; 94d2d58e0eSFabian Frederick struct affs_date change; 95d2d58e0eSFabian Frederick u8 name[32]; 96d2d58e0eSFabian Frederick __be32 spare2; 97d2d58e0eSFabian Frederick __be32 original; 98d2d58e0eSFabian Frederick __be32 link_chain; 99d2d58e0eSFabian Frederick __be32 spare[5]; 100d2d58e0eSFabian Frederick __be32 hash_chain; 101d2d58e0eSFabian Frederick __be32 parent; 102d2d58e0eSFabian Frederick __be32 extension; 103d2d58e0eSFabian Frederick __be32 stype; 104d2d58e0eSFabian Frederick }; 105d2d58e0eSFabian Frederick 106d2d58e0eSFabian Frederick struct slink_front 107d2d58e0eSFabian Frederick { 108d2d58e0eSFabian Frederick __be32 ptype; 109d2d58e0eSFabian Frederick __be32 key; 110d2d58e0eSFabian Frederick __be32 spare1[3]; 111d2d58e0eSFabian Frederick __be32 checksum; 1120aef1d41SKees Cook u8 symname[]; /* depends on block size */ 113d2d58e0eSFabian Frederick }; 114d2d58e0eSFabian Frederick 115d2d58e0eSFabian Frederick struct affs_data_head 116d2d58e0eSFabian Frederick { 117d2d58e0eSFabian Frederick __be32 ptype; 118d2d58e0eSFabian Frederick __be32 key; 119d2d58e0eSFabian Frederick __be32 sequence; 120d2d58e0eSFabian Frederick __be32 size; 121d2d58e0eSFabian Frederick __be32 next; 122d2d58e0eSFabian Frederick __be32 checksum; 123e5f5ee82SKees Cook u8 data[]; /* depends on block size */ 124d2d58e0eSFabian Frederick }; 125d2d58e0eSFabian Frederick 126d2d58e0eSFabian Frederick /* Permission bits */ 127d2d58e0eSFabian Frederick 128d2d58e0eSFabian Frederick #define FIBF_OTR_READ 0x8000 129d2d58e0eSFabian Frederick #define FIBF_OTR_WRITE 0x4000 130d2d58e0eSFabian Frederick #define FIBF_OTR_EXECUTE 0x2000 131d2d58e0eSFabian Frederick #define FIBF_OTR_DELETE 0x1000 132d2d58e0eSFabian Frederick #define FIBF_GRP_READ 0x0800 133d2d58e0eSFabian Frederick #define FIBF_GRP_WRITE 0x0400 134d2d58e0eSFabian Frederick #define FIBF_GRP_EXECUTE 0x0200 135d2d58e0eSFabian Frederick #define FIBF_GRP_DELETE 0x0100 136d2d58e0eSFabian Frederick 137d2d58e0eSFabian Frederick #define FIBF_HIDDEN 0x0080 138d2d58e0eSFabian Frederick #define FIBF_SCRIPT 0x0040 139d2d58e0eSFabian Frederick #define FIBF_PURE 0x0020 /* no use under linux */ 140d2d58e0eSFabian Frederick #define FIBF_ARCHIVED 0x0010 /* never set, always cleared on write */ 141d2d58e0eSFabian Frederick #define FIBF_NOREAD 0x0008 /* 0 means allowed */ 142d2d58e0eSFabian Frederick #define FIBF_NOWRITE 0x0004 /* 0 means allowed */ 143d2d58e0eSFabian Frederick #define FIBF_NOEXECUTE 0x0002 /* 0 means allowed, ignored under linux */ 144d2d58e0eSFabian Frederick #define FIBF_NODELETE 0x0001 /* 0 means allowed */ 145d2d58e0eSFabian Frederick 146d2d58e0eSFabian Frederick #define FIBF_OWNER 0x000F /* Bits pertaining to owner */ 147d2d58e0eSFabian Frederick #define FIBF_MASK 0xEE0E /* Bits modified by Linux */ 148d2d58e0eSFabian Frederick 149d2d58e0eSFabian Frederick #endif 150