[ea5f46d] | 1 | interface vfs extends service {
|
---|
[1993f9a] | 2 | /* Register a filesystem driver */
|
---|
[96b02eb9] | 3 | sysarg_t register(in_copy string name);
|
---|
[f1380b7] | 4 |
|
---|
[1993f9a] | 5 | /* Mount filesystem */
|
---|
[4979403] | 6 | sysarg_t mount(in sysarg_t device, in sysarg_t flags, in sysarg_t instance, in_copy string point, in_copy string opts, in_copy string fs);
|
---|
[f1380b7] | 7 |
|
---|
[1993f9a] | 8 | /* Open file */
|
---|
[96b02eb9] | 9 | sysarg_t open(in sysarg_t lflag, in sysarg_t oflag, in sysarg_t mode, in_copy string path, out sysarg_t fd);
|
---|
[f1380b7] | 10 |
|
---|
[1993f9a] | 11 | /* Open file using node */
|
---|
[96b02eb9] | 12 | sysarg_t open_node(in sysarg_t fs_handle, in sysarg_t dev_handle, in sysarg_t index, in sysarg_t oflag, out sysarg_t fd);
|
---|
[f1380b7] | 13 |
|
---|
[1993f9a] | 14 | /* Read data from file */
|
---|
[96b02eb9] | 15 | sysarg_t read(in sysarg_t fd, out_copy stream data);
|
---|
[f1380b7] | 16 |
|
---|
[1993f9a] | 17 | /* Write data to file */
|
---|
[96b02eb9] | 18 | sysarg_t write(in sysarg_t fd, in_copy stream data);
|
---|
[f1380b7] | 19 |
|
---|
[1993f9a] | 20 | /* Seek in file */
|
---|
[96b02eb9] | 21 | sysarg_t seek(in sysarg_t fd, in sysarg_t offset, in sysarg_t whence);
|
---|
[f1380b7] | 22 |
|
---|
[1993f9a] | 23 | /* Truncate file */
|
---|
[96b02eb9] | 24 | sysarg_t truncate(in sysarg_t fd, in sysarg_t size);
|
---|
[f1380b7] | 25 |
|
---|
[1993f9a] | 26 | /* Get file metadata */
|
---|
[96b02eb9] | 27 | sysarg_t fstat(in sysarg_t fd, out_copy stream stat);
|
---|
[f1380b7] | 28 |
|
---|
[1993f9a] | 29 | /* Get directory entry metadata */
|
---|
[96b02eb9] | 30 | sysarg_t stat(in_copy string path, out_copy stream stat);
|
---|
[f1380b7] | 31 |
|
---|
[1993f9a] | 32 | /* Create directory */
|
---|
[96b02eb9] | 33 | sysarg_t mkdir(in sysarg_t mode, in_copy string path);
|
---|
[f1380b7] | 34 |
|
---|
[1993f9a] | 35 | /* Delete directory entry */
|
---|
[96b02eb9] | 36 | sysarg_t unlink(in sysarg_t lflag, in_copy string path);
|
---|
[f1380b7] | 37 |
|
---|
[1993f9a] | 38 | /* Rename directory entry */
|
---|
[96b02eb9] | 39 | sysarg_t rename(in_copy string old, in_copy string new);
|
---|
[f1380b7] | 40 |
|
---|
[1993f9a] | 41 | /* Flush file buffers */
|
---|
[96b02eb9] | 42 | sysarg_t sync(in sysarg_t fd);
|
---|
[f1380b7] | 43 |
|
---|
[1993f9a] | 44 | /* In-protocol status value */
|
---|
[96b02eb9] | 45 | sysarg_t ipc_m_ping(void);
|
---|
[f1380b7] | 46 |
|
---|
[1993f9a] | 47 | /* Close connection */
|
---|
[96b02eb9] | 48 | sysarg_t ipc_m_phone_hungup(void);
|
---|
[1993f9a] | 49 | protocol:
|
---|
[ea5f46d] | 50 | [vfs.bp]
|
---|
[1993f9a] | 51 | };
|
---|
| 52 |
|
---|
[ea5f46d] | 53 | interface fs extends service {
|
---|
| 54 | /* Notify filesystem that it was mounted */
|
---|
[96b02eb9] | 55 | sysarg_t mounted(in sysarg_t dev_handle, in_copy string opts);
|
---|
[f1380b7] | 56 |
|
---|
[ea5f46d] | 57 | /* Mount filesystem */
|
---|
[4979403] | 58 | sysarg_t mount(in sysarg_t device, in sysarg_t flags, in sysarg_t instance, in_copy string point, in_copy string opts, ...);
|
---|
[f1380b7] | 59 |
|
---|
[ea5f46d] | 60 | /* Open file by node */
|
---|
[96b02eb9] | 61 | sysarg_t open_node(in sysarg_t lflag, in sysarg_t oflag, in sysarg_t mode, ...);
|
---|
[f1380b7] | 62 |
|
---|
[ea5f46d] | 63 | /* Lookup file */
|
---|
[96b02eb9] | 64 | sysarg_t lookup(in sysarg_t lflag, in sysarg_t oflag, in sysarg_t mode, ...);
|
---|
[f1380b7] | 65 |
|
---|
[ea5f46d] | 66 | /* Read data from file */
|
---|
[96b02eb9] | 67 | sysarg_t read(in sysarg_t dev_handle, in sysarg_t fs_index, in sysarg_t offset, out_copy stream data);
|
---|
[f1380b7] | 68 |
|
---|
[ea5f46d] | 69 | /* Write data to file */
|
---|
[96b02eb9] | 70 | sysarg_t write(in sysarg_t dev_handle, in sysarg_t fs_index, in sysarg_t offset, in_copy stream data);
|
---|
[f1380b7] | 71 |
|
---|
[ea5f46d] | 72 | /* Truncate file */
|
---|
[96b02eb9] | 73 | sysarg_t truncate(in sysarg_t dev_handle, in sysarg_t fs_index, in sysarg_t size);
|
---|
[f1380b7] | 74 |
|
---|
[ea5f46d] | 75 | /* Get directory entry metadata */
|
---|
[96b02eb9] | 76 | sysarg_t stat(in sysarg_t dev_handle, in sysarg_t fs_index, out_copy stream stat);
|
---|
[f1380b7] | 77 |
|
---|
[ea5f46d] | 78 | /* Flush file buffers */
|
---|
[96b02eb9] | 79 | sysarg_t sync(in sysarg_t dev_handle, in sysarg_t fs_index);
|
---|
[f1380b7] | 80 |
|
---|
[ea5f46d] | 81 | /* Notify on file close */
|
---|
[96b02eb9] | 82 | sysarg_t close(in sysarg_t dev_handle, in sysarg_t fs_index);
|
---|
[ea5f46d] | 83 | };
|
---|
| 84 |
|
---|
[810860a] | 85 | frame io_dispatcher {
|
---|
[1993f9a] | 86 | provides:
|
---|
| 87 | vfs vfs;
|
---|
| 88 | requires:
|
---|
[2a70672] | 89 | [/uspace/lib/libc/requires]
|
---|
[afe34be] | 90 | ns ns;
|
---|
[cf7b3e0] | 91 | tmpfs tmpfs;
|
---|
| 92 | fat fat;
|
---|
| 93 | devfs devfs;
|
---|
[6d4c549] | 94 | initialization:
|
---|
| 95 | !ns.ipc_m_connect_to_me /* vfs */
|
---|
[1993f9a] | 96 | protocol:
|
---|
[6d4c549] | 97 | [/uspace/lib/libc/protocol]
|
---|
[ea5f46d] | 98 | };
|
---|
| 99 |
|
---|
| 100 | architecture vfs {
|
---|
[810860a] | 101 | inst io_dispatcher io_dispatcher;
|
---|
[ea5f46d] | 102 | inst tmpfs tmpfs;
|
---|
| 103 | inst fat fat;
|
---|
| 104 | inst devfs devfs;
|
---|
[f1380b7] | 105 |
|
---|
[810860a] | 106 | bind io_dispatcher:tmpfs to tmpfs:tmpfs;
|
---|
| 107 | bind io_dispatcher:fat to fat:fat;
|
---|
| 108 | bind io_dispatcher:devfs to devfs:devfs;
|
---|
[f1380b7] | 109 |
|
---|
[810860a] | 110 | bind tmpfs:vfs to io_dispatcher:vfs;
|
---|
| 111 | bind fat:vfs to io_dispatcher:vfs;
|
---|
| 112 | bind devfs:vfs to io_dispatcher:vfs;
|
---|
[f1380b7] | 113 |
|
---|
[afe34be] | 114 | bind tmpfs:tmpfs_nested to tmpfs:tmpfs;
|
---|
| 115 | bind tmpfs:fat_nested to fat:fat;
|
---|
| 116 | bind tmpfs:devfs_nested to devfs:devfs;
|
---|
[f1380b7] | 117 |
|
---|
[afe34be] | 118 | bind fat:tmpfs_nested to tmpfs:tmpfs;
|
---|
| 119 | bind fat:fat_nested to fat:fat;
|
---|
| 120 | bind fat:devfs_nested to devfs:devfs;
|
---|
[f1380b7] | 121 |
|
---|
[810860a] | 122 | delegate vfs to io_dispatcher:vfs;
|
---|
[f1380b7] | 123 |
|
---|
[810860a] | 124 | [/uspace/lib/libc/subsume%io_dispatcher]
|
---|
[ea5f46d] | 125 | [/uspace/lib/libc/subsume%tmpfs]
|
---|
| 126 | [/uspace/lib/libc/subsume%fat]
|
---|
| 127 | [/uspace/lib/libc/subsume%devfs]
|
---|
[f1380b7] | 128 |
|
---|
[810860a] | 129 | subsume io_dispatcher:ns to ns;
|
---|
[ea5f46d] | 130 | subsume tmpfs:ns to ns;
|
---|
| 131 | subsume fat:ns to ns;
|
---|
| 132 | subsume devfs:ns to ns;
|
---|
[f1380b7] | 133 |
|
---|
[cf7b3e0] | 134 | subsume tmpfs:rd to rd;
|
---|
| 135 | subsume fat:rd to rd;
|
---|
[f1380b7] | 136 |
|
---|
[ea5f46d] | 137 | subsume devfs:devmap_client to devmap_client;
|
---|
| 138 | subsume devfs:device to device;
|
---|
[1993f9a] | 139 | };
|
---|