summaryrefslogtreecommitdiff
path: root/kernel/src/drivers/ext2.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/drivers/ext2.hpp')
-rw-r--r--kernel/src/drivers/ext2.hpp74
1 files changed, 73 insertions, 1 deletions
diff --git a/kernel/src/drivers/ext2.hpp b/kernel/src/drivers/ext2.hpp
index bfede39..4fdcd3c 100644
--- a/kernel/src/drivers/ext2.hpp
+++ b/kernel/src/drivers/ext2.hpp
@@ -3,6 +3,14 @@
#include <drivers/disk.hpp>
#include <generic/lock/mutex.hpp>
+//#define EXT2_ORANGE_TRACE
+
+#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080
+#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002
+#define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040
+
+#include <stdint.h>
+
struct ext2_superblock {
uint32_t s_inodes_count;
uint32_t s_blocks_count;
@@ -23,7 +31,47 @@ struct ext2_superblock {
uint16_t s_state;
uint16_t s_errors;
uint16_t s_minor_rev_level;
-};
+ uint32_t s_lastcheck;
+ uint32_t s_checkinterval;
+ uint32_t s_creator_os;
+ uint32_t revision;
+ uint16_t s_def_resuid;
+ uint16_t s_def_resgid;
+
+ uint32_t s_first_ino;
+ uint16_t inode_size;
+ uint16_t s_block_group_nr;
+ uint32_t s_feature_compat;
+ uint32_t s_feature_incompat;
+ uint32_t s_feature_ro_compat;
+ uint8_t s_uuid[16];
+ char s_volume_name[16];
+ char s_last_mounted[64];
+ uint32_t s_algo_bitmap;
+
+ uint8_t s_prealloc_blocks;
+ uint8_t s_prealloc_dir_blocks;
+ uint16_t s_reserved_gdt_blocks;
+
+ uint8_t s_journal_uuid[16];
+ uint32_t s_journal_inum;
+ uint32_t s_journal_dev;
+ uint32_t s_last_orphan;
+
+ uint32_t s_hash_seed[4];
+ uint8_t s_def_hash_version;
+ uint8_t s_jnl_backup_type;
+ uint16_t s_desc_size;
+ uint32_t s_default_mount_opts;
+ uint32_t s_first_meta_bg;
+ uint32_t s_mkfs_time;
+ uint32_t s_jnl_blocks[17];
+
+ uint32_t s_blocks_count_hi;
+ uint32_t s_r_blocks_count_hi;
+ uint32_t s_free_blocks_count_hi;
+} __attribute__((packed));
+
struct ext2_group_desc {
uint32_t bg_block_bitmap;
@@ -68,11 +116,35 @@ struct ext2_dir_entry {
struct ext2_partition {
std::uint64_t lba_start;
ext2_superblock* sb;
+ void* cached_group;
locks::mutex lock;
disk* target_disk;
+ char* temp_buffer2;
char* buffer;
};
+struct ext4_extent_header {
+ uint16_t eh_magic;
+ uint16_t eh_entries;
+ uint16_t eh_max;
+ uint16_t eh_depth;
+ uint32_t eh_generation;
+};
+
+struct ext4_extent {
+ uint32_t ee_block;
+ uint16_t ee_len;
+ uint16_t ee_start_hi;
+ uint32_t ee_start_lo;
+};
+
+struct ext4_extent_idx {
+ uint32_t ei_block;
+ uint32_t ei_leaf_lo;
+ uint16_t ei_leaf_hi;
+ uint16_t ei_unused;
+};
+
#define EXT2_MAGIC 0xEF53
namespace drivers {