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