diff options
Diffstat (limited to 'kernel/src/drivers/ext2.hpp')
| -rw-r--r-- | kernel/src/drivers/ext2.hpp | 74 |
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 { |
