1/* 2 Copyright 1999-2001, Be Incorporated. All Rights Reserved. 3 This file may be used under the terms of the Be Sample Code License. 4*/ 5 6#ifndef _FSPROTO_H 7#define _FSPROTO_H 8 9// TODO: FIXME! XXX! DANGER! BIOHAZARD! 10// OMG, we're defining COMPILE_FOR_R5 so that <drivers/Select.h> defines the 11// obsolete notify_select_event() prototype. BTW, this happens only on 12// non-BeOS-compatible host platforms. Outright scary! 13#ifdef MEAN_BFS_SHELL_SELECT_HACK 14# define COMPILE_FOR_R5 15# include <drivers/Select.h> 16# undef COMPILE_FOR_R5 17#endif 18 19#include <sys/types.h> 20#include <sys/param.h> 21#include <sys/stat.h> 22#include <unistd.h> 23//#include <iovec.h> 24 25#include <OS.h> 26#include <NodeMonitor.h> 27#include <fs_attr.h> 28#include <fs_info.h> 29#include <BeBuild.h> 30#include <Drivers.h> 31 32typedef dev_t nspace_id; 33typedef ino_t vnode_id; 34 35/* 36 * PUBLIC PART OF THE FILE SYSTEM PROTOCOL 37 */ 38 39#define WSTAT_MODE 0x0001 40#define WSTAT_UID 0x0002 41#define WSTAT_GID 0x0004 42#define WSTAT_SIZE 0x0008 43#define WSTAT_ATIME 0x0010 44#define WSTAT_MTIME 0x0020 45#define WSTAT_CRTIME 0x0040 46 47#define WFSSTAT_NAME 0x0001 48 49#define SELECT_READ 1 50#define SELECT_WRITE 2 51#define SELECT_EXCEPTION 3 52 53// missing ioctl() call added 54#define IOCTL_FILE_UNCACHED_IO 10000 55#define IOCTL_CREATE_TIME 10002 56#define IOCTL_MODIFIED_TIME 10003 57 58 59// B_CUR_FS_API_VERSION is 2 for R5, but 3 on Zeta and Dano, because 60// of the added calls for power management - so it's set to 3 here 61// because that's a requirement to let Dano boot from our fs... 62#ifdef COMPILE_FOR_ZETA 63# define B_CUR_FS_API_VERSION 3 64#else 65# define B_CUR_FS_API_VERSION 2 66#endif 67 68struct attr_info; 69struct index_info; 70 71typedef int op_read_vnode(void *ns, vnode_id vnid, char r, void **node); 72typedef int op_write_vnode(void *ns, void *node, char r); 73typedef int op_remove_vnode(void *ns, void *node, char r); 74typedef int op_secure_vnode(void *ns, void *node); 75typedef int op_wake_vnode(void *ns, void *node); 76typedef int op_suspend_vnode(void *ns, void *node); 77 78typedef int op_walk(void *ns, void *base, const char *file, char **newpath, 79 vnode_id *vnid); 80 81typedef int op_access(void *ns, void *node, int mode); 82 83typedef int op_create(void *ns, void *dir, const char *name, 84 int omode, int perms, vnode_id *vnid, void **cookie); 85typedef int op_mkdir(void *ns, void *dir, const char *name, int perms); 86typedef int op_symlink(void *ns, void *dir, const char *name, 87 const char *path); 88typedef int op_link(void *ns, void *dir, const char *name, void *node); 89 90typedef int op_rename(void *ns, void *olddir, const char *oldname, 91 void *newdir, const char *newname); 92typedef int op_unlink(void *ns, void *dir, const char *name); 93typedef int op_rmdir(void *ns, void *dir, const char *name); 94 95typedef int op_readlink(void *ns, void *node, char *buf, size_t *bufsize); 96 97typedef int op_opendir(void *ns, void *node, void **cookie); 98typedef int op_closedir(void *ns, void *node, void *cookie); 99typedef int op_rewinddir(void *ns, void *node, void *cookie); 100typedef int op_readdir(void *ns, void *node, void *cookie, long *num, 101 struct dirent *buf, size_t bufsize); 102 103typedef int op_open(void *ns, void *node, int omode, void **cookie); 104typedef int op_close(void *ns, void *node, void *cookie); 105typedef int op_free_cookie(void *ns, void *node, void *cookie); 106typedef int op_read(void *ns, void *node, void *cookie, off_t pos, void *buf, 107 size_t *len); 108typedef int op_write(void *ns, void *node, void *cookie, off_t pos, 109 const void *buf, size_t *len); 110typedef int op_readv(void *ns, void *node, void *cookie, off_t pos, const iovec *vec, 111 size_t count, size_t *len); 112typedef int op_writev(void *ns, void *node, void *cookie, off_t pos, const iovec *vec, 113 size_t count, size_t *len); 114typedef int op_ioctl(void *ns, void *node, void *cookie, int cmd, void *buf, 115 size_t len); 116typedef int op_setflags(void *ns, void *node, void *cookie, int flags); 117 118typedef int op_rstat(void *ns, void *node, struct stat *); 119typedef int op_wstat(void *ns, void *node, struct stat *, long mask); 120typedef int op_fsync(void *ns, void *node); 121 122typedef int op_select(void *ns, void *node, void *cookie, uint8 event, 123 uint32 ref, selectsync *sync); 124typedef int op_deselect(void *ns, void *node, void *cookie, uint8 event, 125 selectsync *sync); 126 127typedef int op_initialize(const char *devname, void *parms, size_t len); 128typedef int op_mount(nspace_id nsid, const char *devname, ulong flags, 129 void *parms, size_t len, void **data, vnode_id *vnid); 130typedef int op_unmount(void *ns); 131typedef int op_sync(void *ns); 132typedef int op_rfsstat(void *ns, struct fs_info *); 133typedef int op_wfsstat(void *ns, struct fs_info *, long mask); 134 135 136typedef int op_open_attrdir(void *ns, void *node, void **cookie); 137typedef int op_close_attrdir(void *ns, void *node, void *cookie); 138typedef int op_rewind_attrdir(void *ns, void *node, void *cookie); 139typedef int op_read_attrdir(void *ns, void *node, void *cookie, long *num, 140 struct dirent *buf, size_t bufsize); 141typedef int op_remove_attr(void *ns, void *node, const char *name); 142typedef int op_rename_attr(void *ns, void *node, const char *oldname, 143 const char *newname); 144typedef int op_stat_attr(void *ns, void *node, const char *name, 145 struct attr_info *buf); 146 147typedef int op_write_attr(void *ns, void *node, const char *name, int type, 148 const void *buf, size_t *len, off_t pos); 149typedef int op_read_attr(void *ns, void *node, const char *name, int type, 150 void *buf, size_t *len, off_t pos); 151 152typedef int op_open_indexdir(void *ns, void **cookie); 153typedef int op_close_indexdir(void *ns, void *cookie); 154typedef int op_rewind_indexdir(void *ns, void *cookie); 155typedef int op_read_indexdir(void *ns, void *cookie, long *num, 156 struct dirent *buf, size_t bufsize); 157typedef int op_create_index(void *ns, const char *name, int type, int flags); 158typedef int op_remove_index(void *ns, const char *name); 159typedef int op_rename_index(void *ns, const char *oldname, 160 const char *newname); 161typedef int op_stat_index(void *ns, const char *name, struct index_info *buf); 162 163typedef int op_open_query(void *ns, const char *query, ulong flags, 164 port_id port, long token, void **cookie); 165typedef int op_close_query(void *ns, void *cookie); 166typedef int op_read_query(void *ns, void *cookie, long *num, 167 struct dirent *buf, size_t bufsize); 168 169typedef struct vnode_ops { 170 op_read_vnode (*read_vnode); 171 op_write_vnode (*write_vnode); 172 op_remove_vnode (*remove_vnode); 173 op_secure_vnode (*secure_vnode); 174 op_walk (*walk); 175 op_access (*access); 176 op_create (*create); 177 op_mkdir (*mkdir); 178 op_symlink (*symlink); 179 op_link (*link); 180 op_rename (*rename); 181 op_unlink (*unlink); 182 op_rmdir (*rmdir); 183 op_readlink (*readlink); 184 op_opendir (*opendir); 185 op_closedir (*closedir); 186 op_free_cookie (*free_dircookie); 187 op_rewinddir (*rewinddir); 188 op_readdir (*readdir); 189 op_open (*open); 190 op_close (*close); 191 op_free_cookie (*free_cookie); 192 op_read (*read); 193 op_write (*write); 194 op_readv (*readv); 195 op_writev (*writev); 196 op_ioctl (*ioctl); 197 op_setflags (*setflags); 198 op_rstat (*rstat); 199 op_wstat (*wstat); 200 op_fsync (*fsync); 201 op_initialize (*initialize); 202 op_mount (*mount); 203 op_unmount (*unmount); 204 op_sync (*sync); 205 op_rfsstat (*rfsstat); 206 op_wfsstat (*wfsstat); 207 op_select (*select); 208 op_deselect (*deselect); 209 op_open_indexdir (*open_indexdir); 210 op_close_indexdir (*close_indexdir); 211 op_free_cookie (*free_indexdircookie); 212 op_rewind_indexdir (*rewind_indexdir); 213 op_read_indexdir (*read_indexdir); 214 op_create_index (*create_index); 215 op_remove_index (*remove_index); 216 op_rename_index (*rename_index); 217 op_stat_index (*stat_index); 218 op_open_attrdir (*open_attrdir); 219 op_close_attrdir (*close_attrdir); 220 op_free_cookie (*free_attrdircookie); 221 op_rewind_attrdir (*rewind_attrdir); 222 op_read_attrdir (*read_attrdir); 223 op_write_attr (*write_attr); 224 op_read_attr (*read_attr); 225 op_remove_attr (*remove_attr); 226 op_rename_attr (*rename_attr); 227 op_stat_attr (*stat_attr); 228 op_open_query (*open_query); 229 op_close_query (*close_query); 230 op_free_cookie (*free_querycookie); 231 op_read_query (*read_query); 232 // for Dano compatibility only 233 op_wake_vnode (*wake_vnode); 234 op_suspend_vnode (*suspend_vnode); 235} vnode_ops; 236 237#ifdef __cplusplus 238extern "C" { 239#endif 240 241extern _IMPEXP_KERNEL int new_path(const char *path, char **copy); 242extern _IMPEXP_KERNEL void free_path(char *p); 243 244extern _IMPEXP_KERNEL void notify_select_event(selectsync *sync, uint32 ref); 245 246extern _IMPEXP_KERNEL int notify_listener(int op, nspace_id nsid, 247 vnode_id vnida, vnode_id vnidb, 248 vnode_id vnidc, const char *name); 249extern _IMPEXP_KERNEL status_t send_notification(port_id port, long token, 250 ulong what, long op, nspace_id device, nspace_id toDevice, 251 vnode_id parentNode, vnode_id toParentNode, vnode_id node, 252 const char *name); 253 254extern _IMPEXP_KERNEL int get_vnode(nspace_id nsid, vnode_id vnid, void **data); 255extern _IMPEXP_KERNEL int put_vnode(nspace_id nsid, vnode_id vnid); 256extern _IMPEXP_KERNEL int new_vnode(nspace_id nsid, vnode_id vnid, void *data); 257extern _IMPEXP_KERNEL int remove_vnode(nspace_id nsid, vnode_id vnid); 258extern _IMPEXP_KERNEL int unremove_vnode(nspace_id nsid, vnode_id vnid); 259extern _IMPEXP_KERNEL int is_vnode_removed(nspace_id nsid, vnode_id vnid); 260 261#ifdef __cplusplus 262} 263#endif 264 265extern _EXPORT vnode_ops fs_entry; 266extern _EXPORT int32 api_version; 267 268#endif /* _FSPROTO_H */ 269