summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/FSKit/Ext2.h
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-09-28 17:01:48 +0200
committerGitHub <noreply@github.com>2025-09-28 17:01:48 +0200
commit2117a9b0f4b84f5bd6c99566bcf5849a64104467 (patch)
tree590b20056c62d04a496aa22f6bee0034a1430e4e /dev/kernel/FSKit/Ext2.h
parent0f88e96c0cf7ffaccecae94794024164c510f735 (diff)
parentb1302067703566624390d780dffd621bb99bb439 (diff)
Merge pull request #64 from nekernel-org/dev
ver: `kernel` v0.0.6
Diffstat (limited to 'dev/kernel/FSKit/Ext2.h')
-rw-r--r--dev/kernel/FSKit/Ext2.h39
1 files changed, 27 insertions, 12 deletions
diff --git a/dev/kernel/FSKit/Ext2.h b/dev/kernel/FSKit/Ext2.h
index 35129dcd..be2e34a6 100644
--- a/dev/kernel/FSKit/Ext2.h
+++ b/dev/kernel/FSKit/Ext2.h
@@ -13,20 +13,20 @@
#include <hint/CompilerHint.h>
/// @file Ext2.h
-/// @brief EXT2 filesystem structures and constants.
+/// @brief EXT2 filesystem structures, constants, and base wrappers.
+/// EXT2 Constants
#define kExt2FSMagic (0xEF53)
#define kExt2FSMaxFileNameLen (255U)
#define kExt2FSSuperblockOffset (1024)
#define kExt2FSRootInodeNumber (2)
-
#define kExt2FSInodeSize (128U)
#define kExt2FSBlockSizeBase (1024U)
#define kExt2FSRev0 (0)
#define kExt2FSRev1 (1)
-/// @brief EXT2's file types.
+/// EXT2 file types
enum {
kExt2FileTypeUnknown = 0,
kExt2FileTypeRegular = 1,
@@ -38,7 +38,17 @@ enum {
kExt2FileTypeSymbolicLink = 7
};
-/// @brief The super block structure, located at LBA 1024.
+typedef struct EXT2_GROUP_DESCRIPTOR final {
+ UInt32 fBlockBitmap;
+ UInt32 fInodeBitmap;
+ UInt32 fInodeTable;
+ UInt16 fFreeBlocksCount;
+ UInt16 fFreeInodesCount;
+ UInt16 fBgUsedDirsCount;
+ UInt16 fBgPad;
+ UInt32 fBgReserved[3];
+} EXT2_GROUP_DESCRIPTOR;
+
struct PACKED EXT2_SUPER_BLOCK final {
Kernel::UInt32 fInodeCount;
Kernel::UInt32 fBlockCount;
@@ -55,7 +65,7 @@ struct PACKED EXT2_SUPER_BLOCK final {
Kernel::UInt32 fWriteTime;
Kernel::UInt16 fMountCount;
Kernel::UInt16 fMaxMountCount;
- Kernel::UInt16 fMagic; // should be 0xEF53
+ Kernel::UInt16 fMagic;
Kernel::UInt16 fState;
Kernel::UInt16 fErrors;
Kernel::UInt16 fMinorRevision;
@@ -78,7 +88,6 @@ struct PACKED EXT2_SUPER_BLOCK final {
Kernel::Char fLastMounted[64];
Kernel::UInt32 fAlgoBitmap;
- // Optional journal fields and padding
Kernel::UInt8 fPreallocBlocks;
Kernel::UInt8 fPreallocDirBlocks;
Kernel::UInt16 fReservedGDTBlocks;
@@ -112,22 +121,28 @@ struct PACKED EXT2_INODE final {
Kernel::UInt32 fFlags;
Kernel::UInt32 fOSD1;
- Kernel::UInt32
- fBlock[15]; // 0-11: direct, 12: indirect, 13: double indirect, 14: triple indirect
+ Kernel::UInt32 fBlock[15]; // direct 0-11, indirect 12, double 13, triple 14
Kernel::UInt32 fGeneration;
Kernel::UInt32 fFileACL;
- Kernel::UInt32 fDirACL; // Only for revision 1+
+ Kernel::UInt32 fDirACL;
Kernel::UInt32 fFragmentAddr;
Kernel::UInt8 fOSD2[12];
};
+/// Directory entry
struct PACKED EXT2_DIR_ENTRY final {
Kernel::UInt32 fInode;
Kernel::UInt16 fRecordLength;
Kernel::UInt8 fNameLength;
Kernel::UInt8 fFileType;
- Kernel::Char
- fName[kExt2FSMaxFileNameLen]; // null-terminated, not fixed-length in actual on-disk layout
-}; \ No newline at end of file
+ Kernel::Char fName[kExt2FSMaxFileNameLen];
+};
+
+/// VFS usage
+struct Ext2Node {
+ Kernel::UInt32 inodeNumber;
+ EXT2_INODE inode;
+ Kernel::UInt32 cursor{0};
+};