diff options
Diffstat (limited to 'src/kernel/vfs.h')
-rw-r--r-- | src/kernel/vfs.h | 56 |
1 files changed, 35 insertions, 21 deletions
diff --git a/src/kernel/vfs.h b/src/kernel/vfs.h index 6874905..a6de690 100644 --- a/src/kernel/vfs.h +++ b/src/kernel/vfs.h @@ -3,30 +3,44 @@ #include <stdint.h> -struct vfs_node; -struct dirent; +typedef struct { + char name[32]; +} vfs_dirent; + +typedef struct { + void *(*open)(const char *file); + void (*close)(void *info); + uint32_t (*read)(void *info, uint32_t count, uint8_t *buffer); + uint32_t (*write)(void *info, uint32_t count, const uint8_t *buffer); + vfs_dirent *(*readdir)(const char *path); +} vfs_volume_funcs; + +#define VFS_MOUNTED (1 << 0) +#define VFS_READONLY (1 << 1) typedef struct { - uint32_t (*read)(struct vfs_node *, uint32_t, uint32_t, uint8_t *); - uint32_t (*write)(struct vfs_node *, uint32_t, uint32_t, const uint8_t *); - void (*open)(struct vfs_node *); - void (*close)(struct vfs_node *); -} vfs_driver; - -typedef struct vfs_node { - char *name; uint32_t flags; + vfs_volume_funcs *funcs; +} vfs_volume; + +#define VFS_FILE_OPEN (1 << 0) +#define VFS_FILE_READ (1 << 1) +#define VFS_FILE_WRITE (1 << 2) +#define VFS_FILE_MODF (1 << 3) +#define VFS_TEMPORARY (1 << 4) +#define VFS_EOF (1 << 5) + +typedef struct { + uint32_t flags; + uint32_t vol; + uint32_t pid; + void *fsinfo; +} vfs_file; + +void vfs_init(void); - struct vfs_node *parent; - union { - struct vfs_node* children; - vfs_driver *access; - } data; -} vfs_node; - -struct dirent { - char *name; - vfs_node *node; -}; +int vfs_mount(vfs_volume_funcs *funcs, uint32_t flags); +int vfs_open(const char *path, uint32_t flags); +uint32_t vfs_read(int fd, uint32_t count, uint8_t *buffer); #endif // VFS_H_ |