Subversion Repositories HelenOS

Rev

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

Rev 2535 Rev 2540
Line 33... Line 33...
33
#ifndef VFS_VFS_H_
33
#ifndef VFS_VFS_H_
34
#define VFS_VFS_H_
34
#define VFS_VFS_H_
35
 
35
 
36
#include <ipc/ipc.h>
36
#include <ipc/ipc.h>
37
#include <libadt/list.h>
37
#include <libadt/list.h>
-
 
38
#include <atomic.h>
-
 
39
#include <types.h>
38
 
40
 
39
#define dprintf(...)    printf(__VA_ARGS__)
41
#define dprintf(...)    printf(__VA_ARGS__)
40
 
42
 
41
#define VFS_FIRST   FIRST_USER_METHOD
43
#define VFS_FIRST   FIRST_USER_METHOD
42
 
44
 
43
#define IPC_METHOD_TO_VFS_OP(m) ((m) - VFS_FIRST)   
45
#define IPC_METHOD_TO_VFS_OP(m) ((m) - VFS_FIRST)   
44
 
46
 
-
 
47
typedef int64_t off_t;
-
 
48
 
45
typedef enum {
49
typedef enum {
46
    VFS_REGISTER = VFS_FIRST,
50
    VFS_REGISTER = VFS_FIRST,
47
    VFS_MOUNT,
51
    VFS_MOUNT,
48
    VFS_UNMOUNT,
52
    VFS_UNMOUNT,
49
    VFS_LOOKUP,
53
    VFS_LOOKUP,
Line 82... Line 86...
82
   
86
   
83
    /** Operations. */
87
    /** Operations. */
84
    vfs_op_t ops[VFS_LAST - VFS_FIRST];
88
    vfs_op_t ops[VFS_LAST - VFS_FIRST];
85
} vfs_info_t;
89
} vfs_info_t;
86
 
90
 
-
 
91
/**
-
 
92
 * A structure like this will be allocated for each registered file system.
-
 
93
 */
87
typedef struct {
94
typedef struct {
88
    link_t fs_link;
95
    link_t fs_link;
89
    vfs_info_t vfs_info;
96
    vfs_info_t vfs_info;
90
    ipcarg_t phone;
97
    ipcarg_t phone;
91
} fs_info_t;
98
} fs_info_t;
92
 
99
 
-
 
100
/**
-
 
101
 * Instances of this type represent a file system node (e.g. directory, file).
-
 
102
 * They are abstracted away from any file system implementation and contain just
-
 
103
 * enough bits to uniquely identify the object in its file system instance.
-
 
104
 *
-
 
105
 * @note    fs_handle, dev_handle and index are meant to be returned in one
-
 
106
 *      IPC reply.
-
 
107
 */
-
 
108
typedef struct {
-
 
109
    int fs_handle;      /**< Global file system ID. */
-
 
110
    int dev_handle;     /**< Global mount device devno. */
-
 
111
    uint64_t index;     /**< Index of the node on its file system. */
-
 
112
} vfs_node_t;
-
 
113
 
-
 
114
/**
-
 
115
 * Instances of this type represent an open file. If the file is opened by more
-
 
116
 * than one task, there will be a separate structure allocated for each task.
-
 
117
 */
-
 
118
typedef struct {
-
 
119
    vfs_node_t *node;
-
 
120
   
-
 
121
    /** Number of file handles referencing this file. */
-
 
122
    atomic_t refcnt;
-
 
123
 
-
 
124
    /** Current position in the file. */
-
 
125
    off_t pos;
-
 
126
} vfs_file_t;
-
 
127
 
93
extern link_t fs_head;
128
extern link_t fs_head;
94
 
129
 
95
extern void vfs_register(ipc_callid_t rid, ipc_call_t *request);
130
extern void vfs_register(ipc_callid_t rid, ipc_call_t *request);
96
 
131
 
97
#endif
132
#endif