xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/linux/coda.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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