summaryrefslogtreecommitdiffhomepage
path: root/src/loader/inc/fs/ext2.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/loader/inc/fs/ext2.h')
-rw-r--r--src/loader/inc/fs/ext2.h98
1 files changed, 98 insertions, 0 deletions
diff --git a/src/loader/inc/fs/ext2.h b/src/loader/inc/fs/ext2.h
new file mode 100644
index 0000000..10650cd
--- /dev/null
+++ b/src/loader/inc/fs/ext2.h
@@ -0,0 +1,98 @@
+// MIT License, Copyright (c) 2021 Marvin Borner
+
+#ifndef EXT2_H
+#define EXT2_H
+
+#include <def.h>
+#include <dev.h>
+
+#define EXT2_BOOT 0
+#define EXT2_SUPER 1
+#define EXT2_ROOT 2
+#define EXT2_MAGIC 0xef53
+
+#define EXT2_INODE_SIZE (sizeof(struct ext2_inode))
+
+struct ext2_superblock {
+ u32 total_inodes;
+ u32 total_blocks;
+ u32 su_res_blocks; // Superuser reserved
+ u32 free_blocks;
+ u32 free_inodes;
+ u32 superblock_block_num;
+ u32 log2_block_size;
+ u32 log2_frag_size;
+ u32 blocks_per_group;
+ u32 frags_per_group;
+ u32 inodes_per_group;
+ u32 last_mount_time;
+ u32 last_write_time;
+ u16 mounts_since_fsck;
+ u16 max_mounts_since_fsck;
+ u16 magic;
+ u16 state; // 1 clean; 2 errors
+ u16 error_action;
+ u16 minor_version;
+ u32 last_fsck_time;
+ u32 max_time_since_fsck;
+ u32 creator_os_id;
+ u32 major_version;
+ u16 res_block_uid;
+ u16 res_block_gid;
+};
+
+struct ext2_bgd {
+ u32 block_bitmap;
+ u32 inode_bitmap;
+ u32 inode_table;
+ u16 free_blocks;
+ u16 free_inodes;
+ u16 used_dirs;
+ u16 pad;
+ u8 bg_reserved[12];
+};
+
+struct ext2_inode {
+ u16 mode;
+ u16 uid;
+ u32 size;
+
+ u32 last_access_time;
+ u32 creation_time;
+ u32 last_modification_time;
+ u32 deletion_time;
+
+ u16 gid;
+ u16 link_count;
+ u32 blocks;
+ u32 flags;
+ u32 os_specific_val1;
+ u32 block[15];
+ u32 generation;
+
+ u32 reserved1;
+ u32 reserved2;
+
+ u32 fragment_addr;
+ u8 os_specific_val2[12];
+};
+
+struct ext2_dirent {
+ u32 inode_num;
+ u16 total_len;
+ u8 name_len;
+ u8 type_indicator;
+ u8 name[];
+};
+
+struct ext2_file {
+ struct ext2_inode inode;
+ u32 pos;
+ u8 block_index;
+ u8 *buf;
+ u32 curr_block_pos;
+};
+
+u8 ext2_detect(struct dev *dev);
+
+#endif