summaryrefslogtreecommitdiff
path: root/include/kernel/fs.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/kernel/fs.h')
-rw-r--r--include/kernel/fs.h46
1 files changed, 45 insertions, 1 deletions
diff --git a/include/kernel/fs.h b/include/kernel/fs.h
index 8f21110..a2b0086 100644
--- a/include/kernel/fs.h
+++ b/include/kernel/fs.h
@@ -4,10 +4,14 @@
#include <stdint.h>
#include <sys/types.h>
-#define BLOCK_SIZE 1024
+#define NRSUPER 8
#define NRFILE 128
#define NROPEN 32
+/* these shouldn't change */
+#define BLOCK_SIZE 1024
+#define SUPER_MAGIC 0x137F
+
struct file {
uint16_t f_mode;
uint16_t f_flags;
@@ -15,4 +19,44 @@ struct file {
off_t f_pos;
};
+struct super_block {
+ uint16_t s_ninodes;
+ uint16_t s_nzones;
+ uint16_t s_imap_blocks;
+ uint16_t s_zmap_blocks;
+ uint16_t s_firstdatazone;
+ uint16_t s_log_zone_size;
+ uint32_t s_max_size;
+ uint16_t s_magic;
+ /* loaded in memory only */
+ struct s_buff *s_imap[8];
+ struct s_buff *s_zmap[8];
+ uint16_t s_dev;
+ uint16_t s_dirt;
+ uint16_t s_start;
+ uint16_t s_super;
+ uint16_t s_imap_off;
+ uint16_t s_zmap_off;
+ uint16_t s_inode_off;
+} __attribute__((packed));
+
+struct m_inode {
+ uint16_t i_mode;
+ uint16_t i_uid;
+ uint32_t i_size;
+ uint32_t i_mtime;
+ uint8_t i_gid;
+ uint8_t i_nlinks;
+ uint16_t i_zone[9];
+} __attribute__((packed));
+
+extern struct super_block sblocks[NRSUPER];
+
+size_t block_read(void*, size_t , size_t);
+size_t block_write(void*, size_t , size_t);
+
+void mount_root(void);
+
+void fs_init(void);
+
#endif