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