1 1.13 hannken /* $NetBSD: adosfs.h,v 1.13 2014/08/05 08:50:54 hannken Exp $ */ 2 1.1 jdolecek 3 1.1 jdolecek /* 4 1.1 jdolecek * Copyright (c) 1994 Christian E. Hopps 5 1.1 jdolecek * Copyright (c) 1996 Matthias Scheler 6 1.1 jdolecek * All rights reserved. 7 1.1 jdolecek * 8 1.1 jdolecek * Redistribution and use in source and binary forms, with or without 9 1.1 jdolecek * modification, are permitted provided that the following conditions 10 1.1 jdolecek * are met: 11 1.1 jdolecek * 1. Redistributions of source code must retain the above copyright 12 1.1 jdolecek * notice, this list of conditions and the following disclaimer. 13 1.1 jdolecek * 2. Redistributions in binary form must reproduce the above copyright 14 1.1 jdolecek * notice, this list of conditions and the following disclaimer in the 15 1.1 jdolecek * documentation and/or other materials provided with the distribution. 16 1.1 jdolecek * 3. All advertising materials mentioning features or use of this software 17 1.1 jdolecek * must display the following acknowledgement: 18 1.1 jdolecek * This product includes software developed by Christian E. Hopps. 19 1.1 jdolecek * 4. The name of the author may not be used to endorse or promote products 20 1.1 jdolecek * derived from this software without specific prior written permission 21 1.1 jdolecek * 22 1.1 jdolecek * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 23 1.1 jdolecek * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 24 1.1 jdolecek * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 25 1.1 jdolecek * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 26 1.1 jdolecek * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 27 1.1 jdolecek * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 1.1 jdolecek * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 1.1 jdolecek * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 1.1 jdolecek * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 31 1.1 jdolecek * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 1.1 jdolecek */ 33 1.1 jdolecek 34 1.8 christos #ifndef _ADOSFS_ADOSFS_H_ 35 1.8 christos #define _ADOSFS_ADOSFS_H_ 36 1.1 jdolecek /* 37 1.1 jdolecek * Arguments to mount amigados filesystems. 38 1.1 jdolecek */ 39 1.1 jdolecek struct adosfs_args { 40 1.1 jdolecek char *fspec; /* blocks special holding the fs to mount */ 41 1.7 jmmv struct export_args30 _pad1; /* compat with old userland tools */ 42 1.1 jdolecek uid_t uid; /* uid that owns adosfs files */ 43 1.1 jdolecek gid_t gid; /* gid that owns adosfs files */ 44 1.1 jdolecek mode_t mask; /* mask to be applied for adosfs perms */ 45 1.1 jdolecek }; 46 1.1 jdolecek 47 1.1 jdolecek #ifdef _KERNEL 48 1.2 thorpej #include <sys/mallocvar.h> 49 1.1 jdolecek #include <miscfs/genfs/genfs_node.h> 50 1.2 thorpej 51 1.2 thorpej MALLOC_DECLARE(M_ANODE); 52 1.1 jdolecek 53 1.1 jdolecek /* 54 1.1 jdolecek * Amigados datestamp. (from 1/1/1978 00:00:00 local) 55 1.1 jdolecek */ 56 1.1 jdolecek struct datestamp { 57 1.1 jdolecek u_int32_t days; 58 1.1 jdolecek u_int32_t mins; 59 1.1 jdolecek u_int32_t ticks; /* 20000 * (ticks % 50) = useconds */ 60 1.1 jdolecek /* ticks / 50 = seconds */ 61 1.1 jdolecek }; 62 1.1 jdolecek 63 1.1 jdolecek enum anode_type { AROOT, ADIR, AFILE, ALDIR, ALFILE, ASLINK }; 64 1.1 jdolecek 65 1.4 jdolecek /* Maximum file/directory name */ 66 1.4 jdolecek #define ADMAXNAMELEN 30 67 1.4 jdolecek 68 1.5 perry /* 69 1.1 jdolecek * similar to inode's, we use to represent: 70 1.1 jdolecek * the root dir, reg dirs, reg files and extension blocks 71 1.1 jdolecek * note the ``tab'' is a hash table for r/d, and a data block 72 1.1 jdolecek * table for f/e. it is always ANODETABSZ(ap) bytes in size. 73 1.1 jdolecek */ 74 1.1 jdolecek struct anode { 75 1.1 jdolecek struct genfs_node gnode; 76 1.1 jdolecek enum anode_type type; 77 1.4 jdolecek char name[ADMAXNAMELEN+1]; /* (r/d/f) name for object */ 78 1.1 jdolecek struct datestamp mtimev; /* (r) volume modified */ 79 1.1 jdolecek struct datestamp created; /* (r) volume created */ 80 1.1 jdolecek struct datestamp mtime; /* (r/d/f) last modified */ 81 1.1 jdolecek struct adosfsmount *amp; /* owner file system */ 82 1.1 jdolecek struct vnode *vp; /* owner vnode */ 83 1.1 jdolecek u_long fsize; /* (f) size of file in bytes */ 84 1.1 jdolecek u_long block; /* block num */ 85 1.1 jdolecek u_long pblock; /* (d/f/e) parent block */ 86 1.1 jdolecek u_long hashf; /* (d/f) hash forward */ 87 1.1 jdolecek u_long extb; /* (f/e) extension block number */ 88 1.1 jdolecek u_long linkto; /* (hd/hf) header this link points at */ 89 1.1 jdolecek u_long linknext; /* (d/f/hd/hf) next link (or head) in chain */ 90 1.1 jdolecek u_long lastlindblk; /* (f/hf) last logical indirect block */ 91 1.1 jdolecek u_long lastindblk; /* (f/hf) last indirect block read */ 92 1.1 jdolecek u_long *tab; /* (r/d) hash table */ 93 1.1 jdolecek int *tabi; /* (r/d) table info */ 94 1.1 jdolecek int ntabent; /* (r/d) number of entries in table */ 95 1.1 jdolecek int nwords; /* size of blocks in long words */ 96 1.1 jdolecek int adprot; /* (d/f) amigados protection bits */ 97 1.1 jdolecek uid_t uid; /* (d/f) uid of directory/file */ 98 1.1 jdolecek gid_t gid; /* (d/f) gid of directory/file */ 99 1.5 perry int flags; /* misc flags */ 100 1.1 jdolecek char *slinkto; /* name of file or dir */ 101 1.1 jdolecek }; 102 1.1 jdolecek #define VTOA(vp) ((struct anode *)(vp)->v_data) 103 1.1 jdolecek #define ATOV(ap) ((ap)->vp) 104 1.1 jdolecek #define ANODETABSZ(ap) (((ap)->nwords - 56) * sizeof(long)) 105 1.1 jdolecek #define ANODETABENT(ap) ((ap)->nwords - 56) 106 1.1 jdolecek #define ANODENDATBLKENT(ap) ((ap)->nwords - 56) 107 1.1 jdolecek 108 1.1 jdolecek /* 109 1.5 perry * mount data 110 1.1 jdolecek */ 111 1.1 jdolecek #define ANODEHASHSZ (512) 112 1.1 jdolecek 113 1.1 jdolecek struct adosfsmount { 114 1.1 jdolecek struct mount *mp; /* owner mount */ 115 1.1 jdolecek u_int32_t dostype; /* type of volume */ 116 1.1 jdolecek u_long rootb; /* root block number */ 117 1.1 jdolecek u_long bsize; /* size of blocks */ 118 1.1 jdolecek u_long nwords; /* size of blocks in long words */ 119 1.1 jdolecek u_long dbsize; /* data bytes per block */ 120 1.1 jdolecek uid_t uid; /* uid of mounting user */ 121 1.1 jdolecek gid_t gid; /* gid of mounting user */ 122 1.1 jdolecek u_long mask; /* mode mask */ 123 1.1 jdolecek struct vnode *devvp; /* blk device mounted on */ 124 1.1 jdolecek struct vnode *rootvp; /* out root vnode */ 125 1.1 jdolecek u_long *bitmap; /* allocation bitmap */ 126 1.1 jdolecek u_long numblks; /* number of usable blocks */ 127 1.1 jdolecek u_long freeblks; /* number of free blocks */ 128 1.1 jdolecek }; 129 1.1 jdolecek 130 1.1 jdolecek #define VFSTOADOSFS(mp) ((struct adosfsmount *)(mp)->mnt_data) 131 1.1 jdolecek 132 1.1 jdolecek #define IS_FFS(amp) ((amp)->dostype & 1) 133 1.1 jdolecek #define IS_INTER(amp) (((amp)->dostype & 7) > 1) 134 1.1 jdolecek 135 1.1 jdolecek /* 136 1.1 jdolecek * AmigaDOS block stuff. 137 1.1 jdolecek */ 138 1.1 jdolecek #define BBOFF (0) 139 1.1 jdolecek 140 1.1 jdolecek #define BPT_SHORT ((u_int32_t)2) 141 1.1 jdolecek #define BPT_DATA ((u_int32_t)8) 142 1.1 jdolecek #define BPT_LIST ((u_int32_t)16) 143 1.1 jdolecek 144 1.1 jdolecek #define BST_RDIR ((u_int32_t)1) 145 1.1 jdolecek #define BST_UDIR ((u_int32_t)2) 146 1.1 jdolecek #define BST_SLINK ((u_int32_t)3) 147 1.1 jdolecek #define BST_LDIR ((u_int32_t)4) 148 1.1 jdolecek #define BST_FILE ((u_int32_t)-3) 149 1.1 jdolecek #define BST_LFILE ((u_int32_t)-4) 150 1.1 jdolecek 151 1.1 jdolecek #define OFS_DATA_OFFSET (24) 152 1.1 jdolecek 153 1.1 jdolecek extern struct pool adosfs_node_pool; 154 1.1 jdolecek 155 1.1 jdolecek /* 156 1.1 jdolecek * utility protos 157 1.1 jdolecek */ 158 1.1 jdolecek #if BYTE_ORDER != BIG_ENDIAN 159 1.10 dsl u_int32_t adoswordn(struct buf *, int); 160 1.1 jdolecek #else 161 1.1 jdolecek #define adoswordn(bp,wn) (*((u_int32_t *)(bp)->b_data + (wn))) 162 1.1 jdolecek #endif 163 1.1 jdolecek 164 1.10 dsl u_int32_t adoscksum(struct buf *, int); 165 1.10 dsl int adoscaseequ(const u_char *, const u_char *, int, int); 166 1.10 dsl int adoshash(const u_char *, int, int, int); 167 1.10 dsl int adunixprot(int); 168 1.10 dsl int adosfs_getblktype(struct adosfsmount *, struct buf *); 169 1.10 dsl 170 1.10 dsl int adosfs_lookup(void *); 171 1.1 jdolecek 172 1.10 dsl extern int (**adosfs_vnodeop_p)(void *); 173 1.3 atatat 174 1.11 phx /* Should print a vnode or the vnode-op's arguments? */ 175 1.11 phx #define advopprint(p) /* XXX */ 176 1.11 phx 177 1.1 jdolecek #endif /* _KERNEL */ 178 1.8 christos #endif /* _ADOSFS_ADOSFS_H_ */ 179