FreeBSD/Linux Kernel Cross Reference
sys/fs/adosfs/adosfs.h
1 /* $NetBSD: adosfs.h,v 1.2.4.1 2004/05/23 10:45:17 tron Exp $ */
2
3 /*
4 * Copyright (c) 1994 Christian E. Hopps
5 * Copyright (c) 1996 Matthias Scheler
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 /*
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 */
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 */
43 };
44
45 #ifdef _KERNEL
46 #include <sys/mallocvar.h>
47 #include <miscfs/genfs/genfs_node.h>
48
49 MALLOC_DECLARE(M_ANODE);
50
51 /*
52 * Amigados datestamp. (from 1/1/1978 00:00:00 local)
53 */
54 struct datestamp {
55 u_int32_t days;
56 u_int32_t mins;
57 u_int32_t ticks; /* 20000 * (ticks % 50) = useconds */
58 /* ticks / 50 = seconds */
59 };
60
61 enum anode_type { AROOT, ADIR, AFILE, ALDIR, ALFILE, ASLINK };
62
63 /*
64 * similar to inode's, we use to represent:
65 * the root dir, reg dirs, reg files and extension blocks
66 * note the ``tab'' is a hash table for r/d, and a data block
67 * table for f/e. it is always ANODETABSZ(ap) bytes in size.
68 */
69 struct anode {
70 struct genfs_node gnode;
71 LIST_ENTRY(anode) link;
72 enum anode_type type;
73 char name[31]; /* (r/d/f) name for object */
74 struct datestamp mtimev; /* (r) volume modified */
75 struct datestamp created; /* (r) volume created */
76 struct datestamp mtime; /* (r/d/f) last modified */
77 struct adosfsmount *amp; /* owner file system */
78 struct vnode *vp; /* owner vnode */
79 u_long fsize; /* (f) size of file in bytes */
80 u_long block; /* block num */
81 u_long pblock; /* (d/f/e) parent block */
82 u_long hashf; /* (d/f) hash forward */
83 u_long extb; /* (f/e) extension block number */
84 u_long linkto; /* (hd/hf) header this link points at */
85 u_long linknext; /* (d/f/hd/hf) next link (or head) in chain */
86 u_long lastlindblk; /* (f/hf) last logical indirect block */
87 u_long lastindblk; /* (f/hf) last indirect block read */
88 u_long *tab; /* (r/d) hash table */
89 int *tabi; /* (r/d) table info */
90 int ntabent; /* (r/d) number of entries in table */
91 int nwords; /* size of blocks in long words */
92 int adprot; /* (d/f) amigados protection bits */
93 uid_t uid; /* (d/f) uid of directory/file */
94 gid_t gid; /* (d/f) gid of directory/file */
95 int flags; /* misc flags */
96 char *slinkto; /* name of file or dir */
97 };
98 #define VTOA(vp) ((struct anode *)(vp)->v_data)
99 #define ATOV(ap) ((ap)->vp)
100 #define ANODETABSZ(ap) (((ap)->nwords - 56) * sizeof(long))
101 #define ANODETABENT(ap) ((ap)->nwords - 56)
102 #define ANODENDATBLKENT(ap) ((ap)->nwords - 56)
103
104 /*
105 * mount data
106 */
107 #define ANODEHASHSZ (512)
108
109 struct adosfsmount {
110 LIST_HEAD(anodechain, anode) anodetab[ANODEHASHSZ];
111 struct mount *mp; /* owner mount */
112 u_int32_t dostype; /* type of volume */
113 u_long rootb; /* root block number */
114 u_long secsperblk; /* sectors per block */
115 u_long bsize; /* size of blocks */
116 u_long nwords; /* size of blocks in long words */
117 u_long dbsize; /* data bytes per block */
118 uid_t uid; /* uid of mounting user */
119 gid_t gid; /* gid of mounting user */
120 u_long mask; /* mode mask */
121 struct vnode *devvp; /* blk device mounted on */
122 struct vnode *rootvp; /* out root vnode */
123 struct netexport export;
124 u_long *bitmap; /* allocation bitmap */
125 u_long numblks; /* number of usable blocks */
126 u_long freeblks; /* number of free blocks */
127 };
128
129 #define VFSTOADOSFS(mp) ((struct adosfsmount *)(mp)->mnt_data)
130
131 #define IS_FFS(amp) ((amp)->dostype & 1)
132 #define IS_INTER(amp) (((amp)->dostype & 7) > 1)
133
134 /*
135 * AmigaDOS block stuff.
136 */
137 #define BBOFF (0)
138
139 #define BPT_SHORT ((u_int32_t)2)
140 #define BPT_DATA ((u_int32_t)8)
141 #define BPT_LIST ((u_int32_t)16)
142
143 #define BST_RDIR ((u_int32_t)1)
144 #define BST_UDIR ((u_int32_t)2)
145 #define BST_SLINK ((u_int32_t)3)
146 #define BST_LDIR ((u_int32_t)4)
147 #define BST_FILE ((u_int32_t)-3)
148 #define BST_LFILE ((u_int32_t)-4)
149
150 #define OFS_DATA_OFFSET (24)
151
152 extern struct pool adosfs_node_pool;
153
154 /*
155 * utility protos
156 */
157 #if BYTE_ORDER != BIG_ENDIAN
158 u_int32_t adoswordn __P((struct buf *, int));
159 #else
160 #define adoswordn(bp,wn) (*((u_int32_t *)(bp)->b_data + (wn)))
161 #endif
162
163 u_int32_t adoscksum __P((struct buf *, int));
164 int adoscaseequ __P((const u_char *, const u_char *, int, int));
165 int adoshash __P((const u_char *, int, int, int));
166 int adunixprot __P((int));
167 int adosfs_getblktype __P((struct adosfsmount *, struct buf *));
168
169 struct vnode *adosfs_ahashget __P((struct mount *, ino_t));
170 void adosfs_ainshash __P((struct adosfsmount *, struct anode *));
171 void adosfs_aremhash __P((struct anode *));
172
173 int adosfs_lookup __P((void *));
174
175 extern int (**adosfs_vnodeop_p) __P((void *));
176
177 #ifdef SYSCTL_SETUP_PROTO
178 SYSCTL_SETUP_PROTO(sysctl_vfs_adosfs_setup);
179 #endif /* SYSCTL_SETUP_PROTO */
180 #endif /* _KERNEL */
Cache object: 7a6428895f6d7641c6fab7ef9482c918
|