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