Subversion Repositories HelenOS

Rev

Rev 2766 | Rev 2821 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2766 Rev 2770
Line 44... Line 44...
44
 
44
 
45
#define VFS_FIRST   IPC_FIRST_USER_METHOD
45
#define VFS_FIRST   IPC_FIRST_USER_METHOD
46
 
46
 
47
#define IPC_METHOD_TO_VFS_OP(m) ((m) - VFS_FIRST)   
47
#define IPC_METHOD_TO_VFS_OP(m) ((m) - VFS_FIRST)   
48
 
48
 
-
 
49
/* Basic types. */
-
 
50
typedef int16_t fs_handle_t;
-
 
51
typedef int16_t dev_handle_t;
-
 
52
typedef uint32_t fs_index_t;
-
 
53
 
49
typedef enum {
54
typedef enum {
50
    VFS_READ = VFS_FIRST,
55
    VFS_READ = VFS_FIRST,
51
    VFS_WRITE,
56
    VFS_WRITE,
52
    VFS_TRUNCATE,
57
    VFS_TRUNCATE,
53
    VFS_MOUNT,
58
    VFS_MOUNT,
Line 104... Line 109...
104
 * A structure like this will be allocated for each registered file system.
109
 * A structure like this will be allocated for each registered file system.
105
 */
110
 */
106
typedef struct {
111
typedef struct {
107
    link_t fs_link;
112
    link_t fs_link;
108
    vfs_info_t vfs_info;
113
    vfs_info_t vfs_info;
109
    int fs_handle;
114
    fs_handle_t fs_handle;
110
    futex_t phone_futex;    /**< Phone serializing futex. */
115
    futex_t phone_futex;    /**< Phone serializing futex. */
111
    ipcarg_t phone;
116
    ipcarg_t phone;
112
} fs_info_t;
117
} fs_info_t;
113
 
118
 
114
/**
119
/**
115
 * VFS_PAIR uniquely represents a file system instance.
120
 * VFS_PAIR uniquely represents a file system instance.
116
 */
121
 */
117
#define VFS_PAIR    \
122
#define VFS_PAIR        \
118
    int fs_handle;  \
123
    fs_handle_t fs_handle;  \
119
    int dev_handle; 
124
    dev_handle_t dev_handle;
120
 
125
 
121
/**
126
/**
122
 * VFS_TRIPLET uniquely identifies a file system node (e.g. directory, file) but
127
 * VFS_TRIPLET uniquely identifies a file system node (e.g. directory, file) but
123
 * doesn't contain any state. For a stateful structure, see vfs_node_t.
128
 * doesn't contain any state. For a stateful structure, see vfs_node_t.
124
 *
129
 *
125
 * @note    fs_handle, dev_handle and index are meant to be returned in one
130
 * @note    fs_handle, dev_handle and index are meant to be returned in one
126
 *      IPC reply.
131
 *      IPC reply.
127
 */
132
 */
128
#define VFS_TRIPLET \
133
#define VFS_TRIPLET \
129
    VFS_PAIR;   \
134
    VFS_PAIR;   \
130
    uint64_t index;
135
    fs_index_t index;
131
 
136
 
132
typedef struct {
137
typedef struct {
133
    VFS_PAIR;
138
    VFS_PAIR;
134
} vfs_pair_t;
139
} vfs_pair_t;
135
 
140
 
Line 254... Line 259...
254
extern link_t plb_head;     /**< List of active PLB entries. */
259
extern link_t plb_head;     /**< List of active PLB entries. */
255
 
260
 
256
/** Holding this rwlock prevents changes in file system namespace. */
261
/** Holding this rwlock prevents changes in file system namespace. */
257
extern rwlock_t namespace_rwlock;
262
extern rwlock_t namespace_rwlock;
258
 
263
 
259
extern int vfs_grab_phone(int);
264
extern int vfs_grab_phone(fs_handle_t);
260
extern void vfs_release_phone(int);
265
extern void vfs_release_phone(int);
261
 
266
 
262
extern int fs_name_to_handle(char *, bool);
267
extern fs_handle_t fs_name_to_handle(char *, bool);
263
 
268
 
264
extern int vfs_lookup_internal(char *, int, vfs_lookup_res_t *, vfs_pair_t *,
269
extern int vfs_lookup_internal(char *, int, vfs_lookup_res_t *, vfs_pair_t *,
265
    ...);
270
    ...);
266
 
271
 
267
extern bool vfs_nodes_init(void);
272
extern bool vfs_nodes_init(void);