1*53ee8cc1Swenshuai.xi /*
2*53ee8cc1Swenshuai.xi You may distribute this file under either of the two licenses that
3*53ee8cc1Swenshuai.xi follow at your discretion.
4*53ee8cc1Swenshuai.xi */
5*53ee8cc1Swenshuai.xi
6*53ee8cc1Swenshuai.xi /* BLURB lgpl
7*53ee8cc1Swenshuai.xi
8*53ee8cc1Swenshuai.xi Coda File System
9*53ee8cc1Swenshuai.xi Release 5
10*53ee8cc1Swenshuai.xi
11*53ee8cc1Swenshuai.xi Copyright (c) 1987-1999 Carnegie Mellon University
12*53ee8cc1Swenshuai.xi Additional copyrights listed below
13*53ee8cc1Swenshuai.xi
14*53ee8cc1Swenshuai.xi This code is distributed "AS IS" without warranty of any kind under
15*53ee8cc1Swenshuai.xi the terms of the GNU Library General Public Licence Version 2, as
16*53ee8cc1Swenshuai.xi shown in the file LICENSE, or under the license shown below. The
17*53ee8cc1Swenshuai.xi technical and financial contributors to Coda are listed in the file
18*53ee8cc1Swenshuai.xi CREDITS.
19*53ee8cc1Swenshuai.xi
20*53ee8cc1Swenshuai.xi Additional copyrights
21*53ee8cc1Swenshuai.xi */
22*53ee8cc1Swenshuai.xi
23*53ee8cc1Swenshuai.xi /*
24*53ee8cc1Swenshuai.xi
25*53ee8cc1Swenshuai.xi Coda: an Experimental Distributed File System
26*53ee8cc1Swenshuai.xi Release 4.0
27*53ee8cc1Swenshuai.xi
28*53ee8cc1Swenshuai.xi Copyright (c) 1987-1999 Carnegie Mellon University
29*53ee8cc1Swenshuai.xi All Rights Reserved
30*53ee8cc1Swenshuai.xi
31*53ee8cc1Swenshuai.xi Permission to use, copy, modify and distribute this software and its
32*53ee8cc1Swenshuai.xi documentation is hereby granted, provided that both the copyright
33*53ee8cc1Swenshuai.xi notice and this permission notice appear in all copies of the
34*53ee8cc1Swenshuai.xi software, derivative works or modified versions, and any portions
35*53ee8cc1Swenshuai.xi thereof, and that both notices appear in supporting documentation, and
36*53ee8cc1Swenshuai.xi that credit is given to Carnegie Mellon University in all documents
37*53ee8cc1Swenshuai.xi and publicity pertaining to direct or indirect use of this code or its
38*53ee8cc1Swenshuai.xi derivatives.
39*53ee8cc1Swenshuai.xi
40*53ee8cc1Swenshuai.xi CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS KNOWN TO HAVE BUGS,
41*53ee8cc1Swenshuai.xi SOME OF WHICH MAY HAVE SERIOUS CONSEQUENCES. CARNEGIE MELLON ALLOWS
42*53ee8cc1Swenshuai.xi FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION. CARNEGIE MELLON
43*53ee8cc1Swenshuai.xi DISCLAIMS ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER
44*53ee8cc1Swenshuai.xi RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE OR OF
45*53ee8cc1Swenshuai.xi ANY DERIVATIVE WORK.
46*53ee8cc1Swenshuai.xi
47*53ee8cc1Swenshuai.xi Carnegie Mellon encourages users of this software to return any
48*53ee8cc1Swenshuai.xi improvements or extensions that they make, and to grant Carnegie
49*53ee8cc1Swenshuai.xi Mellon the rights to redistribute these changes without encumbrance.
50*53ee8cc1Swenshuai.xi */
51*53ee8cc1Swenshuai.xi
52*53ee8cc1Swenshuai.xi /*
53*53ee8cc1Swenshuai.xi *
54*53ee8cc1Swenshuai.xi * Based on cfs.h from Mach, but revamped for increased simplicity.
55*53ee8cc1Swenshuai.xi * Linux modifications by
56*53ee8cc1Swenshuai.xi * Peter Braam, Aug 1996
57*53ee8cc1Swenshuai.xi */
58*53ee8cc1Swenshuai.xi
59*53ee8cc1Swenshuai.xi #ifndef _CODA_HEADER_
60*53ee8cc1Swenshuai.xi #define _CODA_HEADER_
61*53ee8cc1Swenshuai.xi
62*53ee8cc1Swenshuai.xi
63*53ee8cc1Swenshuai.xi /* Catch new _KERNEL defn for NetBSD and DJGPP/__CYGWIN32__ */
64*53ee8cc1Swenshuai.xi #if defined(__NetBSD__) || \
65*53ee8cc1Swenshuai.xi ((defined(DJGPP) || defined(__CYGWIN32__)) && !defined(KERNEL))
66*53ee8cc1Swenshuai.xi #include <sys/types.h>
67*53ee8cc1Swenshuai.xi #endif
68*53ee8cc1Swenshuai.xi
69*53ee8cc1Swenshuai.xi #ifndef CODA_MAXSYMLINKS
70*53ee8cc1Swenshuai.xi #define CODA_MAXSYMLINKS 10
71*53ee8cc1Swenshuai.xi #endif
72*53ee8cc1Swenshuai.xi
73*53ee8cc1Swenshuai.xi #if defined(DJGPP) || defined(__CYGWIN32__)
74*53ee8cc1Swenshuai.xi #ifdef KERNEL
75*53ee8cc1Swenshuai.xi typedef unsigned long u_long;
76*53ee8cc1Swenshuai.xi typedef unsigned int u_int;
77*53ee8cc1Swenshuai.xi typedef unsigned short u_short;
78*53ee8cc1Swenshuai.xi typedef u_long ino_t;
79*53ee8cc1Swenshuai.xi typedef u_long dev_t;
80*53ee8cc1Swenshuai.xi typedef void * caddr_t;
81*53ee8cc1Swenshuai.xi #ifdef DOS
82*53ee8cc1Swenshuai.xi typedef unsigned __int64 u_quad_t;
83*53ee8cc1Swenshuai.xi #else
84*53ee8cc1Swenshuai.xi typedef unsigned long long u_quad_t;
85*53ee8cc1Swenshuai.xi #endif
86*53ee8cc1Swenshuai.xi
87*53ee8cc1Swenshuai.xi #define inline
88*53ee8cc1Swenshuai.xi
89*53ee8cc1Swenshuai.xi struct timespec {
90*53ee8cc1Swenshuai.xi long ts_sec;
91*53ee8cc1Swenshuai.xi long ts_nsec;
92*53ee8cc1Swenshuai.xi };
93*53ee8cc1Swenshuai.xi #else /* DJGPP but not KERNEL */
94*53ee8cc1Swenshuai.xi #include <sys/time.h>
95*53ee8cc1Swenshuai.xi typedef unsigned long long u_quad_t;
96*53ee8cc1Swenshuai.xi #endif /* !KERNEL */
97*53ee8cc1Swenshuai.xi #endif /* !DJGPP */
98*53ee8cc1Swenshuai.xi
99*53ee8cc1Swenshuai.xi
100*53ee8cc1Swenshuai.xi #if defined(__linux__)
101*53ee8cc1Swenshuai.xi #include <linux/time.h>
102*53ee8cc1Swenshuai.xi #define cdev_t u_quad_t
103*53ee8cc1Swenshuai.xi #if !defined(_UQUAD_T_) && (!defined(__GLIBC__) || __GLIBC__ < 2)
104*53ee8cc1Swenshuai.xi #define _UQUAD_T_ 1
105*53ee8cc1Swenshuai.xi typedef unsigned long long u_quad_t;
106*53ee8cc1Swenshuai.xi #endif
107*53ee8cc1Swenshuai.xi #else
108*53ee8cc1Swenshuai.xi #define cdev_t dev_t
109*53ee8cc1Swenshuai.xi #endif
110*53ee8cc1Swenshuai.xi
111*53ee8cc1Swenshuai.xi #ifdef __CYGWIN32__
112*53ee8cc1Swenshuai.xi struct timespec {
113*53ee8cc1Swenshuai.xi time_t tv_sec; /* seconds */
114*53ee8cc1Swenshuai.xi long tv_nsec; /* nanoseconds */
115*53ee8cc1Swenshuai.xi };
116*53ee8cc1Swenshuai.xi #endif
117*53ee8cc1Swenshuai.xi
118*53ee8cc1Swenshuai.xi #ifndef __BIT_TYPES_DEFINED__
119*53ee8cc1Swenshuai.xi #define __BIT_TYPES_DEFINED__
120*53ee8cc1Swenshuai.xi typedef signed char int8_t;
121*53ee8cc1Swenshuai.xi typedef unsigned char u_int8_t;
122*53ee8cc1Swenshuai.xi typedef short int16_t;
123*53ee8cc1Swenshuai.xi typedef unsigned short u_int16_t;
124*53ee8cc1Swenshuai.xi typedef int int32_t;
125*53ee8cc1Swenshuai.xi typedef unsigned int u_int32_t;
126*53ee8cc1Swenshuai.xi #endif
127*53ee8cc1Swenshuai.xi
128*53ee8cc1Swenshuai.xi
129*53ee8cc1Swenshuai.xi /*
130*53ee8cc1Swenshuai.xi * Cfs constants
131*53ee8cc1Swenshuai.xi */
132*53ee8cc1Swenshuai.xi #define CODA_MAXNAMLEN 255
133*53ee8cc1Swenshuai.xi #define CODA_MAXPATHLEN 1024
134*53ee8cc1Swenshuai.xi #define CODA_MAXSYMLINK 10
135*53ee8cc1Swenshuai.xi
136*53ee8cc1Swenshuai.xi /* these are Coda's version of O_RDONLY etc combinations
137*53ee8cc1Swenshuai.xi * to deal with VFS open modes
138*53ee8cc1Swenshuai.xi */
139*53ee8cc1Swenshuai.xi #define C_O_READ 0x001
140*53ee8cc1Swenshuai.xi #define C_O_WRITE 0x002
141*53ee8cc1Swenshuai.xi #define C_O_TRUNC 0x010
142*53ee8cc1Swenshuai.xi #define C_O_EXCL 0x100
143*53ee8cc1Swenshuai.xi #define C_O_CREAT 0x200
144*53ee8cc1Swenshuai.xi
145*53ee8cc1Swenshuai.xi /* these are to find mode bits in Venus */
146*53ee8cc1Swenshuai.xi #define C_M_READ 00400
147*53ee8cc1Swenshuai.xi #define C_M_WRITE 00200
148*53ee8cc1Swenshuai.xi
149*53ee8cc1Swenshuai.xi /* for access Venus will use */
150*53ee8cc1Swenshuai.xi #define C_A_C_OK 8 /* Test for writing upon create. */
151*53ee8cc1Swenshuai.xi #define C_A_R_OK 4 /* Test for read permission. */
152*53ee8cc1Swenshuai.xi #define C_A_W_OK 2 /* Test for write permission. */
153*53ee8cc1Swenshuai.xi #define C_A_X_OK 1 /* Test for execute permission. */
154*53ee8cc1Swenshuai.xi #define C_A_F_OK 0 /* Test for existence. */
155*53ee8cc1Swenshuai.xi
156*53ee8cc1Swenshuai.xi
157*53ee8cc1Swenshuai.xi
158*53ee8cc1Swenshuai.xi #ifndef _VENUS_DIRENT_T_
159*53ee8cc1Swenshuai.xi #define _VENUS_DIRENT_T_ 1
160*53ee8cc1Swenshuai.xi struct venus_dirent {
161*53ee8cc1Swenshuai.xi u_int32_t d_fileno; /* file number of entry */
162*53ee8cc1Swenshuai.xi u_int16_t d_reclen; /* length of this record */
163*53ee8cc1Swenshuai.xi u_int8_t d_type; /* file type, see below */
164*53ee8cc1Swenshuai.xi u_int8_t d_namlen; /* length of string in d_name */
165*53ee8cc1Swenshuai.xi char d_name[CODA_MAXNAMLEN + 1];/* name must be no longer than this */
166*53ee8cc1Swenshuai.xi };
167*53ee8cc1Swenshuai.xi #undef DIRSIZ
168*53ee8cc1Swenshuai.xi #define DIRSIZ(dp) ((sizeof (struct venus_dirent) - (CODA_MAXNAMLEN+1)) + \
169*53ee8cc1Swenshuai.xi (((dp)->d_namlen+1 + 3) &~ 3))
170*53ee8cc1Swenshuai.xi
171*53ee8cc1Swenshuai.xi /*
172*53ee8cc1Swenshuai.xi * File types
173*53ee8cc1Swenshuai.xi */
174*53ee8cc1Swenshuai.xi #define CDT_UNKNOWN 0
175*53ee8cc1Swenshuai.xi #define CDT_FIFO 1
176*53ee8cc1Swenshuai.xi #define CDT_CHR 2
177*53ee8cc1Swenshuai.xi #define CDT_DIR 4
178*53ee8cc1Swenshuai.xi #define CDT_BLK 6
179*53ee8cc1Swenshuai.xi #define CDT_REG 8
180*53ee8cc1Swenshuai.xi #define CDT_LNK 10
181*53ee8cc1Swenshuai.xi #define CDT_SOCK 12
182*53ee8cc1Swenshuai.xi #define CDT_WHT 14
183*53ee8cc1Swenshuai.xi
184*53ee8cc1Swenshuai.xi /*
185*53ee8cc1Swenshuai.xi * Convert between stat structure types and directory types.
186*53ee8cc1Swenshuai.xi */
187*53ee8cc1Swenshuai.xi #define IFTOCDT(mode) (((mode) & 0170000) >> 12)
188*53ee8cc1Swenshuai.xi #define CDTTOIF(dirtype) ((dirtype) << 12)
189*53ee8cc1Swenshuai.xi
190*53ee8cc1Swenshuai.xi #endif
191*53ee8cc1Swenshuai.xi
192*53ee8cc1Swenshuai.xi #ifndef _VUID_T_
193*53ee8cc1Swenshuai.xi #define _VUID_T_
194*53ee8cc1Swenshuai.xi typedef u_int32_t vuid_t;
195*53ee8cc1Swenshuai.xi typedef u_int32_t vgid_t;
196*53ee8cc1Swenshuai.xi #endif /*_VUID_T_ */
197*53ee8cc1Swenshuai.xi
198*53ee8cc1Swenshuai.xi #ifdef CONFIG_CODA_FS_OLD_API
199*53ee8cc1Swenshuai.xi struct CodaFid {
200*53ee8cc1Swenshuai.xi u_int32_t opaque[3];
201*53ee8cc1Swenshuai.xi };
202*53ee8cc1Swenshuai.xi
coda_f2i(struct CodaFid * fid)203*53ee8cc1Swenshuai.xi static __inline__ ino_t coda_f2i(struct CodaFid *fid)
204*53ee8cc1Swenshuai.xi {
205*53ee8cc1Swenshuai.xi if ( ! fid )
206*53ee8cc1Swenshuai.xi return 0;
207*53ee8cc1Swenshuai.xi if (fid->opaque[1] == 0xfffffffe || fid->opaque[1] == 0xffffffff)
208*53ee8cc1Swenshuai.xi return ((fid->opaque[0] << 20) | (fid->opaque[2] & 0xfffff));
209*53ee8cc1Swenshuai.xi else
210*53ee8cc1Swenshuai.xi return (fid->opaque[2] + (fid->opaque[1]<<10) + (fid->opaque[0]<<20));
211*53ee8cc1Swenshuai.xi }
212*53ee8cc1Swenshuai.xi
213*53ee8cc1Swenshuai.xi struct coda_cred {
214*53ee8cc1Swenshuai.xi vuid_t cr_uid, cr_euid, cr_suid, cr_fsuid; /* Real, efftve, set, fs uid*/
215*53ee8cc1Swenshuai.xi vgid_t cr_groupid, cr_egid, cr_sgid, cr_fsgid; /* same for groups */
216*53ee8cc1Swenshuai.xi };
217*53ee8cc1Swenshuai.xi
218*53ee8cc1Swenshuai.xi #else /* not defined(CONFIG_CODA_FS_OLD_API) */
219*53ee8cc1Swenshuai.xi
220*53ee8cc1Swenshuai.xi struct CodaFid {
221*53ee8cc1Swenshuai.xi u_int32_t opaque[4];
222*53ee8cc1Swenshuai.xi };
223*53ee8cc1Swenshuai.xi
224*53ee8cc1Swenshuai.xi #define coda_f2i(fid)\
225*53ee8cc1Swenshuai.xi (fid ? (fid->opaque[3] ^ (fid->opaque[2]<<10) ^ (fid->opaque[1]<<20) ^ fid->opaque[0]) : 0)
226*53ee8cc1Swenshuai.xi
227*53ee8cc1Swenshuai.xi #endif
228*53ee8cc1Swenshuai.xi
229*53ee8cc1Swenshuai.xi #ifndef _VENUS_VATTR_T_
230*53ee8cc1Swenshuai.xi #define _VENUS_VATTR_T_
231*53ee8cc1Swenshuai.xi /*
232*53ee8cc1Swenshuai.xi * Vnode types. VNON means no type.
233*53ee8cc1Swenshuai.xi */
234*53ee8cc1Swenshuai.xi enum coda_vtype { C_VNON, C_VREG, C_VDIR, C_VBLK, C_VCHR, C_VLNK, C_VSOCK, C_VFIFO, C_VBAD };
235*53ee8cc1Swenshuai.xi
236*53ee8cc1Swenshuai.xi struct coda_vattr {
237*53ee8cc1Swenshuai.xi long va_type; /* vnode type (for create) */
238*53ee8cc1Swenshuai.xi u_short va_mode; /* files access mode and type */
239*53ee8cc1Swenshuai.xi short va_nlink; /* number of references to file */
240*53ee8cc1Swenshuai.xi vuid_t va_uid; /* owner user id */
241*53ee8cc1Swenshuai.xi vgid_t va_gid; /* owner group id */
242*53ee8cc1Swenshuai.xi long va_fileid; /* file id */
243*53ee8cc1Swenshuai.xi u_quad_t va_size; /* file size in bytes */
244*53ee8cc1Swenshuai.xi long va_blocksize; /* blocksize preferred for i/o */
245*53ee8cc1Swenshuai.xi struct timespec va_atime; /* time of last access */
246*53ee8cc1Swenshuai.xi struct timespec va_mtime; /* time of last modification */
247*53ee8cc1Swenshuai.xi struct timespec va_ctime; /* time file changed */
248*53ee8cc1Swenshuai.xi u_long va_gen; /* generation number of file */
249*53ee8cc1Swenshuai.xi u_long va_flags; /* flags defined for file */
250*53ee8cc1Swenshuai.xi cdev_t va_rdev; /* device special file represents */
251*53ee8cc1Swenshuai.xi u_quad_t va_bytes; /* bytes of disk space held by file */
252*53ee8cc1Swenshuai.xi u_quad_t va_filerev; /* file modification number */
253*53ee8cc1Swenshuai.xi };
254*53ee8cc1Swenshuai.xi
255*53ee8cc1Swenshuai.xi #endif
256*53ee8cc1Swenshuai.xi
257*53ee8cc1Swenshuai.xi /* structure used by CODA_STATFS for getting cache information from venus */
258*53ee8cc1Swenshuai.xi struct coda_statfs {
259*53ee8cc1Swenshuai.xi int32_t f_blocks;
260*53ee8cc1Swenshuai.xi int32_t f_bfree;
261*53ee8cc1Swenshuai.xi int32_t f_bavail;
262*53ee8cc1Swenshuai.xi int32_t f_files;
263*53ee8cc1Swenshuai.xi int32_t f_ffree;
264*53ee8cc1Swenshuai.xi };
265*53ee8cc1Swenshuai.xi
266*53ee8cc1Swenshuai.xi /*
267*53ee8cc1Swenshuai.xi * Kernel <--> Venus communications.
268*53ee8cc1Swenshuai.xi */
269*53ee8cc1Swenshuai.xi
270*53ee8cc1Swenshuai.xi #define CODA_ROOT 2
271*53ee8cc1Swenshuai.xi #define CODA_OPEN_BY_FD 3
272*53ee8cc1Swenshuai.xi #define CODA_OPEN 4
273*53ee8cc1Swenshuai.xi #define CODA_CLOSE 5
274*53ee8cc1Swenshuai.xi #define CODA_IOCTL 6
275*53ee8cc1Swenshuai.xi #define CODA_GETATTR 7
276*53ee8cc1Swenshuai.xi #define CODA_SETATTR 8
277*53ee8cc1Swenshuai.xi #define CODA_ACCESS 9
278*53ee8cc1Swenshuai.xi #define CODA_LOOKUP 10
279*53ee8cc1Swenshuai.xi #define CODA_CREATE 11
280*53ee8cc1Swenshuai.xi #define CODA_REMOVE 12
281*53ee8cc1Swenshuai.xi #define CODA_LINK 13
282*53ee8cc1Swenshuai.xi #define CODA_RENAME 14
283*53ee8cc1Swenshuai.xi #define CODA_MKDIR 15
284*53ee8cc1Swenshuai.xi #define CODA_RMDIR 16
285*53ee8cc1Swenshuai.xi #define CODA_SYMLINK 18
286*53ee8cc1Swenshuai.xi #define CODA_READLINK 19
287*53ee8cc1Swenshuai.xi #define CODA_FSYNC 20
288*53ee8cc1Swenshuai.xi #define CODA_VGET 22
289*53ee8cc1Swenshuai.xi #define CODA_SIGNAL 23
290*53ee8cc1Swenshuai.xi #define CODA_REPLACE 24 /* DOWNCALL */
291*53ee8cc1Swenshuai.xi #define CODA_FLUSH 25 /* DOWNCALL */
292*53ee8cc1Swenshuai.xi #define CODA_PURGEUSER 26 /* DOWNCALL */
293*53ee8cc1Swenshuai.xi #define CODA_ZAPFILE 27 /* DOWNCALL */
294*53ee8cc1Swenshuai.xi #define CODA_ZAPDIR 28 /* DOWNCALL */
295*53ee8cc1Swenshuai.xi #define CODA_PURGEFID 30 /* DOWNCALL */
296*53ee8cc1Swenshuai.xi #define CODA_OPEN_BY_PATH 31
297*53ee8cc1Swenshuai.xi #define CODA_RESOLVE 32
298*53ee8cc1Swenshuai.xi #define CODA_REINTEGRATE 33
299*53ee8cc1Swenshuai.xi #define CODA_STATFS 34
300*53ee8cc1Swenshuai.xi #define CODA_STORE 35
301*53ee8cc1Swenshuai.xi #define CODA_RELEASE 36
302*53ee8cc1Swenshuai.xi #define CODA_NCALLS 37
303*53ee8cc1Swenshuai.xi
304*53ee8cc1Swenshuai.xi #define DOWNCALL(opcode) (opcode >= CODA_REPLACE && opcode <= CODA_PURGEFID)
305*53ee8cc1Swenshuai.xi
306*53ee8cc1Swenshuai.xi #define VC_MAXDATASIZE 8192
307*53ee8cc1Swenshuai.xi #define VC_MAXMSGSIZE sizeof(union inputArgs)+sizeof(union outputArgs) +\
308*53ee8cc1Swenshuai.xi VC_MAXDATASIZE
309*53ee8cc1Swenshuai.xi
310*53ee8cc1Swenshuai.xi #define CIOC_KERNEL_VERSION _IOWR('c', 10, size_t)
311*53ee8cc1Swenshuai.xi
312*53ee8cc1Swenshuai.xi #if 0
313*53ee8cc1Swenshuai.xi #define CODA_KERNEL_VERSION 0 /* don't care about kernel version number */
314*53ee8cc1Swenshuai.xi #define CODA_KERNEL_VERSION 1 /* The old venus 4.6 compatible interface */
315*53ee8cc1Swenshuai.xi #endif
316*53ee8cc1Swenshuai.xi #ifdef CONFIG_CODA_FS_OLD_API
317*53ee8cc1Swenshuai.xi #define CODA_KERNEL_VERSION 2 /* venus_lookup got an extra parameter */
318*53ee8cc1Swenshuai.xi #else
319*53ee8cc1Swenshuai.xi #define CODA_KERNEL_VERSION 3 /* 128-bit file identifiers */
320*53ee8cc1Swenshuai.xi #endif
321*53ee8cc1Swenshuai.xi
322*53ee8cc1Swenshuai.xi /*
323*53ee8cc1Swenshuai.xi * Venus <-> Coda RPC arguments
324*53ee8cc1Swenshuai.xi */
325*53ee8cc1Swenshuai.xi struct coda_in_hdr {
326*53ee8cc1Swenshuai.xi u_int32_t opcode;
327*53ee8cc1Swenshuai.xi u_int32_t unique; /* Keep multiple outstanding msgs distinct */
328*53ee8cc1Swenshuai.xi #ifdef CONFIG_CODA_FS_OLD_API
329*53ee8cc1Swenshuai.xi u_int16_t pid; /* Common to all */
330*53ee8cc1Swenshuai.xi u_int16_t pgid; /* Common to all */
331*53ee8cc1Swenshuai.xi u_int16_t sid; /* Common to all */
332*53ee8cc1Swenshuai.xi struct coda_cred cred; /* Common to all */
333*53ee8cc1Swenshuai.xi #else
334*53ee8cc1Swenshuai.xi pid_t pid;
335*53ee8cc1Swenshuai.xi pid_t pgid;
336*53ee8cc1Swenshuai.xi vuid_t uid;
337*53ee8cc1Swenshuai.xi #endif
338*53ee8cc1Swenshuai.xi };
339*53ee8cc1Swenshuai.xi
340*53ee8cc1Swenshuai.xi /* Really important that opcode and unique are 1st two fields! */
341*53ee8cc1Swenshuai.xi struct coda_out_hdr {
342*53ee8cc1Swenshuai.xi u_int32_t opcode;
343*53ee8cc1Swenshuai.xi u_int32_t unique;
344*53ee8cc1Swenshuai.xi u_int32_t result;
345*53ee8cc1Swenshuai.xi };
346*53ee8cc1Swenshuai.xi
347*53ee8cc1Swenshuai.xi /* coda_root: NO_IN */
348*53ee8cc1Swenshuai.xi struct coda_root_out {
349*53ee8cc1Swenshuai.xi struct coda_out_hdr oh;
350*53ee8cc1Swenshuai.xi struct CodaFid VFid;
351*53ee8cc1Swenshuai.xi };
352*53ee8cc1Swenshuai.xi
353*53ee8cc1Swenshuai.xi struct coda_root_in {
354*53ee8cc1Swenshuai.xi struct coda_in_hdr in;
355*53ee8cc1Swenshuai.xi };
356*53ee8cc1Swenshuai.xi
357*53ee8cc1Swenshuai.xi /* coda_open: */
358*53ee8cc1Swenshuai.xi struct coda_open_in {
359*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
360*53ee8cc1Swenshuai.xi struct CodaFid VFid;
361*53ee8cc1Swenshuai.xi int flags;
362*53ee8cc1Swenshuai.xi };
363*53ee8cc1Swenshuai.xi
364*53ee8cc1Swenshuai.xi struct coda_open_out {
365*53ee8cc1Swenshuai.xi struct coda_out_hdr oh;
366*53ee8cc1Swenshuai.xi cdev_t dev;
367*53ee8cc1Swenshuai.xi ino_t inode;
368*53ee8cc1Swenshuai.xi };
369*53ee8cc1Swenshuai.xi
370*53ee8cc1Swenshuai.xi
371*53ee8cc1Swenshuai.xi /* coda_store: */
372*53ee8cc1Swenshuai.xi struct coda_store_in {
373*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
374*53ee8cc1Swenshuai.xi struct CodaFid VFid;
375*53ee8cc1Swenshuai.xi int flags;
376*53ee8cc1Swenshuai.xi };
377*53ee8cc1Swenshuai.xi
378*53ee8cc1Swenshuai.xi struct coda_store_out {
379*53ee8cc1Swenshuai.xi struct coda_out_hdr out;
380*53ee8cc1Swenshuai.xi };
381*53ee8cc1Swenshuai.xi
382*53ee8cc1Swenshuai.xi /* coda_release: */
383*53ee8cc1Swenshuai.xi struct coda_release_in {
384*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
385*53ee8cc1Swenshuai.xi struct CodaFid VFid;
386*53ee8cc1Swenshuai.xi int flags;
387*53ee8cc1Swenshuai.xi };
388*53ee8cc1Swenshuai.xi
389*53ee8cc1Swenshuai.xi struct coda_release_out {
390*53ee8cc1Swenshuai.xi struct coda_out_hdr out;
391*53ee8cc1Swenshuai.xi };
392*53ee8cc1Swenshuai.xi
393*53ee8cc1Swenshuai.xi /* coda_close: */
394*53ee8cc1Swenshuai.xi struct coda_close_in {
395*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
396*53ee8cc1Swenshuai.xi struct CodaFid VFid;
397*53ee8cc1Swenshuai.xi int flags;
398*53ee8cc1Swenshuai.xi };
399*53ee8cc1Swenshuai.xi
400*53ee8cc1Swenshuai.xi struct coda_close_out {
401*53ee8cc1Swenshuai.xi struct coda_out_hdr out;
402*53ee8cc1Swenshuai.xi };
403*53ee8cc1Swenshuai.xi
404*53ee8cc1Swenshuai.xi /* coda_ioctl: */
405*53ee8cc1Swenshuai.xi struct coda_ioctl_in {
406*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
407*53ee8cc1Swenshuai.xi struct CodaFid VFid;
408*53ee8cc1Swenshuai.xi int cmd;
409*53ee8cc1Swenshuai.xi int len;
410*53ee8cc1Swenshuai.xi int rwflag;
411*53ee8cc1Swenshuai.xi char *data; /* Place holder for data. */
412*53ee8cc1Swenshuai.xi };
413*53ee8cc1Swenshuai.xi
414*53ee8cc1Swenshuai.xi struct coda_ioctl_out {
415*53ee8cc1Swenshuai.xi struct coda_out_hdr oh;
416*53ee8cc1Swenshuai.xi int len;
417*53ee8cc1Swenshuai.xi caddr_t data; /* Place holder for data. */
418*53ee8cc1Swenshuai.xi };
419*53ee8cc1Swenshuai.xi
420*53ee8cc1Swenshuai.xi
421*53ee8cc1Swenshuai.xi /* coda_getattr: */
422*53ee8cc1Swenshuai.xi struct coda_getattr_in {
423*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
424*53ee8cc1Swenshuai.xi struct CodaFid VFid;
425*53ee8cc1Swenshuai.xi };
426*53ee8cc1Swenshuai.xi
427*53ee8cc1Swenshuai.xi struct coda_getattr_out {
428*53ee8cc1Swenshuai.xi struct coda_out_hdr oh;
429*53ee8cc1Swenshuai.xi struct coda_vattr attr;
430*53ee8cc1Swenshuai.xi };
431*53ee8cc1Swenshuai.xi
432*53ee8cc1Swenshuai.xi
433*53ee8cc1Swenshuai.xi /* coda_setattr: NO_OUT */
434*53ee8cc1Swenshuai.xi struct coda_setattr_in {
435*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
436*53ee8cc1Swenshuai.xi struct CodaFid VFid;
437*53ee8cc1Swenshuai.xi struct coda_vattr attr;
438*53ee8cc1Swenshuai.xi };
439*53ee8cc1Swenshuai.xi
440*53ee8cc1Swenshuai.xi struct coda_setattr_out {
441*53ee8cc1Swenshuai.xi struct coda_out_hdr out;
442*53ee8cc1Swenshuai.xi };
443*53ee8cc1Swenshuai.xi
444*53ee8cc1Swenshuai.xi /* coda_access: NO_OUT */
445*53ee8cc1Swenshuai.xi struct coda_access_in {
446*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
447*53ee8cc1Swenshuai.xi struct CodaFid VFid;
448*53ee8cc1Swenshuai.xi int flags;
449*53ee8cc1Swenshuai.xi };
450*53ee8cc1Swenshuai.xi
451*53ee8cc1Swenshuai.xi struct coda_access_out {
452*53ee8cc1Swenshuai.xi struct coda_out_hdr out;
453*53ee8cc1Swenshuai.xi };
454*53ee8cc1Swenshuai.xi
455*53ee8cc1Swenshuai.xi
456*53ee8cc1Swenshuai.xi /* lookup flags */
457*53ee8cc1Swenshuai.xi #define CLU_CASE_SENSITIVE 0x01
458*53ee8cc1Swenshuai.xi #define CLU_CASE_INSENSITIVE 0x02
459*53ee8cc1Swenshuai.xi
460*53ee8cc1Swenshuai.xi /* coda_lookup: */
461*53ee8cc1Swenshuai.xi struct coda_lookup_in {
462*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
463*53ee8cc1Swenshuai.xi struct CodaFid VFid;
464*53ee8cc1Swenshuai.xi int name; /* Place holder for data. */
465*53ee8cc1Swenshuai.xi int flags;
466*53ee8cc1Swenshuai.xi };
467*53ee8cc1Swenshuai.xi
468*53ee8cc1Swenshuai.xi struct coda_lookup_out {
469*53ee8cc1Swenshuai.xi struct coda_out_hdr oh;
470*53ee8cc1Swenshuai.xi struct CodaFid VFid;
471*53ee8cc1Swenshuai.xi int vtype;
472*53ee8cc1Swenshuai.xi };
473*53ee8cc1Swenshuai.xi
474*53ee8cc1Swenshuai.xi
475*53ee8cc1Swenshuai.xi /* coda_create: */
476*53ee8cc1Swenshuai.xi struct coda_create_in {
477*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
478*53ee8cc1Swenshuai.xi struct CodaFid VFid;
479*53ee8cc1Swenshuai.xi struct coda_vattr attr;
480*53ee8cc1Swenshuai.xi int excl;
481*53ee8cc1Swenshuai.xi int mode;
482*53ee8cc1Swenshuai.xi int name; /* Place holder for data. */
483*53ee8cc1Swenshuai.xi };
484*53ee8cc1Swenshuai.xi
485*53ee8cc1Swenshuai.xi struct coda_create_out {
486*53ee8cc1Swenshuai.xi struct coda_out_hdr oh;
487*53ee8cc1Swenshuai.xi struct CodaFid VFid;
488*53ee8cc1Swenshuai.xi struct coda_vattr attr;
489*53ee8cc1Swenshuai.xi };
490*53ee8cc1Swenshuai.xi
491*53ee8cc1Swenshuai.xi
492*53ee8cc1Swenshuai.xi /* coda_remove: NO_OUT */
493*53ee8cc1Swenshuai.xi struct coda_remove_in {
494*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
495*53ee8cc1Swenshuai.xi struct CodaFid VFid;
496*53ee8cc1Swenshuai.xi int name; /* Place holder for data. */
497*53ee8cc1Swenshuai.xi };
498*53ee8cc1Swenshuai.xi
499*53ee8cc1Swenshuai.xi struct coda_remove_out {
500*53ee8cc1Swenshuai.xi struct coda_out_hdr out;
501*53ee8cc1Swenshuai.xi };
502*53ee8cc1Swenshuai.xi
503*53ee8cc1Swenshuai.xi /* coda_link: NO_OUT */
504*53ee8cc1Swenshuai.xi struct coda_link_in {
505*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
506*53ee8cc1Swenshuai.xi struct CodaFid sourceFid; /* cnode to link *to* */
507*53ee8cc1Swenshuai.xi struct CodaFid destFid; /* Directory in which to place link */
508*53ee8cc1Swenshuai.xi int tname; /* Place holder for data. */
509*53ee8cc1Swenshuai.xi };
510*53ee8cc1Swenshuai.xi
511*53ee8cc1Swenshuai.xi struct coda_link_out {
512*53ee8cc1Swenshuai.xi struct coda_out_hdr out;
513*53ee8cc1Swenshuai.xi };
514*53ee8cc1Swenshuai.xi
515*53ee8cc1Swenshuai.xi
516*53ee8cc1Swenshuai.xi /* coda_rename: NO_OUT */
517*53ee8cc1Swenshuai.xi struct coda_rename_in {
518*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
519*53ee8cc1Swenshuai.xi struct CodaFid sourceFid;
520*53ee8cc1Swenshuai.xi int srcname;
521*53ee8cc1Swenshuai.xi struct CodaFid destFid;
522*53ee8cc1Swenshuai.xi int destname;
523*53ee8cc1Swenshuai.xi };
524*53ee8cc1Swenshuai.xi
525*53ee8cc1Swenshuai.xi struct coda_rename_out {
526*53ee8cc1Swenshuai.xi struct coda_out_hdr out;
527*53ee8cc1Swenshuai.xi };
528*53ee8cc1Swenshuai.xi
529*53ee8cc1Swenshuai.xi /* coda_mkdir: */
530*53ee8cc1Swenshuai.xi struct coda_mkdir_in {
531*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
532*53ee8cc1Swenshuai.xi struct CodaFid VFid;
533*53ee8cc1Swenshuai.xi struct coda_vattr attr;
534*53ee8cc1Swenshuai.xi int name; /* Place holder for data. */
535*53ee8cc1Swenshuai.xi };
536*53ee8cc1Swenshuai.xi
537*53ee8cc1Swenshuai.xi struct coda_mkdir_out {
538*53ee8cc1Swenshuai.xi struct coda_out_hdr oh;
539*53ee8cc1Swenshuai.xi struct CodaFid VFid;
540*53ee8cc1Swenshuai.xi struct coda_vattr attr;
541*53ee8cc1Swenshuai.xi };
542*53ee8cc1Swenshuai.xi
543*53ee8cc1Swenshuai.xi
544*53ee8cc1Swenshuai.xi /* coda_rmdir: NO_OUT */
545*53ee8cc1Swenshuai.xi struct coda_rmdir_in {
546*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
547*53ee8cc1Swenshuai.xi struct CodaFid VFid;
548*53ee8cc1Swenshuai.xi int name; /* Place holder for data. */
549*53ee8cc1Swenshuai.xi };
550*53ee8cc1Swenshuai.xi
551*53ee8cc1Swenshuai.xi struct coda_rmdir_out {
552*53ee8cc1Swenshuai.xi struct coda_out_hdr out;
553*53ee8cc1Swenshuai.xi };
554*53ee8cc1Swenshuai.xi
555*53ee8cc1Swenshuai.xi /* coda_symlink: NO_OUT */
556*53ee8cc1Swenshuai.xi struct coda_symlink_in {
557*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
558*53ee8cc1Swenshuai.xi struct CodaFid VFid; /* Directory to put symlink in */
559*53ee8cc1Swenshuai.xi int srcname;
560*53ee8cc1Swenshuai.xi struct coda_vattr attr;
561*53ee8cc1Swenshuai.xi int tname;
562*53ee8cc1Swenshuai.xi };
563*53ee8cc1Swenshuai.xi
564*53ee8cc1Swenshuai.xi struct coda_symlink_out {
565*53ee8cc1Swenshuai.xi struct coda_out_hdr out;
566*53ee8cc1Swenshuai.xi };
567*53ee8cc1Swenshuai.xi
568*53ee8cc1Swenshuai.xi /* coda_readlink: */
569*53ee8cc1Swenshuai.xi struct coda_readlink_in {
570*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
571*53ee8cc1Swenshuai.xi struct CodaFid VFid;
572*53ee8cc1Swenshuai.xi };
573*53ee8cc1Swenshuai.xi
574*53ee8cc1Swenshuai.xi struct coda_readlink_out {
575*53ee8cc1Swenshuai.xi struct coda_out_hdr oh;
576*53ee8cc1Swenshuai.xi int count;
577*53ee8cc1Swenshuai.xi caddr_t data; /* Place holder for data. */
578*53ee8cc1Swenshuai.xi };
579*53ee8cc1Swenshuai.xi
580*53ee8cc1Swenshuai.xi
581*53ee8cc1Swenshuai.xi /* coda_fsync: NO_OUT */
582*53ee8cc1Swenshuai.xi struct coda_fsync_in {
583*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
584*53ee8cc1Swenshuai.xi struct CodaFid VFid;
585*53ee8cc1Swenshuai.xi };
586*53ee8cc1Swenshuai.xi
587*53ee8cc1Swenshuai.xi struct coda_fsync_out {
588*53ee8cc1Swenshuai.xi struct coda_out_hdr out;
589*53ee8cc1Swenshuai.xi };
590*53ee8cc1Swenshuai.xi
591*53ee8cc1Swenshuai.xi /* coda_vget: */
592*53ee8cc1Swenshuai.xi struct coda_vget_in {
593*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
594*53ee8cc1Swenshuai.xi struct CodaFid VFid;
595*53ee8cc1Swenshuai.xi };
596*53ee8cc1Swenshuai.xi
597*53ee8cc1Swenshuai.xi struct coda_vget_out {
598*53ee8cc1Swenshuai.xi struct coda_out_hdr oh;
599*53ee8cc1Swenshuai.xi struct CodaFid VFid;
600*53ee8cc1Swenshuai.xi int vtype;
601*53ee8cc1Swenshuai.xi };
602*53ee8cc1Swenshuai.xi
603*53ee8cc1Swenshuai.xi
604*53ee8cc1Swenshuai.xi /* CODA_SIGNAL is out-of-band, doesn't need data. */
605*53ee8cc1Swenshuai.xi /* CODA_INVALIDATE is a venus->kernel call */
606*53ee8cc1Swenshuai.xi /* CODA_FLUSH is a venus->kernel call */
607*53ee8cc1Swenshuai.xi
608*53ee8cc1Swenshuai.xi /* coda_purgeuser: */
609*53ee8cc1Swenshuai.xi /* CODA_PURGEUSER is a venus->kernel call */
610*53ee8cc1Swenshuai.xi struct coda_purgeuser_out {
611*53ee8cc1Swenshuai.xi struct coda_out_hdr oh;
612*53ee8cc1Swenshuai.xi #ifdef CONFIG_CODA_FS_OLD_API
613*53ee8cc1Swenshuai.xi struct coda_cred cred;
614*53ee8cc1Swenshuai.xi #else
615*53ee8cc1Swenshuai.xi vuid_t uid;
616*53ee8cc1Swenshuai.xi #endif
617*53ee8cc1Swenshuai.xi };
618*53ee8cc1Swenshuai.xi
619*53ee8cc1Swenshuai.xi /* coda_zapfile: */
620*53ee8cc1Swenshuai.xi /* CODA_ZAPFILE is a venus->kernel call */
621*53ee8cc1Swenshuai.xi struct coda_zapfile_out {
622*53ee8cc1Swenshuai.xi struct coda_out_hdr oh;
623*53ee8cc1Swenshuai.xi struct CodaFid CodaFid;
624*53ee8cc1Swenshuai.xi };
625*53ee8cc1Swenshuai.xi
626*53ee8cc1Swenshuai.xi /* coda_zapdir: */
627*53ee8cc1Swenshuai.xi /* CODA_ZAPDIR is a venus->kernel call */
628*53ee8cc1Swenshuai.xi struct coda_zapdir_out {
629*53ee8cc1Swenshuai.xi struct coda_out_hdr oh;
630*53ee8cc1Swenshuai.xi struct CodaFid CodaFid;
631*53ee8cc1Swenshuai.xi };
632*53ee8cc1Swenshuai.xi
633*53ee8cc1Swenshuai.xi /* coda_purgefid: */
634*53ee8cc1Swenshuai.xi /* CODA_PURGEFID is a venus->kernel call */
635*53ee8cc1Swenshuai.xi struct coda_purgefid_out {
636*53ee8cc1Swenshuai.xi struct coda_out_hdr oh;
637*53ee8cc1Swenshuai.xi struct CodaFid CodaFid;
638*53ee8cc1Swenshuai.xi };
639*53ee8cc1Swenshuai.xi
640*53ee8cc1Swenshuai.xi /* coda_replace: */
641*53ee8cc1Swenshuai.xi /* CODA_REPLACE is a venus->kernel call */
642*53ee8cc1Swenshuai.xi struct coda_replace_out { /* coda_replace is a venus->kernel call */
643*53ee8cc1Swenshuai.xi struct coda_out_hdr oh;
644*53ee8cc1Swenshuai.xi struct CodaFid NewFid;
645*53ee8cc1Swenshuai.xi struct CodaFid OldFid;
646*53ee8cc1Swenshuai.xi };
647*53ee8cc1Swenshuai.xi
648*53ee8cc1Swenshuai.xi /* coda_open_by_fd: */
649*53ee8cc1Swenshuai.xi struct coda_open_by_fd_in {
650*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
651*53ee8cc1Swenshuai.xi struct CodaFid VFid;
652*53ee8cc1Swenshuai.xi int flags;
653*53ee8cc1Swenshuai.xi };
654*53ee8cc1Swenshuai.xi
655*53ee8cc1Swenshuai.xi struct coda_open_by_fd_out {
656*53ee8cc1Swenshuai.xi struct coda_out_hdr oh;
657*53ee8cc1Swenshuai.xi int fd;
658*53ee8cc1Swenshuai.xi
659*53ee8cc1Swenshuai.xi };
660*53ee8cc1Swenshuai.xi
661*53ee8cc1Swenshuai.xi /* coda_open_by_path: */
662*53ee8cc1Swenshuai.xi struct coda_open_by_path_in {
663*53ee8cc1Swenshuai.xi struct coda_in_hdr ih;
664*53ee8cc1Swenshuai.xi struct CodaFid VFid;
665*53ee8cc1Swenshuai.xi int flags;
666*53ee8cc1Swenshuai.xi };
667*53ee8cc1Swenshuai.xi
668*53ee8cc1Swenshuai.xi struct coda_open_by_path_out {
669*53ee8cc1Swenshuai.xi struct coda_out_hdr oh;
670*53ee8cc1Swenshuai.xi int path;
671*53ee8cc1Swenshuai.xi };
672*53ee8cc1Swenshuai.xi
673*53ee8cc1Swenshuai.xi /* coda_statfs: NO_IN */
674*53ee8cc1Swenshuai.xi struct coda_statfs_in {
675*53ee8cc1Swenshuai.xi struct coda_in_hdr in;
676*53ee8cc1Swenshuai.xi };
677*53ee8cc1Swenshuai.xi
678*53ee8cc1Swenshuai.xi struct coda_statfs_out {
679*53ee8cc1Swenshuai.xi struct coda_out_hdr oh;
680*53ee8cc1Swenshuai.xi struct coda_statfs stat;
681*53ee8cc1Swenshuai.xi };
682*53ee8cc1Swenshuai.xi
683*53ee8cc1Swenshuai.xi /*
684*53ee8cc1Swenshuai.xi * Occasionally, we don't cache the fid returned by CODA_LOOKUP.
685*53ee8cc1Swenshuai.xi * For instance, if the fid is inconsistent.
686*53ee8cc1Swenshuai.xi * This case is handled by setting the top bit of the type result parameter.
687*53ee8cc1Swenshuai.xi */
688*53ee8cc1Swenshuai.xi #define CODA_NOCACHE 0x80000000
689*53ee8cc1Swenshuai.xi
690*53ee8cc1Swenshuai.xi union inputArgs {
691*53ee8cc1Swenshuai.xi struct coda_in_hdr ih; /* NB: every struct below begins with an ih */
692*53ee8cc1Swenshuai.xi struct coda_open_in coda_open;
693*53ee8cc1Swenshuai.xi struct coda_store_in coda_store;
694*53ee8cc1Swenshuai.xi struct coda_release_in coda_release;
695*53ee8cc1Swenshuai.xi struct coda_close_in coda_close;
696*53ee8cc1Swenshuai.xi struct coda_ioctl_in coda_ioctl;
697*53ee8cc1Swenshuai.xi struct coda_getattr_in coda_getattr;
698*53ee8cc1Swenshuai.xi struct coda_setattr_in coda_setattr;
699*53ee8cc1Swenshuai.xi struct coda_access_in coda_access;
700*53ee8cc1Swenshuai.xi struct coda_lookup_in coda_lookup;
701*53ee8cc1Swenshuai.xi struct coda_create_in coda_create;
702*53ee8cc1Swenshuai.xi struct coda_remove_in coda_remove;
703*53ee8cc1Swenshuai.xi struct coda_link_in coda_link;
704*53ee8cc1Swenshuai.xi struct coda_rename_in coda_rename;
705*53ee8cc1Swenshuai.xi struct coda_mkdir_in coda_mkdir;
706*53ee8cc1Swenshuai.xi struct coda_rmdir_in coda_rmdir;
707*53ee8cc1Swenshuai.xi struct coda_symlink_in coda_symlink;
708*53ee8cc1Swenshuai.xi struct coda_readlink_in coda_readlink;
709*53ee8cc1Swenshuai.xi struct coda_fsync_in coda_fsync;
710*53ee8cc1Swenshuai.xi struct coda_vget_in coda_vget;
711*53ee8cc1Swenshuai.xi struct coda_open_by_fd_in coda_open_by_fd;
712*53ee8cc1Swenshuai.xi struct coda_open_by_path_in coda_open_by_path;
713*53ee8cc1Swenshuai.xi struct coda_statfs_in coda_statfs;
714*53ee8cc1Swenshuai.xi };
715*53ee8cc1Swenshuai.xi
716*53ee8cc1Swenshuai.xi union outputArgs {
717*53ee8cc1Swenshuai.xi struct coda_out_hdr oh; /* NB: every struct below begins with an oh */
718*53ee8cc1Swenshuai.xi struct coda_root_out coda_root;
719*53ee8cc1Swenshuai.xi struct coda_open_out coda_open;
720*53ee8cc1Swenshuai.xi struct coda_ioctl_out coda_ioctl;
721*53ee8cc1Swenshuai.xi struct coda_getattr_out coda_getattr;
722*53ee8cc1Swenshuai.xi struct coda_lookup_out coda_lookup;
723*53ee8cc1Swenshuai.xi struct coda_create_out coda_create;
724*53ee8cc1Swenshuai.xi struct coda_mkdir_out coda_mkdir;
725*53ee8cc1Swenshuai.xi struct coda_readlink_out coda_readlink;
726*53ee8cc1Swenshuai.xi struct coda_vget_out coda_vget;
727*53ee8cc1Swenshuai.xi struct coda_purgeuser_out coda_purgeuser;
728*53ee8cc1Swenshuai.xi struct coda_zapfile_out coda_zapfile;
729*53ee8cc1Swenshuai.xi struct coda_zapdir_out coda_zapdir;
730*53ee8cc1Swenshuai.xi struct coda_purgefid_out coda_purgefid;
731*53ee8cc1Swenshuai.xi struct coda_replace_out coda_replace;
732*53ee8cc1Swenshuai.xi struct coda_open_by_fd_out coda_open_by_fd;
733*53ee8cc1Swenshuai.xi struct coda_open_by_path_out coda_open_by_path;
734*53ee8cc1Swenshuai.xi struct coda_statfs_out coda_statfs;
735*53ee8cc1Swenshuai.xi };
736*53ee8cc1Swenshuai.xi
737*53ee8cc1Swenshuai.xi union coda_downcalls {
738*53ee8cc1Swenshuai.xi /* CODA_INVALIDATE is a venus->kernel call */
739*53ee8cc1Swenshuai.xi /* CODA_FLUSH is a venus->kernel call */
740*53ee8cc1Swenshuai.xi struct coda_purgeuser_out purgeuser;
741*53ee8cc1Swenshuai.xi struct coda_zapfile_out zapfile;
742*53ee8cc1Swenshuai.xi struct coda_zapdir_out zapdir;
743*53ee8cc1Swenshuai.xi struct coda_purgefid_out purgefid;
744*53ee8cc1Swenshuai.xi struct coda_replace_out replace;
745*53ee8cc1Swenshuai.xi };
746*53ee8cc1Swenshuai.xi
747*53ee8cc1Swenshuai.xi
748*53ee8cc1Swenshuai.xi /*
749*53ee8cc1Swenshuai.xi * Used for identifying usage of "Control" and pioctls
750*53ee8cc1Swenshuai.xi */
751*53ee8cc1Swenshuai.xi
752*53ee8cc1Swenshuai.xi #define PIOCPARM_MASK 0x0000ffff
753*53ee8cc1Swenshuai.xi struct ViceIoctl {
754*53ee8cc1Swenshuai.xi void *in; /* Data to be transferred in */
755*53ee8cc1Swenshuai.xi void *out; /* Data to be transferred out */
756*53ee8cc1Swenshuai.xi u_short in_size; /* Size of input buffer <= 2K */
757*53ee8cc1Swenshuai.xi u_short out_size; /* Maximum size of output buffer, <= 2K */
758*53ee8cc1Swenshuai.xi };
759*53ee8cc1Swenshuai.xi
760*53ee8cc1Swenshuai.xi struct PioctlData {
761*53ee8cc1Swenshuai.xi const char *path;
762*53ee8cc1Swenshuai.xi int follow;
763*53ee8cc1Swenshuai.xi struct ViceIoctl vi;
764*53ee8cc1Swenshuai.xi };
765*53ee8cc1Swenshuai.xi
766*53ee8cc1Swenshuai.xi #define CODA_CONTROL ".CONTROL"
767*53ee8cc1Swenshuai.xi #define CODA_CONTROLLEN 8
768*53ee8cc1Swenshuai.xi #define CTL_INO -1
769*53ee8cc1Swenshuai.xi
770*53ee8cc1Swenshuai.xi /* Data passed to mount */
771*53ee8cc1Swenshuai.xi
772*53ee8cc1Swenshuai.xi #define CODA_MOUNT_VERSION 1
773*53ee8cc1Swenshuai.xi
774*53ee8cc1Swenshuai.xi struct coda_mount_data {
775*53ee8cc1Swenshuai.xi int version;
776*53ee8cc1Swenshuai.xi int fd; /* Opened device */
777*53ee8cc1Swenshuai.xi };
778*53ee8cc1Swenshuai.xi
779*53ee8cc1Swenshuai.xi #endif
780*53ee8cc1Swenshuai.xi
781