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