summaryrefslogtreecommitdiffstats
path: root/sw/z80/kernel/include/fs
diff options
context:
space:
mode:
authorleleraffa97@hotmail.it <leleraffa97@hotmail.it>2017-08-26 11:11:39 +0200
committerleleraffa97@hotmail.it <leleraffa97@hotmail.it>2017-08-26 11:11:39 +0200
commit1acc542400d15ddf32f44e3f1ddb82f9c9fe4aab (patch)
treefb439e84abdf86a1b6e9f7362ca4c3cdeef2bb8d /sw/z80/kernel/include/fs
parentMerge remote-tracking branch 'origin/naopross' into atlas (diff)
downloadz80uPC-1acc542400d15ddf32f44e3f1ddb82f9c9fe4aab.tar.gz
z80uPC-1acc542400d15ddf32f44e3f1ddb82f9c9fe4aab.zip
File system initialization
Simple I/O (sio) interfaced, not yet implemented
Diffstat (limited to '')
-rw-r--r--sw/z80/kernel/include/fs/dirent.h13
-rw-r--r--sw/z80/kernel/include/fs/fs.h65
-rw-r--r--sw/z80/kernel/include/fs/mount.h15
-rw-r--r--sw/z80/kernel/include/fs/users.h6
4 files changed, 99 insertions, 0 deletions
diff --git a/sw/z80/kernel/include/fs/dirent.h b/sw/z80/kernel/include/fs/dirent.h
new file mode 100644
index 0000000..ea5699b
--- /dev/null
+++ b/sw/z80/kernel/include/fs/dirent.h
@@ -0,0 +1,13 @@
+#ifndef DIRENT_H
+#define DIRENT_H
+
+#include "types.h"
+
+struct dirent
+{
+ ino_t i_number; // inode referred
+ uint8_t name_size; // size of the name
+ char name[]; // name of the referred inode
+}
+
+#endif
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
diff --git a/sw/z80/kernel/include/fs/mount.h b/sw/z80/kernel/include/fs/mount.h
new file mode 100644
index 0000000..a0edd5d
--- /dev/null
+++ b/sw/z80/kernel/include/fs/mount.h
@@ -0,0 +1,15 @@
+#ifndef MOUNT_H
+#define MOUNT_H
+
+#include "fs.h"
+
+#define FS_MOUNT_LIMIT 16
+
+struct fs_mount_point
+{
+ struct fs_inumber inode; // dir mounted
+ uint serial_port :4;
+ struct fs_superblock superblock; // block informations
+}
+
+#endif
diff --git a/sw/z80/kernel/include/fs/users.h b/sw/z80/kernel/include/fs/users.h
new file mode 100644
index 0000000..7e4016b
--- /dev/null
+++ b/sw/z80/kernel/include/fs/users.h
@@ -0,0 +1,6 @@
+#ifndef USERS_H
+#define USERS_H
+
+
+
+#endif