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