"Fossies" - the Fresh Open Source Software Archive

Member "linux-coda-6.9/linux2.4/linux/coda.h" (1 Dec 2009, 18164 Bytes) of package /linux/misc/old/linux-coda-6.9.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

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