Rev 3022 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3022 | Rev 4055 | ||
---|---|---|---|
Line 47... | Line 47... | ||
47 | #include "../../vfs/vfs.h" |
47 | #include "../../vfs/vfs.h" |
48 | 48 | ||
49 | 49 | ||
50 | vfs_info_t fat_vfs_info = { |
50 | vfs_info_t fat_vfs_info = { |
51 | .name = "fat", |
51 | .name = "fat", |
52 | .ops = { |
- | |
53 | [IPC_METHOD_TO_VFS_OP(VFS_LOOKUP)] = VFS_OP_DEFINED, |
- | |
54 | [IPC_METHOD_TO_VFS_OP(VFS_READ)] = VFS_OP_DEFINED, |
- | |
55 | [IPC_METHOD_TO_VFS_OP(VFS_WRITE)] = VFS_OP_NULL, |
- | |
56 | [IPC_METHOD_TO_VFS_OP(VFS_TRUNCATE)] = VFS_OP_NULL, |
- | |
57 | [IPC_METHOD_TO_VFS_OP(VFS_MOUNT)] = VFS_OP_NULL, |
- | |
58 | [IPC_METHOD_TO_VFS_OP(VFS_UNMOUNT)] = VFS_OP_NULL, |
- | |
59 | } |
- | |
60 | }; |
52 | }; |
61 | 53 | ||
62 | fs_reg_t fat_reg; |
54 | fs_reg_t fat_reg; |
63 | 55 | ||
64 | /** |
56 | /** |
Line 95... | Line 87... | ||
95 | ipc_callid_t callid; |
87 | ipc_callid_t callid; |
96 | ipc_call_t call; |
88 | ipc_call_t call; |
97 | 89 | ||
98 | callid = async_get_call(&call); |
90 | callid = async_get_call(&call); |
99 | switch (IPC_GET_METHOD(call)) { |
91 | switch (IPC_GET_METHOD(call)) { |
- | 92 | case VFS_MOUNTED: |
|
- | 93 | fat_mounted(callid, &call); |
|
- | 94 | break; |
|
- | 95 | case VFS_MOUNT: |
|
- | 96 | fat_mount(callid, &call); |
|
- | 97 | break; |
|
100 | case VFS_LOOKUP: |
98 | case VFS_LOOKUP: |
101 | fat_lookup(callid, &call); |
99 | fat_lookup(callid, &call); |
102 | break; |
100 | break; |
- | 101 | case VFS_READ: |
|
- | 102 | fat_read(callid, &call); |
|
- | 103 | break; |
|
- | 104 | case VFS_WRITE: |
|
- | 105 | fat_write(callid, &call); |
|
- | 106 | break; |
|
- | 107 | case VFS_TRUNCATE: |
|
- | 108 | fat_truncate(callid, &call); |
|
- | 109 | break; |
|
- | 110 | case VFS_DESTROY: |
|
- | 111 | fat_destroy(callid, &call); |
|
- | 112 | break; |
|
103 | default: |
113 | default: |
104 | ipc_answer_0(callid, ENOTSUP); |
114 | ipc_answer_0(callid, ENOTSUP); |
105 | break; |
115 | break; |
106 | } |
116 | } |
107 | } |
117 | } |
108 | } |
118 | } |
109 | 119 | ||
110 | int main(int argc, char **argv) |
120 | int main(int argc, char **argv) |
111 | { |
121 | { |
112 | int vfs_phone; |
122 | int vfs_phone; |
- | 123 | int rc; |
|
113 | 124 | ||
114 | printf("FAT: HelenOS FAT file system server.\n"); |
125 | printf("fat: HelenOS FAT file system server.\n"); |
115 | 126 | ||
- | 127 | rc = fat_idx_init(); |
|
- | 128 | if (rc != EOK) |
|
- | 129 | goto err; |
|
- | 130 | ||
116 | vfs_phone = ipc_connect_me_to(PHONE_NS, SERVICE_VFS, 0, 0); |
131 | vfs_phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_VFS, 0, 0); |
117 | while (vfs_phone < EOK) { |
132 | if (vfs_phone < EOK) { |
- | 133 | printf("fat: failed to connect to VFS\n"); |
|
118 | usleep(10000); |
134 | return -1; |
119 | vfs_phone = ipc_connect_me_to(PHONE_NS, SERVICE_VFS, 0, 0); |
- | |
120 | } |
135 | } |
121 | 136 | ||
122 | int rc; |
- | |
123 | rc = fs_register(vfs_phone, &fat_reg, &fat_vfs_info, fat_connection); |
137 | rc = fs_register(vfs_phone, &fat_reg, &fat_vfs_info, fat_connection); |
124 | if (rc != EOK) { |
138 | if (rc != EOK) { |
125 | printf("Failed to register the FAT file system (%d)\n", rc); |
139 | fat_idx_fini(); |
126 | return rc; |
140 | goto err; |
127 | } |
141 | } |
128 | 142 | ||
129 | dprintf("FAT filesystem registered, fs_handle=%d.\n", |
143 | dprintf("FAT filesystem registered, fs_handle=%d.\n", |
130 | fat_reg.fs_handle); |
144 | fat_reg.fs_handle); |
131 | 145 | ||
132 | async_manager(); |
146 | async_manager(); |
133 | /* not reached */ |
147 | /* not reached */ |
134 | return 0; |
148 | return 0; |
- | 149 | ||
- | 150 | err: |
|
- | 151 | printf("Failed to register the FAT file system (%d)\n", rc); |
|
- | 152 | return rc; |
|
135 | } |
153 | } |
136 | 154 | ||
137 | /** |
155 | /** |
138 | * @} |
156 | * @} |
139 | */ |
157 | */ |