summaryrefslogtreecommitdiffstats
path: root/sw/z80/kernel/include/fs/fs.h
diff options
context:
space:
mode:
Diffstat (limited to 'sw/z80/kernel/include/fs/fs.h')
-rw-r--r--sw/z80/kernel/include/fs/fs.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/sw/z80/kernel/include/fs/fs.h b/sw/z80/kernel/include/fs/fs.h
new file mode 100644
index 0000000..62bef36
--- /dev/null
+++ b/sw/z80/kernel/include/fs/fs.h
@@ -0,0 +1,65 @@
+#ifndef INODE_H
+#define INODE_H
+
+#include "types.h"
+
+#define FS_OFFSET 0x1000
+
+#define FS_BLOCKS_SIZE 512
+#define FS_BLOCKS_N 8
+#define FS_BLOCKS_IND 6
+
+#define INODE_TYPE_FILE 0x0
+#define INODE_TYPE_DIR 0x1
+#define INODE_TYPE_HLINK 0x2
+#define INODE_TYPE_SLINK 0x3
+
+typedef struct time_s
+{
+ struct
+ {
+ uint minutes :6;
+ uint hour :5;
+
+ } time;
+
+ struct
+ {
+ uint day :5;
+ uint month :4;
+ uint year :12;
+
+ } date;
+
+} time_t;
+
+struct fs_superblock
+{
+ uint8_t magic; // identifier
+
+ uint16_t blk_size; // size of a single block
+ uint16_t imap_size; // quantity of inodes
+ uint16_t dmap_size; // quantity of blocks
+}
+
+struct fs_inode
+{
+
+ /* inode meta data */
+ uint mode :3; // chmod
+ uint uid :3; // chown
+ uint type :2; // file, dir, hard-link, sym-link
+
+ /* data storage informations */
+ uint24_t size;
+ uint16_t blocks[FS_BLOCKS_N];
+
+}
+
+struct fs_inumber
+{
+ uint dev : 4; // device id, global in the fs
+ ino_t rel; // inode id relative to the volume
+}
+
+#endif