Mon Dec 14 19:36:57 2009 UTC ()
Revert previous version bump which should not have been in the supplied
patch. This maintains compatibility between 5.0 and 5.1 (at the cost of
needing userland libraries recompiled if one's been tracking netbsd-5).


(sborrill)
diff -r1.65.20.1 -r1.65.20.2 src/sys/fs/puffs/puffs_msgif.h

cvs diff -r1.65.20.1 -r1.65.20.2 src/sys/fs/puffs/puffs_msgif.h (switch to unified diff)

--- src/sys/fs/puffs/puffs_msgif.h 2009/10/18 12:46:07 1.65.20.1
+++ src/sys/fs/puffs/puffs_msgif.h 2009/12/14 19:36:57 1.65.20.2
@@ -1,604 +1,604 @@ @@ -1,604 +1,604 @@
1/* $NetBSD: puffs_msgif.h,v 1.65.20.1 2009/10/18 12:46:07 sborrill Exp $ */ 1/* $NetBSD: puffs_msgif.h,v 1.65.20.2 2009/12/14 19:36:57 sborrill Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2005, 2006, 2007 Antti Kantee. All Rights Reserved. 4 * Copyright (c) 2005, 2006, 2007 Antti Kantee. All Rights Reserved.
5 * 5 *
6 * Development of this software was supported by the 6 * Development of this software was supported by the
7 * Google Summer of Code program and the Ulla Tuominen Foundation. 7 * Google Summer of Code program and the Ulla Tuominen Foundation.
8 * The Google SoC project was mentored by Bill Studenmund. 8 * The Google SoC project was mentored by Bill Studenmund.
9 * 9 *
10 * Redistribution and use in source and binary forms, with or without 10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions 11 * modification, are permitted provided that the following conditions
12 * are met: 12 * are met:
13 * 1. Redistributions of source code must retain the above copyright 13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer. 14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright 15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the 16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution. 17 * documentation and/or other materials provided with the distribution.
18 * 18 *
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
20 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 * SUCH DAMAGE. 29 * SUCH DAMAGE.
30 */ 30 */
31 31
32#ifndef _FS_PUFFS_PUFFS_MSGIF_H_ 32#ifndef _FS_PUFFS_PUFFS_MSGIF_H_
33#define _FS_PUFFS_PUFFS_MSGIF_H_ 33#define _FS_PUFFS_PUFFS_MSGIF_H_
34 34
35#include <sys/param.h> 35#include <sys/param.h>
36#include <sys/time.h> 36#include <sys/time.h>
37#include <sys/ioccom.h> 37#include <sys/ioccom.h>
38#include <sys/uio.h> 38#include <sys/uio.h>
39#include <sys/vnode.h> 39#include <sys/vnode.h>
40#include <sys/ucred.h> 40#include <sys/ucred.h>
41#include <sys/statvfs.h> 41#include <sys/statvfs.h>
42#include <sys/dirent.h> 42#include <sys/dirent.h>
43#include <sys/fcntl.h> 43#include <sys/fcntl.h>
44 44
45#include <dev/putter/putter.h> 45#include <dev/putter/putter.h>
46 46
47#include <uvm/uvm_prot.h> 47#include <uvm/uvm_prot.h>
48 48
49#define PUFFSOP_VFS 0x01 /* kernel-> */ 49#define PUFFSOP_VFS 0x01 /* kernel-> */
50#define PUFFSOP_VN 0x02 /* kernel-> */ 50#define PUFFSOP_VN 0x02 /* kernel-> */
51#define PUFFSOP_CACHE 0x03 /* only kernel-> */ 51#define PUFFSOP_CACHE 0x03 /* only kernel-> */
52#define PUFFSOP_ERROR 0x04 /* only kernel-> */ 52#define PUFFSOP_ERROR 0x04 /* only kernel-> */
53#define PUFFSOP_FLUSH 0x05 /* ->kernel */ 53#define PUFFSOP_FLUSH 0x05 /* ->kernel */
54#define PUFFSOP_SUSPEND 0x06 /* ->kernel */ 54#define PUFFSOP_SUSPEND 0x06 /* ->kernel */
55 55
56#define PUFFSOPFLAG_FAF 0x10 /* fire-and-forget */ 56#define PUFFSOPFLAG_FAF 0x10 /* fire-and-forget */
57#define PUFFSOPFLAG_ISRESPONSE 0x20 /* req is actually a resp */ 57#define PUFFSOPFLAG_ISRESPONSE 0x20 /* req is actually a resp */
58 58
59#define PUFFSOP_OPCMASK 0x07 59#define PUFFSOP_OPCMASK 0x07
60#define PUFFSOP_OPCLASS(a) ((a) & PUFFSOP_OPCMASK) 60#define PUFFSOP_OPCLASS(a) ((a) & PUFFSOP_OPCMASK)
61#define PUFFSOP_WANTREPLY(a) (((a) & PUFFSOPFLAG_FAF) == 0) 61#define PUFFSOP_WANTREPLY(a) (((a) & PUFFSOPFLAG_FAF) == 0)
62 62
63/* XXX: we don't need everything */ 63/* XXX: we don't need everything */
64enum { 64enum {
65 PUFFS_VFS_MOUNT, PUFFS_VFS_START, PUFFS_VFS_UNMOUNT, 65 PUFFS_VFS_MOUNT, PUFFS_VFS_START, PUFFS_VFS_UNMOUNT,
66 PUFFS_VFS_ROOT, PUFFS_VFS_STATVFS, PUFFS_VFS_SYNC, 66 PUFFS_VFS_ROOT, PUFFS_VFS_STATVFS, PUFFS_VFS_SYNC,
67 PUFFS_VFS_VGET, PUFFS_VFS_FHTOVP, PUFFS_VFS_VPTOFH, 67 PUFFS_VFS_VGET, PUFFS_VFS_FHTOVP, PUFFS_VFS_VPTOFH,
68 PUFFS_VFS_INIT, PUFFS_VFS_DONE, PUFFS_VFS_SNAPSHOT, 68 PUFFS_VFS_INIT, PUFFS_VFS_DONE, PUFFS_VFS_SNAPSHOT,
69 PUFFS_VFS_EXTATTCTL, PUFFS_VFS_SUSPEND 69 PUFFS_VFS_EXTATTCTL, PUFFS_VFS_SUSPEND
70}; 70};
71#define PUFFS_VFS_MAX PUFFS_VFS_EXTATTCTL 71#define PUFFS_VFS_MAX PUFFS_VFS_EXTATTCTL
72 72
73/* moreXXX: we don't need everything here either */ 73/* moreXXX: we don't need everything here either */
74enum { 74enum {
75 PUFFS_VN_LOOKUP, PUFFS_VN_CREATE, PUFFS_VN_MKNOD, 75 PUFFS_VN_LOOKUP, PUFFS_VN_CREATE, PUFFS_VN_MKNOD,
76 PUFFS_VN_OPEN, PUFFS_VN_CLOSE, PUFFS_VN_ACCESS, 76 PUFFS_VN_OPEN, PUFFS_VN_CLOSE, PUFFS_VN_ACCESS,
77 PUFFS_VN_GETATTR, PUFFS_VN_SETATTR, PUFFS_VN_READ, 77 PUFFS_VN_GETATTR, PUFFS_VN_SETATTR, PUFFS_VN_READ,
78 PUFFS_VN_WRITE, PUFFS_VN_IOCTL, PUFFS_VN_FCNTL, 78 PUFFS_VN_WRITE, PUFFS_VN_IOCTL, PUFFS_VN_FCNTL,
79 PUFFS_VN_POLL, PUFFS_VN_KQFILTER, PUFFS_VN_REVOKE, 79 PUFFS_VN_POLL, PUFFS_VN_KQFILTER, PUFFS_VN_REVOKE,
80 PUFFS_VN_MMAP, PUFFS_VN_FSYNC, PUFFS_VN_SEEK, 80 PUFFS_VN_MMAP, PUFFS_VN_FSYNC, PUFFS_VN_SEEK,
81 PUFFS_VN_REMOVE, PUFFS_VN_LINK, PUFFS_VN_RENAME, 81 PUFFS_VN_REMOVE, PUFFS_VN_LINK, PUFFS_VN_RENAME,
82 PUFFS_VN_MKDIR, PUFFS_VN_RMDIR, PUFFS_VN_SYMLINK, 82 PUFFS_VN_MKDIR, PUFFS_VN_RMDIR, PUFFS_VN_SYMLINK,
83 PUFFS_VN_READDIR, PUFFS_VN_READLINK, PUFFS_VN_ABORTOP, 83 PUFFS_VN_READDIR, PUFFS_VN_READLINK, PUFFS_VN_ABORTOP,
84 PUFFS_VN_INACTIVE, PUFFS_VN_RECLAIM, PUFFS_VN_LOCK, 84 PUFFS_VN_INACTIVE, PUFFS_VN_RECLAIM, PUFFS_VN_LOCK,
85 PUFFS_VN_UNLOCK, PUFFS_VN_BMAP, PUFFS_VN_STRATEGY, 85 PUFFS_VN_UNLOCK, PUFFS_VN_BMAP, PUFFS_VN_STRATEGY,
86 PUFFS_VN_PRINT, PUFFS_VN_ISLOCKED, PUFFS_VN_PATHCONF, 86 PUFFS_VN_PRINT, PUFFS_VN_ISLOCKED, PUFFS_VN_PATHCONF,
87 PUFFS_VN_ADVLOCK, PUFFS_VN_LEASE, PUFFS_VN_WHITEOUT, 87 PUFFS_VN_ADVLOCK, PUFFS_VN_LEASE, PUFFS_VN_WHITEOUT,
88 PUFFS_VN_GETPAGES, PUFFS_VN_PUTPAGES, PUFFS_VN_GETEXTATTR, 88 PUFFS_VN_GETPAGES, PUFFS_VN_PUTPAGES, PUFFS_VN_GETEXTATTR,
89 PUFFS_VN_LISTEXTATTR, PUFFS_VN_OPENEXTATTR, PUFFS_VN_DELETEEXTATTR, 89 PUFFS_VN_LISTEXTATTR, PUFFS_VN_OPENEXTATTR, PUFFS_VN_DELETEEXTATTR,
90 PUFFS_VN_SETEXTATTR 90 PUFFS_VN_SETEXTATTR
91}; 91};
92#define PUFFS_VN_MAX PUFFS_VN_SETEXTATTR 92#define PUFFS_VN_MAX PUFFS_VN_SETEXTATTR
93 93
94/* 94/*
95 * These signal invalid parameters the file system returned. 95 * These signal invalid parameters the file system returned.
96 */ 96 */
97enum { 97enum {
98 PUFFS_ERR_MAKENODE, PUFFS_ERR_LOOKUP, PUFFS_ERR_READDIR, 98 PUFFS_ERR_MAKENODE, PUFFS_ERR_LOOKUP, PUFFS_ERR_READDIR,
99 PUFFS_ERR_READLINK, PUFFS_ERR_READ, PUFFS_ERR_WRITE, 99 PUFFS_ERR_READLINK, PUFFS_ERR_READ, PUFFS_ERR_WRITE,
100 PUFFS_ERR_VPTOFH, PUFFS_ERR_ERROR 100 PUFFS_ERR_VPTOFH, PUFFS_ERR_ERROR
101}; 101};
102#define PUFFS_ERR_MAX PUFFS_ERR_VPTOFH 102#define PUFFS_ERR_MAX PUFFS_ERR_VPTOFH
103 103
104#define PUFFSDEVELVERS 0x80000000 104#define PUFFSDEVELVERS 0x80000000
105#define PUFFSVERSION 28 105#define PUFFSVERSION 26
106#define PUFFSNAMESIZE 32 106#define PUFFSNAMESIZE 32
107 107
108#define PUFFS_TYPEPREFIX "puffs|" 108#define PUFFS_TYPEPREFIX "puffs|"
109 109
110#define PUFFS_TYPELEN (_VFS_NAMELEN - (sizeof(PUFFS_TYPEPREFIX)+1)) 110#define PUFFS_TYPELEN (_VFS_NAMELEN - (sizeof(PUFFS_TYPEPREFIX)+1))
111#define PUFFS_NAMELEN (_VFS_MNAMELEN-1) 111#define PUFFS_NAMELEN (_VFS_MNAMELEN-1)
112 112
113/*  113/*
114 * Just a weak typedef for code clarity. Additionally, we have a 114 * Just a weak typedef for code clarity. Additionally, we have a
115 * more appropriate vanity type for puffs: 115 * more appropriate vanity type for puffs:
116 * <uep> it should be croissant, not cookie. 116 * <uep> it should be croissant, not cookie.
117 */ 117 */
118typedef void *puffs_cookie_t; 118typedef void *puffs_cookie_t;
119typedef puffs_cookie_t puffs_croissant_t; 119typedef puffs_cookie_t puffs_croissant_t;
120 120
121struct puffs_kargs { 121struct puffs_kargs {
122 unsigned int pa_vers; 122 unsigned int pa_vers;
123 int pa_fd; 123 int pa_fd;
124 124
125 uint32_t pa_flags; 125 uint32_t pa_flags;
126 126
127 size_t pa_maxmsglen; 127 size_t pa_maxmsglen;
128 int pa_nhashbuckets; 128 int pa_nhashbuckets;
129 129
130 size_t pa_fhsize; 130 size_t pa_fhsize;
131 int pa_fhflags; 131 int pa_fhflags;
132 132
133 puffs_cookie_t pa_root_cookie; 133 puffs_cookie_t pa_root_cookie;
134 enum vtype pa_root_vtype; 134 enum vtype pa_root_vtype;
135 voff_t pa_root_vsize; 135 voff_t pa_root_vsize;
136 dev_t pa_root_rdev; 136 dev_t pa_root_rdev;
137 137
138 struct statvfs pa_svfsb; 138 struct statvfs pa_svfsb;
139 139
140 char pa_typename[_VFS_NAMELEN]; 140 char pa_typename[_VFS_NAMELEN];
141 char pa_mntfromname[_VFS_MNAMELEN]; 141 char pa_mntfromname[_VFS_MNAMELEN];
142 142
143 uint8_t pa_vnopmask[PUFFS_VN_MAX]; 143 uint8_t pa_vnopmask[PUFFS_VN_MAX];
144}; 144};
145#define PUFFS_KFLAG_NOCACHE_NAME 0x01 /* don't use name cache */ 145#define PUFFS_KFLAG_NOCACHE_NAME 0x01 /* don't use name cache */
146#define PUFFS_KFLAG_NOCACHE_PAGE 0x02 /* don't use page cache */ 146#define PUFFS_KFLAG_NOCACHE_PAGE 0x02 /* don't use page cache */
147#define PUFFS_KFLAG_NOCACHE 0x03 /* no cache whatsoever */ 147#define PUFFS_KFLAG_NOCACHE 0x03 /* no cache whatsoever */
148#define PUFFS_KFLAG_ALLOPS 0x04 /* ignore pa_vnopmask */ 148#define PUFFS_KFLAG_ALLOPS 0x04 /* ignore pa_vnopmask */
149#define PUFFS_KFLAG_WTCACHE 0x08 /* write-through page cache */ 149#define PUFFS_KFLAG_WTCACHE 0x08 /* write-through page cache */
150#define PUFFS_KFLAG_IAONDEMAND 0x10 /* inactive only on demand */ 150#define PUFFS_KFLAG_IAONDEMAND 0x10 /* inactive only on demand */
151#define PUFFS_KFLAG_LOOKUP_FULLPNBUF 0x20 /* full pnbuf in lookup */ 151#define PUFFS_KFLAG_LOOKUP_FULLPNBUF 0x20 /* full pnbuf in lookup */
152#define PUFFS_KFLAG_MASK 0x3f 152#define PUFFS_KFLAG_MASK 0x3f
153 153
154#define PUFFS_FHFLAG_DYNAMIC 0x01 154#define PUFFS_FHFLAG_DYNAMIC 0x01
155#define PUFFS_FHFLAG_NFSV2 0x02 155#define PUFFS_FHFLAG_NFSV2 0x02
156#define PUFFS_FHFLAG_NFSV3 0x04 156#define PUFFS_FHFLAG_NFSV3 0x04
157#define PUFFS_FHFLAG_PROTOMASK 0x06 157#define PUFFS_FHFLAG_PROTOMASK 0x06
158#define PUFFS_FHFLAG_PASSTHROUGH 0x08 158#define PUFFS_FHFLAG_PASSTHROUGH 0x08
159#define PUFFS_FHFLAG_MASK 0x0f 159#define PUFFS_FHFLAG_MASK 0x0f
160 160
161#define PUFFS_FHSIZE_MAX 1020 /* XXX: FHANDLE_SIZE_MAX - 4 */ 161#define PUFFS_FHSIZE_MAX 1020 /* XXX: FHANDLE_SIZE_MAX - 4 */
162 162
163struct puffs_req { 163struct puffs_req {
164 struct putter_hdr preq_pth; 164 struct putter_hdr preq_pth;
165 165
166 uint64_t preq_id; 166 uint64_t preq_id;
167 puffs_cookie_t preq_cookie; 167 puffs_cookie_t preq_cookie;
168 168
169 uint16_t preq_opclass; 169 uint16_t preq_opclass;
170 uint16_t preq_optype; 170 uint16_t preq_optype;
171 int preq_rv; 171 int preq_rv;
172 172
173 uint32_t preq_setbacks; 173 uint32_t preq_setbacks;
174 174
175 /* Who is making the call? Eventually host id is also needed. */ 175 /* Who is making the call? Eventually host id is also needed. */
176 pid_t preq_pid; 176 pid_t preq_pid;
177 lwpid_t preq_lid; 177 lwpid_t preq_lid;
178 178
179 /* 179 /*
180 * the following helper pads the struct size to md alignment 180 * the following helper pads the struct size to md alignment
181 * multiple (should size_t not cut it). it makes sure that 181 * multiple (should size_t not cut it). it makes sure that
182 * whatever comes after this struct is aligned 182 * whatever comes after this struct is aligned
183 */ 183 */
184 size_t preq_buflen; 184 size_t preq_buflen;
185 uint8_t preq_buf[0] __aligned(ALIGNBYTES+1); 185 uint8_t preq_buf[0] __aligned(ALIGNBYTES+1);
186}; 186};
187 187
188#define PUFFS_SETBACK_INACT_N1 0x01 /* set VOP_INACTIVE for node 1 */ 188#define PUFFS_SETBACK_INACT_N1 0x01 /* set VOP_INACTIVE for node 1 */
189#define PUFFS_SETBACK_INACT_N2 0x02 /* set VOP_INACTIVE for node 2 */ 189#define PUFFS_SETBACK_INACT_N2 0x02 /* set VOP_INACTIVE for node 2 */
190#define PUFFS_SETBACK_NOREF_N1 0x04 /* set pn PN_NOREFS for node 1 */ 190#define PUFFS_SETBACK_NOREF_N1 0x04 /* set pn PN_NOREFS for node 1 */
191#define PUFFS_SETBACK_NOREF_N2 0x08 /* set pn PN_NOREFS for node 2 */ 191#define PUFFS_SETBACK_NOREF_N2 0x08 /* set pn PN_NOREFS for node 2 */
192#define PUFFS_SETBACK_MASK 0x0f 192#define PUFFS_SETBACK_MASK 0x0f
193 193
194/* 194/*
195 * Flush operation. This can be used to invalidate: 195 * Flush operation. This can be used to invalidate:
196 * 1) name cache for one node 196 * 1) name cache for one node
197 * 2) name cache for all children  197 * 2) name cache for all children
198 * 3) name cache for the entire mount 198 * 3) name cache for the entire mount
199 * 4) page cache for a set of ranges in one node 199 * 4) page cache for a set of ranges in one node
200 * 5) page cache for one entire node 200 * 5) page cache for one entire node
201 * 201 *
202 * It can be used to flush: 202 * It can be used to flush:
203 * 1) page cache for a set of ranges in one node 203 * 1) page cache for a set of ranges in one node
204 * 2) page cache for one entire node 204 * 2) page cache for one entire node
205 */ 205 */
206 206
207/* XXX: needs restructuring */ 207/* XXX: needs restructuring */
208struct puffs_flush { 208struct puffs_flush {
209 struct puffs_req pf_req; 209 struct puffs_req pf_req;
210 210
211 puffs_cookie_t pf_cookie; 211 puffs_cookie_t pf_cookie;
212 212
213 int pf_op; 213 int pf_op;
214 off_t pf_start; 214 off_t pf_start;
215 off_t pf_end; 215 off_t pf_end;
216}; 216};
217#define PUFFS_INVAL_NAMECACHE_NODE 0 217#define PUFFS_INVAL_NAMECACHE_NODE 0
218#define PUFFS_INVAL_NAMECACHE_DIR 1 218#define PUFFS_INVAL_NAMECACHE_DIR 1
219#define PUFFS_INVAL_NAMECACHE_ALL 2 219#define PUFFS_INVAL_NAMECACHE_ALL 2
220#define PUFFS_INVAL_PAGECACHE_NODE_RANGE 3 220#define PUFFS_INVAL_PAGECACHE_NODE_RANGE 3
221#define PUFFS_FLUSH_PAGECACHE_NODE_RANGE 4 221#define PUFFS_FLUSH_PAGECACHE_NODE_RANGE 4
222 222
223/* keep this for now */ 223/* keep this for now */
224#define PUFFSREQSIZEOP _IOR ('p', 1, size_t) 224#define PUFFSREQSIZEOP _IOR ('p', 1, size_t)
225 225
226/* 226/*
227 * Credentials for an operation. Can be either struct uucred for 227 * Credentials for an operation. Can be either struct uucred for
228 * ops called from a credential context or NOCRED/FSCRED for ops 228 * ops called from a credential context or NOCRED/FSCRED for ops
229 * called from within the kernel. It is up to the implementation 229 * called from within the kernel. It is up to the implementation
230 * if it makes a difference between these two and the super-user. 230 * if it makes a difference between these two and the super-user.
231 */ 231 */
232struct puffs_kcred { 232struct puffs_kcred {
233 struct uucred pkcr_uuc; 233 struct uucred pkcr_uuc;
234 uint8_t pkcr_type; 234 uint8_t pkcr_type;
235 uint8_t pkcr_internal; 235 uint8_t pkcr_internal;
236}; 236};
237#define PUFFCRED_TYPE_UUC 1 237#define PUFFCRED_TYPE_UUC 1
238#define PUFFCRED_TYPE_INTERNAL 2 238#define PUFFCRED_TYPE_INTERNAL 2
239#define PUFFCRED_CRED_NOCRED 1 239#define PUFFCRED_CRED_NOCRED 1
240#define PUFFCRED_CRED_FSCRED 2 240#define PUFFCRED_CRED_FSCRED 2
241 241
242/* 242/*
243 * 2*MAXPHYS is the max size the system will attempt to copy, 243 * 2*MAXPHYS is the max size the system will attempt to copy,
244 * else treated as garbage 244 * else treated as garbage
245 */ 245 */
246#define PUFFS_MSG_MAXSIZE 2*MAXPHYS 246#define PUFFS_MSG_MAXSIZE 2*MAXPHYS
247#define PUFFS_MSGSTRUCT_MAX 4096 /* XXX: approxkludge */ 247#define PUFFS_MSGSTRUCT_MAX 4096 /* XXX: approxkludge */
248 248
249#define PUFFS_TOMOVE(a,b) (MIN((a), b->pmp_msg_maxsize - PUFFS_MSGSTRUCT_MAX)) 249#define PUFFS_TOMOVE(a,b) (MIN((a), b->pmp_msg_maxsize - PUFFS_MSGSTRUCT_MAX))
250 250
251/* puffs struct componentname built by kernel */ 251/* puffs struct componentname built by kernel */
252struct puffs_kcn { 252struct puffs_kcn {
253 /* args */ 253 /* args */
254 uint32_t pkcn_nameiop; /* namei operation */ 254 uint32_t pkcn_nameiop; /* namei operation */
255 uint32_t pkcn_flags; /* flags */ 255 uint32_t pkcn_flags; /* flags */
256 256
257 char pkcn_name[MAXPATHLEN]; /* nulterminated path component */ 257 char pkcn_name[MAXPATHLEN]; /* nulterminated path component */
258 size_t pkcn_namelen; /* current component length */ 258 size_t pkcn_namelen; /* current component length */
259 size_t pkcn_consume; /* IN: extra chars server ate */ 259 size_t pkcn_consume; /* IN: extra chars server ate */
260}; 260};
261 261
262 262
263/* 263/*
264 * Next come the individual requests. They are all subclassed from 264 * Next come the individual requests. They are all subclassed from
265 * puffs_req and contain request-specific fields in addition. Note 265 * puffs_req and contain request-specific fields in addition. Note
266 * that there are some requests which have to handle arbitrary-length 266 * that there are some requests which have to handle arbitrary-length
267 * buffers. 267 * buffers.
268 * 268 *
269 * The division is the following: puffs_req is to be touched only 269 * The division is the following: puffs_req is to be touched only
270 * by generic routines while the other stuff is supposed to be 270 * by generic routines while the other stuff is supposed to be
271 * modified only by specific routines. 271 * modified only by specific routines.
272 */ 272 */
273 273
274/* 274/*
275 * aux structures for vfs operations. 275 * aux structures for vfs operations.
276 */ 276 */
277struct puffs_vfsmsg_unmount { 277struct puffs_vfsmsg_unmount {
278 struct puffs_req pvfsr_pr; 278 struct puffs_req pvfsr_pr;
279 279
280 int pvfsr_flags; 280 int pvfsr_flags;
281}; 281};
282 282
283struct puffs_vfsmsg_statvfs { 283struct puffs_vfsmsg_statvfs {
284 struct puffs_req pvfsr_pr; 284 struct puffs_req pvfsr_pr;
285 285
286 struct statvfs pvfsr_sb; 286 struct statvfs pvfsr_sb;
287}; 287};
288 288
289struct puffs_vfsmsg_sync { 289struct puffs_vfsmsg_sync {
290 struct puffs_req pvfsr_pr; 290 struct puffs_req pvfsr_pr;
291 291
292 struct puffs_kcred pvfsr_cred; 292 struct puffs_kcred pvfsr_cred;
293 int pvfsr_waitfor; 293 int pvfsr_waitfor;
294}; 294};
295 295
296struct puffs_vfsmsg_fhtonode { 296struct puffs_vfsmsg_fhtonode {
297 struct puffs_req pvfsr_pr; 297 struct puffs_req pvfsr_pr;
298 298
299 void *pvfsr_fhcookie; /* IN */ 299 void *pvfsr_fhcookie; /* IN */
300 enum vtype pvfsr_vtype; /* IN */ 300 enum vtype pvfsr_vtype; /* IN */
301 voff_t pvfsr_size; /* IN */ 301 voff_t pvfsr_size; /* IN */
302 dev_t pvfsr_rdev; /* IN */ 302 dev_t pvfsr_rdev; /* IN */
303 303
304 size_t pvfsr_dsize; /* OUT */ 304 size_t pvfsr_dsize; /* OUT */
305 uint8_t pvfsr_data[0] /* OUT, XXX */ 305 uint8_t pvfsr_data[0] /* OUT, XXX */
306 __aligned(ALIGNBYTES+1); 306 __aligned(ALIGNBYTES+1);
307}; 307};
308 308
309struct puffs_vfsmsg_nodetofh { 309struct puffs_vfsmsg_nodetofh {
310 struct puffs_req pvfsr_pr; 310 struct puffs_req pvfsr_pr;
311 311
312 void *pvfsr_fhcookie; /* OUT */ 312 void *pvfsr_fhcookie; /* OUT */
313 313
314 size_t pvfsr_dsize; /* OUT/IN */ 314 size_t pvfsr_dsize; /* OUT/IN */
315 uint8_t pvfsr_data[0] /* IN, XXX */ 315 uint8_t pvfsr_data[0] /* IN, XXX */
316 __aligned(ALIGNBYTES+1); 316 __aligned(ALIGNBYTES+1);
317}; 317};
318 318
319struct puffs_vfsmsg_suspend { 319struct puffs_vfsmsg_suspend {
320 struct puffs_req pvfsr_pr; 320 struct puffs_req pvfsr_pr;
321 321
322 int pvfsr_status; 322 int pvfsr_status;
323}; 323};
324#define PUFFS_SUSPEND_START 0 324#define PUFFS_SUSPEND_START 0
325#define PUFFS_SUSPEND_SUSPENDED 1 325#define PUFFS_SUSPEND_SUSPENDED 1
326#define PUFFS_SUSPEND_RESUME 2 326#define PUFFS_SUSPEND_RESUME 2
327#define PUFFS_SUSPEND_ERROR 3 327#define PUFFS_SUSPEND_ERROR 3
328 328
329/* 329/*
330 * aux structures for vnode operations. 330 * aux structures for vnode operations.
331 */ 331 */
332 332
333struct puffs_vnmsg_lookup { 333struct puffs_vnmsg_lookup {
334 struct puffs_req pvn_pr; 334 struct puffs_req pvn_pr;
335 335
336 struct puffs_kcn pvnr_cn; /* OUT */ 336 struct puffs_kcn pvnr_cn; /* OUT */
337 struct puffs_kcred pvnr_cn_cred; /* OUT */ 337 struct puffs_kcred pvnr_cn_cred; /* OUT */
338 338
339 puffs_cookie_t pvnr_newnode; /* IN */ 339 puffs_cookie_t pvnr_newnode; /* IN */
340 enum vtype pvnr_vtype; /* IN */ 340 enum vtype pvnr_vtype; /* IN */
341 voff_t pvnr_size; /* IN */ 341 voff_t pvnr_size; /* IN */
342 dev_t pvnr_rdev; /* IN */ 342 dev_t pvnr_rdev; /* IN */
343}; 343};
344 344
345struct puffs_vnmsg_create { 345struct puffs_vnmsg_create {
346 struct puffs_req pvn_pr; 346 struct puffs_req pvn_pr;
347 347
348 struct puffs_kcn pvnr_cn; /* OUT */ 348 struct puffs_kcn pvnr_cn; /* OUT */
349 struct puffs_kcred pvnr_cn_cred; /* OUT */ 349 struct puffs_kcred pvnr_cn_cred; /* OUT */
350 350
351 struct vattr pvnr_va; /* OUT */ 351 struct vattr pvnr_va; /* OUT */
352 puffs_cookie_t pvnr_newnode; /* IN */ 352 puffs_cookie_t pvnr_newnode; /* IN */
353}; 353};
354 354
355struct puffs_vnmsg_mknod { 355struct puffs_vnmsg_mknod {
356 struct puffs_req pvn_pr; 356 struct puffs_req pvn_pr;
357 357
358 struct puffs_kcn pvnr_cn; /* OUT */ 358 struct puffs_kcn pvnr_cn; /* OUT */
359 struct puffs_kcred pvnr_cn_cred; /* OUT */ 359 struct puffs_kcred pvnr_cn_cred; /* OUT */
360 360
361 struct vattr pvnr_va; /* OUT */ 361 struct vattr pvnr_va; /* OUT */
362 puffs_cookie_t pvnr_newnode; /* IN */ 362 puffs_cookie_t pvnr_newnode; /* IN */
363}; 363};
364 364
365struct puffs_vnmsg_open { 365struct puffs_vnmsg_open {
366 struct puffs_req pvn_pr; 366 struct puffs_req pvn_pr;
367 367
368 struct puffs_kcred pvnr_cred; /* OUT */ 368 struct puffs_kcred pvnr_cred; /* OUT */
369 int pvnr_mode; /* OUT */ 369 int pvnr_mode; /* OUT */
370}; 370};
371 371
372struct puffs_vnmsg_close { 372struct puffs_vnmsg_close {
373 struct puffs_req pvn_pr; 373 struct puffs_req pvn_pr;
374 374
375 struct puffs_kcred pvnr_cred; /* OUT */ 375 struct puffs_kcred pvnr_cred; /* OUT */
376 int pvnr_fflag; /* OUT */ 376 int pvnr_fflag; /* OUT */
377}; 377};
378 378
379struct puffs_vnmsg_access { 379struct puffs_vnmsg_access {
380 struct puffs_req pvn_pr; 380 struct puffs_req pvn_pr;
381 381
382 struct puffs_kcred pvnr_cred; /* OUT */ 382 struct puffs_kcred pvnr_cred; /* OUT */
383 int pvnr_mode; /* OUT */ 383 int pvnr_mode; /* OUT */
384}; 384};
385 385
386#define puffs_vnmsg_setattr puffs_vnmsg_setgetattr 386#define puffs_vnmsg_setattr puffs_vnmsg_setgetattr
387#define puffs_vnmsg_getattr puffs_vnmsg_setgetattr 387#define puffs_vnmsg_getattr puffs_vnmsg_setgetattr
388struct puffs_vnmsg_setgetattr { 388struct puffs_vnmsg_setgetattr {
389 struct puffs_req pvn_pr; 389 struct puffs_req pvn_pr;
390 390
391 struct puffs_kcred pvnr_cred; /* OUT */ 391 struct puffs_kcred pvnr_cred; /* OUT */
392 struct vattr pvnr_va; /* IN/OUT (op depend) */ 392 struct vattr pvnr_va; /* IN/OUT (op depend) */
393}; 393};
394 394
395#define puffs_vnmsg_read puffs_vnmsg_rw 395#define puffs_vnmsg_read puffs_vnmsg_rw
396#define puffs_vnmsg_write puffs_vnmsg_rw 396#define puffs_vnmsg_write puffs_vnmsg_rw
397struct puffs_vnmsg_rw { 397struct puffs_vnmsg_rw {
398 struct puffs_req pvn_pr; 398 struct puffs_req pvn_pr;
399 399
400 struct puffs_kcred pvnr_cred; /* OUT */ 400 struct puffs_kcred pvnr_cred; /* OUT */
401 off_t pvnr_offset; /* OUT */ 401 off_t pvnr_offset; /* OUT */
402 size_t pvnr_resid; /* IN/OUT */ 402 size_t pvnr_resid; /* IN/OUT */
403 int pvnr_ioflag; /* OUT */ 403 int pvnr_ioflag; /* OUT */
404 404
405 uint8_t pvnr_data[0]; /* IN/OUT (wr/rd) */ 405 uint8_t pvnr_data[0]; /* IN/OUT (wr/rd) */
406}; 406};
407 407
408#define puffs_vnmsg_ioctl puffs_vnreq_fcnioctl 408#define puffs_vnmsg_ioctl puffs_vnreq_fcnioctl
409#define puffs_vnmsg_fcntl puffs_vnreq_fcnioctl 409#define puffs_vnmsg_fcntl puffs_vnreq_fcnioctl
410struct puffs_vnmsg_fcnioctl { 410struct puffs_vnmsg_fcnioctl {
411 struct puffs_req pvn_pr; 411 struct puffs_req pvn_pr;
412 412
413 struct puffs_kcred pvnr_cred; 413 struct puffs_kcred pvnr_cred;
414 u_long pvnr_command; 414 u_long pvnr_command;
415 pid_t pvnr_pid; 415 pid_t pvnr_pid;
416 int pvnr_fflag; 416 int pvnr_fflag;
417 417
418 void *pvnr_data; 418 void *pvnr_data;
419 size_t pvnr_datalen; 419 size_t pvnr_datalen;
420 int pvnr_copyback; 420 int pvnr_copyback;
421}; 421};
422 422
423struct puffs_vnmsg_poll { 423struct puffs_vnmsg_poll {
424 struct puffs_req pvn_pr; 424 struct puffs_req pvn_pr;
425 425
426 int pvnr_events; /* IN/OUT */ 426 int pvnr_events; /* IN/OUT */
427}; 427};
428 428
429struct puffs_vnmsg_fsync { 429struct puffs_vnmsg_fsync {
430 struct puffs_req pvn_pr; 430 struct puffs_req pvn_pr;
431 431
432 struct puffs_kcred pvnr_cred; /* OUT */ 432 struct puffs_kcred pvnr_cred; /* OUT */
433 off_t pvnr_offlo; /* OUT */ 433 off_t pvnr_offlo; /* OUT */
434 off_t pvnr_offhi; /* OUT */ 434 off_t pvnr_offhi; /* OUT */
435 int pvnr_flags; /* OUT */ 435 int pvnr_flags; /* OUT */
436}; 436};
437 437
438struct puffs_vnmsg_seek { 438struct puffs_vnmsg_seek {
439 struct puffs_req pvn_pr; 439 struct puffs_req pvn_pr;
440 440
441 struct puffs_kcred pvnr_cred; /* OUT */ 441 struct puffs_kcred pvnr_cred; /* OUT */
442 off_t pvnr_oldoff; /* OUT */ 442 off_t pvnr_oldoff; /* OUT */
443 off_t pvnr_newoff; /* OUT */ 443 off_t pvnr_newoff; /* OUT */
444}; 444};
445 445
446struct puffs_vnmsg_remove { 446struct puffs_vnmsg_remove {
447 struct puffs_req pvn_pr; 447 struct puffs_req pvn_pr;
448 448
449 struct puffs_kcn pvnr_cn; /* OUT */ 449 struct puffs_kcn pvnr_cn; /* OUT */
450 struct puffs_kcred pvnr_cn_cred; /* OUT */ 450 struct puffs_kcred pvnr_cn_cred; /* OUT */
451 451
452 puffs_cookie_t pvnr_cookie_targ; /* OUT */ 452 puffs_cookie_t pvnr_cookie_targ; /* OUT */
453}; 453};
454 454
455struct puffs_vnmsg_mkdir { 455struct puffs_vnmsg_mkdir {
456 struct puffs_req pvn_pr; 456 struct puffs_req pvn_pr;
457 457
458 struct puffs_kcn pvnr_cn; /* OUT */ 458 struct puffs_kcn pvnr_cn; /* OUT */
459 struct puffs_kcred pvnr_cn_cred; /* OUT */ 459 struct puffs_kcred pvnr_cn_cred; /* OUT */
460 460
461 struct vattr pvnr_va; /* OUT */ 461 struct vattr pvnr_va; /* OUT */
462 puffs_cookie_t pvnr_newnode; /* IN */ 462 puffs_cookie_t pvnr_newnode; /* IN */
463}; 463};
464 464
465struct puffs_vnmsg_rmdir { 465struct puffs_vnmsg_rmdir {
466 struct puffs_req pvn_pr; 466 struct puffs_req pvn_pr;
467 467
468 struct puffs_kcn pvnr_cn; /* OUT */ 468 struct puffs_kcn pvnr_cn; /* OUT */
469 struct puffs_kcred pvnr_cn_cred; /* OUT */ 469 struct puffs_kcred pvnr_cn_cred; /* OUT */
470 470
471 puffs_cookie_t pvnr_cookie_targ; /* OUT */ 471 puffs_cookie_t pvnr_cookie_targ; /* OUT */
472}; 472};
473 473
474struct puffs_vnmsg_link { 474struct puffs_vnmsg_link {
475 struct puffs_req pvn_pr; 475 struct puffs_req pvn_pr;
476 476
477 struct puffs_kcn pvnr_cn; /* OUT */ 477 struct puffs_kcn pvnr_cn; /* OUT */
478 struct puffs_kcred pvnr_cn_cred; /* OUT */ 478 struct puffs_kcred pvnr_cn_cred; /* OUT */
479 479
480 puffs_cookie_t pvnr_cookie_targ; /* OUT */ 480 puffs_cookie_t pvnr_cookie_targ; /* OUT */
481}; 481};
482 482
483struct puffs_vnmsg_rename { 483struct puffs_vnmsg_rename {
484 struct puffs_req pvn_pr; 484 struct puffs_req pvn_pr;
485 485
486 struct puffs_kcn pvnr_cn_src; /* OUT */ 486 struct puffs_kcn pvnr_cn_src; /* OUT */
487 struct puffs_kcred pvnr_cn_src_cred; /* OUT */ 487 struct puffs_kcred pvnr_cn_src_cred; /* OUT */
488 struct puffs_kcn pvnr_cn_targ; /* OUT */ 488 struct puffs_kcn pvnr_cn_targ; /* OUT */
489 struct puffs_kcred pvnr_cn_targ_cred; /* OUT */ 489 struct puffs_kcred pvnr_cn_targ_cred; /* OUT */
490 490
491 puffs_cookie_t pvnr_cookie_src; /* OUT */ 491 puffs_cookie_t pvnr_cookie_src; /* OUT */
492 puffs_cookie_t pvnr_cookie_targ; /* OUT */ 492 puffs_cookie_t pvnr_cookie_targ; /* OUT */
493 puffs_cookie_t pvnr_cookie_targdir; /* OUT */ 493 puffs_cookie_t pvnr_cookie_targdir; /* OUT */
494}; 494};
495 495
496struct puffs_vnmsg_symlink { 496struct puffs_vnmsg_symlink {
497 struct puffs_req pvn_pr; 497 struct puffs_req pvn_pr;
498 498
499 struct puffs_kcn pvnr_cn; /* OUT */ 499 struct puffs_kcn pvnr_cn; /* OUT */
500 struct puffs_kcred pvnr_cn_cred; /* OUT */ 500 struct puffs_kcred pvnr_cn_cred; /* OUT */
501 501
502 struct vattr pvnr_va; /* OUT */ 502 struct vattr pvnr_va; /* OUT */
503 puffs_cookie_t pvnr_newnode; /* IN */ 503 puffs_cookie_t pvnr_newnode; /* IN */
504 char pvnr_link[MAXPATHLEN]; /* OUT */ 504 char pvnr_link[MAXPATHLEN]; /* OUT */
505}; 505};
506 506
507struct puffs_vnmsg_readdir { 507struct puffs_vnmsg_readdir {
508 struct puffs_req pvn_pr; 508 struct puffs_req pvn_pr;
509 509
510 struct puffs_kcred pvnr_cred; /* OUT */ 510 struct puffs_kcred pvnr_cred; /* OUT */
511 off_t pvnr_offset; /* IN/OUT */ 511 off_t pvnr_offset; /* IN/OUT */
512 size_t pvnr_resid; /* IN/OUT */ 512 size_t pvnr_resid; /* IN/OUT */
513 size_t pvnr_ncookies; /* IN/OUT */ 513 size_t pvnr_ncookies; /* IN/OUT */
514 int pvnr_eofflag; /* IN */ 514 int pvnr_eofflag; /* IN */
515 515
516 size_t pvnr_dentoff; /* OUT */ 516 size_t pvnr_dentoff; /* OUT */
517 uint8_t pvnr_data[0] /* IN */ 517 uint8_t pvnr_data[0] /* IN */
518 __aligned(ALIGNBYTES+1); 518 __aligned(ALIGNBYTES+1);
519}; 519};
520 520
521struct puffs_vnmsg_readlink { 521struct puffs_vnmsg_readlink {
522 struct puffs_req pvn_pr; 522 struct puffs_req pvn_pr;
523 523
524 struct puffs_kcred pvnr_cred; /* OUT */ 524 struct puffs_kcred pvnr_cred; /* OUT */
525 size_t pvnr_linklen; /* IN */ 525 size_t pvnr_linklen; /* IN */
526 char pvnr_link[MAXPATHLEN]; /* IN, XXX */ 526 char pvnr_link[MAXPATHLEN]; /* IN, XXX */
527}; 527};
528 528
529struct puffs_vnmsg_reclaim { 529struct puffs_vnmsg_reclaim {
530 struct puffs_req pvn_pr; 530 struct puffs_req pvn_pr;
531}; 531};
532 532
533struct puffs_vnmsg_inactive { 533struct puffs_vnmsg_inactive {
534 struct puffs_req pvn_pr; 534 struct puffs_req pvn_pr;
535}; 535};
536 536
537struct puffs_vnmsg_print { 537struct puffs_vnmsg_print {
538 struct puffs_req pvn_pr; 538 struct puffs_req pvn_pr;
539 539
540 /* empty */ 540 /* empty */
541}; 541};
542 542
543struct puffs_vnmsg_pathconf { 543struct puffs_vnmsg_pathconf {
544 struct puffs_req pvn_pr; 544 struct puffs_req pvn_pr;
545 545
546 int pvnr_name; /* OUT */ 546 int pvnr_name; /* OUT */
547 int pvnr_retval; /* IN */ 547 int pvnr_retval; /* IN */
548}; 548};
549 549
550struct puffs_vnmsg_advlock { 550struct puffs_vnmsg_advlock {
551 struct puffs_req pvn_pr; 551 struct puffs_req pvn_pr;
552 552
553 struct flock pvnr_fl; /* OUT */ 553 struct flock pvnr_fl; /* OUT */
554 void *pvnr_id; /* OUT */ 554 void *pvnr_id; /* OUT */
555 int pvnr_op; /* OUT */ 555 int pvnr_op; /* OUT */
556 int pvnr_flags; /* OUT */ 556 int pvnr_flags; /* OUT */
557}; 557};
558 558
559struct puffs_vnmsg_mmap { 559struct puffs_vnmsg_mmap {
560 struct puffs_req pvn_pr; 560 struct puffs_req pvn_pr;
561 561
562 vm_prot_t pvnr_prot; /* OUT */ 562 vm_prot_t pvnr_prot; /* OUT */
563 struct puffs_kcred pvnr_cred; /* OUT */ 563 struct puffs_kcred pvnr_cred; /* OUT */
564}; 564};
565 565
566struct puffs_vnmsg_abortop { 566struct puffs_vnmsg_abortop {
567 struct puffs_req pvn_pr; 567 struct puffs_req pvn_pr;
568 568
569 struct puffs_kcn pvnr_cn; /* OUT */ 569 struct puffs_kcn pvnr_cn; /* OUT */
570 struct puffs_kcred pvnr_cn_cred; /* OUT */ 570 struct puffs_kcred pvnr_cn_cred; /* OUT */
571}; 571};
572 572
573 573
574/* 574/*
575 * For cache reports. Everything is always out-out-out, no replies 575 * For cache reports. Everything is always out-out-out, no replies
576 */ 576 */
577 577
578struct puffs_cacherun { 578struct puffs_cacherun {
579 off_t pcache_runstart; 579 off_t pcache_runstart;
580 off_t pcache_runend; 580 off_t pcache_runend;
581}; 581};
582 582
583/* cache info. old used for write now */ 583/* cache info. old used for write now */
584struct puffs_cacheinfo { 584struct puffs_cacheinfo {
585 struct puffs_req pcache_pr; 585 struct puffs_req pcache_pr;
586 586
587 int pcache_type; 587 int pcache_type;
588 size_t pcache_nruns;  588 size_t pcache_nruns;
589 struct puffs_cacherun pcache_runs[0]; 589 struct puffs_cacherun pcache_runs[0];
590}; 590};
591#define PCACHE_TYPE_READ 0 591#define PCACHE_TYPE_READ 0
592#define PCACHE_TYPE_WRITE 1 592#define PCACHE_TYPE_WRITE 1
593 593
594/* 594/*
595 * Error notification. Always outgoing, no response, no remorse. 595 * Error notification. Always outgoing, no response, no remorse.
596 */ 596 */
597struct puffs_error { 597struct puffs_error {
598 struct puffs_req perr_pr; 598 struct puffs_req perr_pr;
599 599
600 int perr_error; 600 int perr_error;
601 char perr_str[256]; 601 char perr_str[256];
602}; 602};
603 603
604#endif /* _FS_PUFFS_PUFFS_MSGIF_H_ */ 604#endif /* _FS_PUFFS_PUFFS_MSGIF_H_ */