Rev 2535 | Rev 2542 | Go to most recent revision | Show entire file | Regard 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 |