diff options
author | Marvin Borner | 2019-10-30 16:02:10 +0100 |
---|---|---|
committer | Marvin Borner | 2019-10-30 16:02:10 +0100 |
commit | 118898807865ba11f5d7754f6f0572a0403f8512 (patch) | |
tree | 0b69c881089d659ebb214c409b699cc06323ab3d /src/kernel/fs/vfs.h | |
parent | fd4f0a11126a20e75d72f8f2e6d418598fd5f37d (diff) |
Started implementation of initrd based vfs
Diffstat (limited to 'src/kernel/fs/vfs.h')
-rw-r--r-- | src/kernel/fs/vfs.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/kernel/fs/vfs.h b/src/kernel/fs/vfs.h new file mode 100644 index 0000000..5a72861 --- /dev/null +++ b/src/kernel/fs/vfs.h @@ -0,0 +1,65 @@ +#ifndef MELVIX_VFS_H +#define MELVIX_VFS_H + +#include <stdint.h> + +#define FS_FILE 0x01 +#define FS_DIRECTORY 0x02 +#define FS_CHARDEVICE 0x03 +#define FS_BLOCKDEVICE 0x04 +#define FS_PIPE 0x05 +#define FS_SYMLINK 0x06 +#define FS_MOUNTPOINT 0x08 + +struct fs_node; + +typedef uint32_t (*read_type_t)(struct fs_node *, uint32_t, uint32_t, uint8_t *); + +typedef uint32_t (*write_type_t)(struct fs_node *, uint32_t, uint32_t, uint8_t *); + +typedef void (*open_type_t)(struct fs_node *); + +typedef void (*close_type_t)(struct fs_node *); + +typedef struct dirent *(*readdir_type_t)(struct fs_node *, uint32_t); + +typedef struct fs_node *(*finddir_type_t)(struct fs_node *, char *name); + +typedef struct fs_node { + char name[128]; + uint32_t mask; + uint32_t uid; + uint32_t gid; + uint32_t flags; + uint32_t inode; + uint32_t length; + uint32_t impl; + read_type_t read; + write_type_t write; + open_type_t open; + close_type_t close; + readdir_type_t readdir; + finddir_type_t finddir; + struct fs_node *ptr; +} fs_node_t; + +struct dirent { + char name[128]; + uint32_t ino; +}; + +extern fs_node_t *fs_root; + +uint32_t read_fs(fs_node_t *node, uint32_t offset, uint32_t size, uint8_t *buffer); + +uint32_t write_fs(fs_node_t *node, uint32_t offset, uint32_t size, uint8_t *buffer); + +void open_fs(fs_node_t *node, uint8_t read, uint8_t write); + +void close_fs(fs_node_t *node); + +struct dirent *readdir_fs(fs_node_t *node, uint32_t index); + +fs_node_t *finddir_fs(fs_node_t *node, char *name); + +#endif |