13 #ifndef BUILDING_USERLAND_FS_SERVER
16 # include <fs_volume.h>
17 #endif // ! BUILDING_USERLAND_FS_SERVER
19 #ifndef _IMPEXP_KERNEL
20 #define _IMPEXP_KERNEL
23 typedef dev_t nspace_id
;
24 typedef ino_t vnode_id
;
27 * PUBLIC PART OF THE FILE SYSTEM PROTOCOL
30 #define WSTAT_MODE 0x0001
31 #define WSTAT_UID 0x0002
32 #define WSTAT_GID 0x0004
33 #define WSTAT_SIZE 0x0008
34 #define WSTAT_ATIME 0x0010
35 #define WSTAT_MTIME 0x0020
36 #define WSTAT_CRTIME 0x0040
38 #define WFSSTAT_NAME 0x0001
40 #define B_ENTRY_CREATED 1
41 #define B_ENTRY_REMOVED 2
42 #define B_ENTRY_MOVED 3
43 #define B_STAT_CHANGED 4
44 #define B_ATTR_CHANGED 5
45 #define B_DEVICE_MOUNTED 6
46 #define B_DEVICE_UNMOUNTED 7
48 #define B_STOP_WATCHING 0x0000
49 #define B_WATCH_NAME 0x0001
50 #define B_WATCH_STAT 0x0002
51 #define B_WATCH_ATTR 0x0004
52 #define B_WATCH_DIRECTORY 0x0008
55 #define SELECT_WRITE 2
56 #define SELECT_EXCEPTION 3
58 // missing ioctl() call added
59 #define IOCTL_FILE_UNCACHED_IO 10000
60 #define IOCTL_CREATE_TIME 10002
61 #define IOCTL_MODIFIED_TIME 10003
63 #define B_CUR_FS_API_VERSION 2
67 typedef struct selectsync selectsync
;
69 typedef int op_read_vnode(void *ns
, vnode_id vnid
, char r
, void **node
);
70 typedef int op_write_vnode(void *ns
, void *node
, char r
);
71 typedef int op_remove_vnode(void *ns
, void *node
, char r
);
72 typedef int op_secure_vnode(void *ns
, void *node
);
74 typedef int op_walk(void *ns
, void *base
, const char *file
, char **newpath
,
77 typedef int op_access(void *ns
, void *node
, int mode
);
79 typedef int op_create(void *ns
, void *dir
, const char *name
,
80 int omode
, int perms
, vnode_id
*vnid
, void **cookie
);
81 typedef int op_mkdir(void *ns
, void *dir
, const char *name
, int perms
);
82 typedef int op_symlink(void *ns
, void *dir
, const char *name
,
84 typedef int op_link(void *ns
, void *dir
, const char *name
, void *node
);
86 typedef int op_rename(void *ns
, void *olddir
, const char *oldname
,
87 void *newdir
, const char *newname
);
88 typedef int op_unlink(void *ns
, void *dir
, const char *name
);
89 typedef int op_rmdir(void *ns
, void *dir
, const char *name
);
91 typedef int op_readlink(void *ns
, void *node
, char *buf
, size_t *bufsize
);
93 typedef int op_opendir(void *ns
, void *node
, void **cookie
);
94 typedef int op_closedir(void *ns
, void *node
, void *cookie
);
95 typedef int op_rewinddir(void *ns
, void *node
, void *cookie
);
96 typedef int op_readdir(void *ns
, void *node
, void *cookie
, long *num
,
97 struct dirent
*buf
, size_t bufsize
);
99 typedef int op_open(void *ns
, void *node
, int omode
, void **cookie
);
100 typedef int op_close(void *ns
, void *node
, void *cookie
);
101 typedef int op_free_cookie(void *ns
, void *node
, void *cookie
);
102 typedef int op_read(void *ns
, void *node
, void *cookie
, off_t pos
, void *buf
,
104 typedef int op_write(void *ns
, void *node
, void *cookie
, off_t pos
,
105 const void *buf
, size_t *len
);
106 typedef int op_readv(void *ns
, void *node
, void *cookie
, off_t pos
, const iovec
*vec
,
107 size_t count
, size_t *len
);
108 typedef int op_writev(void *ns
, void *node
, void *cookie
, off_t pos
, const iovec
*vec
,
109 size_t count
, size_t *len
);
110 typedef int op_ioctl(void *ns
, void *node
, void *cookie
, int cmd
, void *buf
,
112 typedef int op_setflags(void *ns
, void *node
, void *cookie
, int flags
);
114 typedef int op_rstat(void *ns
, void *node
, struct stat
*);
115 typedef int op_wstat(void *ns
, void *node
, struct stat
*, long mask
);
116 typedef int op_fsync(void *ns
, void *node
);
118 typedef int op_select(void *ns
, void *node
, void *cookie
, uint8 event
,
119 uint32 ref
, selectsync
*sync
);
120 typedef int op_deselect(void *ns
, void *node
, void *cookie
, uint8 event
,
123 typedef int op_initialize(const char *devname
, void *parms
, size_t len
);
124 typedef int op_mount(nspace_id nsid
, const char *devname
, ulong flags
,
125 void *parms
, size_t len
, void **data
, vnode_id
*vnid
);
126 typedef int op_unmount(void *ns
);
127 typedef int op_sync(void *ns
);
128 typedef int op_rfsstat(void *ns
, struct fs_info
*);
129 typedef int op_wfsstat(void *ns
, struct fs_info
*, long mask
);
132 typedef int op_open_attrdir(void *ns
, void *node
, void **cookie
);
133 typedef int op_close_attrdir(void *ns
, void *node
, void *cookie
);
134 typedef int op_rewind_attrdir(void *ns
, void *node
, void *cookie
);
135 typedef int op_read_attrdir(void *ns
, void *node
, void *cookie
, long *num
,
136 struct dirent
*buf
, size_t bufsize
);
137 typedef int op_remove_attr(void *ns
, void *node
, const char *name
);
138 typedef int op_rename_attr(void *ns
, void *node
, const char *oldname
,
139 const char *newname
);
140 typedef int op_stat_attr(void *ns
, void *node
, const char *name
,
141 struct attr_info
*buf
);
143 typedef int op_write_attr(void *ns
, void *node
, const char *name
, int type
,
144 const void *buf
, size_t *len
, off_t pos
);
145 typedef int op_read_attr(void *ns
, void *node
, const char *name
, int type
,
146 void *buf
, size_t *len
, off_t pos
);
148 typedef int op_open_indexdir(void *ns
, void **cookie
);
149 typedef int op_close_indexdir(void *ns
, void *cookie
);
150 typedef int op_rewind_indexdir(void *ns
, void *cookie
);
151 typedef int op_read_indexdir(void *ns
, void *cookie
, long *num
,
152 struct dirent
*buf
, size_t bufsize
);
153 typedef int op_create_index(void *ns
, const char *name
, int type
, int flags
);
154 typedef int op_remove_index(void *ns
, const char *name
);
155 typedef int op_rename_index(void *ns
, const char *oldname
,
156 const char *newname
);
157 typedef int op_stat_index(void *ns
, const char *name
, struct index_info
*buf
);
159 typedef int op_open_query(void *ns
, const char *query
, ulong flags
,
160 port_id port
, long token
, void **cookie
);
161 typedef int op_close_query(void *ns
, void *cookie
);
162 typedef int op_read_query(void *ns
, void *cookie
, long *num
,
163 struct dirent
*buf
, size_t bufsize
);
165 typedef struct vnode_ops
{
166 op_read_vnode (*read_vnode
);
167 op_write_vnode (*write_vnode
);
168 op_remove_vnode (*remove_vnode
);
169 op_secure_vnode (*secure_vnode
);
174 op_symlink (*symlink
);
179 op_readlink (*readlink
);
180 op_opendir (*opendir
);
181 op_closedir (*closedir
);
182 op_free_cookie (*free_dircookie
);
183 op_rewinddir (*rewinddir
);
184 op_readdir (*readdir
);
187 op_free_cookie (*free_cookie
);
193 op_setflags (*setflags
);
197 op_initialize (*initialize
);
199 op_unmount (*unmount
);
201 op_rfsstat (*rfsstat
);
202 op_wfsstat (*wfsstat
);
204 op_deselect (*deselect
);
205 op_open_indexdir (*open_indexdir
);
206 op_close_indexdir (*close_indexdir
);
207 op_free_cookie (*free_indexdircookie
);
208 op_rewind_indexdir (*rewind_indexdir
);
209 op_read_indexdir (*read_indexdir
);
210 op_create_index (*create_index
);
211 op_remove_index (*remove_index
);
212 op_rename_index (*rename_index
);
213 op_stat_index (*stat_index
);
214 op_open_attrdir (*open_attrdir
);
215 op_close_attrdir (*close_attrdir
);
216 op_free_cookie (*free_attrdircookie
);
217 op_rewind_attrdir (*rewind_attrdir
);
218 op_read_attrdir (*read_attrdir
);
219 op_write_attr (*write_attr
);
220 op_read_attr (*read_attr
);
221 op_remove_attr (*remove_attr
);
222 op_rename_attr (*rename_attr
);
223 op_stat_attr (*stat_attr
);
224 op_open_query (*open_query
);
225 op_close_query (*close_query
);
226 op_free_cookie (*free_querycookie
);
227 op_read_query (*read_query
);
234 extern _IMPEXP_KERNEL
int new_path(const char *path
, char **copy
);
235 extern _IMPEXP_KERNEL
void free_path(char *p
);
237 extern _IMPEXP_KERNEL
int notify_listener(int op
, nspace_id nsid
,
238 vnode_id vnida
, vnode_id vnidb
,
239 vnode_id vnidc
, const char *name
);
240 extern _IMPEXP_KERNEL
void notify_select_event(selectsync
*sync
, uint32 ref
);
241 extern _IMPEXP_KERNEL
int send_notification(port_id port
, long token
,
242 ulong what
, long op
, nspace_id nsida
,
243 nspace_id nsidb
, vnode_id vnida
,
244 vnode_id vnidb
, vnode_id vnidc
,
246 extern _IMPEXP_KERNEL
int get_vnode(nspace_id nsid
, vnode_id vnid
, void **data
);
247 extern _IMPEXP_KERNEL
int put_vnode(nspace_id nsid
, vnode_id vnid
);
248 extern _IMPEXP_KERNEL
int new_vnode(nspace_id nsid
, vnode_id vnid
, void *data
);
249 extern _IMPEXP_KERNEL
int remove_vnode(nspace_id nsid
, vnode_id vnid
);
250 extern _IMPEXP_KERNEL
int unremove_vnode(nspace_id nsid
, vnode_id vnid
);
251 extern _IMPEXP_KERNEL
int is_vnode_removed(nspace_id nsid
, vnode_id vnid
);
254 extern _EXPORT vnode_ops fs_entry
;
255 extern _EXPORT int32 api_version
;