diff options
| author | Amlal <amlal@nekernel.org> | 2025-04-28 09:06:35 +0200 |
|---|---|---|
| committer | Amlal <amlal@nekernel.org> | 2025-04-28 09:06:35 +0200 |
| commit | 2ead335ccc7afd8e1b2a6533e966c10f49fbdfe9 (patch) | |
| tree | ca447cda4307a2e51990d901be29a72829b2ea4c /tooling/hefs.h | |
| parent | 8a7396493c3effb356d2dc4484b993b4698bc422 (diff) | |
dev, kernel: HeFS, Tooling: reworked the mkfs.hefs tool for the new filesystem.
other/related:
- Add new KPC codes.
- Final refactors for HeFS's Format method.
- Dma pool improvements.
- Better standard disk I/O names.
- Add mm_memory_fence function inside HalPagingMgrAMD64.cc
Signed-off-by: Amlal <amlal@nekernel.org>
Diffstat (limited to 'tooling/hefs.h')
| -rw-r--r-- | tooling/hefs.h | 67 |
1 files changed, 29 insertions, 38 deletions
diff --git a/tooling/hefs.h b/tooling/hefs.h index d0ad823b..2a04a1c3 100644 --- a/tooling/hefs.h +++ b/tooling/hefs.h @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright (C) 2025, Amlal El Mahrouss, all rights reserved. + Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. ------------------------------------------- */ @@ -16,17 +16,11 @@ #define kHeFSFileNameLen (256U) #define kHeFSPartNameLen (128U) -#define kHeFSMinimumDiskSize (gib_cast(4)) - -#define kHeFSDefaultVoluneName u"HeFS Volume" - -#define kHeFSDIMBootDir u"boot-x/dir" -#define kHeFSMIMEBootFile u"boot-x/file" - -#define kHeFSDIMSystemDir u"system-x/dir" -#define kHeFSMIMESystemFile u"system-x/file" +#define kHeFSDefaultVoluneName u8"HeFS Volume" namespace mkfs::hefs { + +// Drive kinds enum { kHeFSHardDrive = 0xC0, // Hard Drive kHeFSSolidStateDrive = 0xC1, // Solid State Drive @@ -38,6 +32,7 @@ enum { kHeFSDriveCount = 7, }; +// Disk status enum { kHeFSStatusUnlocked = 0x18, kHeFSStatusLocked, @@ -46,6 +41,7 @@ enum { kHeFSStatusCount, }; +// Encodings enum { kHeFSEncodingUTF8 = 0x00, kHeFSEncodingUTF16, @@ -60,18 +56,13 @@ enum { kHeFSEncodingCount, }; -// Constants +// Block constants constexpr std::size_t kHeFSBlockCount = 16; -// Types +// Time type using ATime = std::uint64_t; -enum { - kHeFSRed = 100, - kHeFSBlack, - kHeFSColorCount, -}; - +// File kinds inline constexpr uint16_t kHeFSFileKindRegular = 0x00; inline constexpr uint16_t kHeFSFileKindDirectory = 0x01; inline constexpr uint16_t kHeFSFileKindBlock = 0x02; @@ -82,14 +73,22 @@ inline constexpr uint16_t kHeFSFileKindSymbolicLink = 0x06; inline constexpr uint16_t kHeFSFileKindUnknown = 0x07; inline constexpr uint16_t kHeFSFileKindCount = 0x08; -// Basic Time Constants +// Red-black tree colors +enum { + kHeFSInvalidColor = 0, + kHeFSRed = 100, + kHeFSBlack, + kHeFSColorCount, +}; + +// Time constants inline constexpr ATime kHeFSTimeInvalid = 0x0000000000000000; inline constexpr ATime kHeFSTimeMax = 0xFFFFFFFFFFFFFFFF - 1; -// Boot Node (Superblock Equivalent) +// Boot Node struct alignas(8) BootNode { char magic[kHeFSMagicLen]{}; - char16_t volumeName[kHeFSPartNameLen]{}; + char8_t volumeName[kHeFSPartNameLen]{}; std::uint32_t version{}; std::uint64_t badSectors{}; std::uint64_t sectorCount{}; @@ -108,19 +107,16 @@ struct alignas(8) BootNode { std::uint64_t reserved2{}; std::uint64_t reserved3{}; std::uint64_t reserved4{}; + char pad[272]{}; }; -// File Node (Index Node) +// Index Node struct alignas(8) IndexNode { - char16_t name[kHeFSFileNameLen]{}; + char8_t name[kHeFSFileNameLen]{}; std::uint32_t flags{}; std::uint16_t kind{}; std::uint32_t size{}; std::uint32_t checksum{}; - std::uint32_t recoverChecksum{}; - std::uint32_t blockChecksum{}; - std::uint32_t linkChecksum{}; - char16_t mime[kHeFSFileNameLen]{}; bool symbolicLink{false}; ATime created{}; ATime accessed{}; @@ -129,23 +125,18 @@ struct alignas(8) IndexNode { std::uint32_t uid{}; std::uint32_t gid{}; std::uint32_t mode{}; - std::uint64_t blockLinkStart[kHeFSBlockCount]{}; - std::uint64_t blockLinkEnd[kHeFSBlockCount]{}; - std::uint64_t blockStart[kHeFSBlockCount]{}; - std::uint64_t blockEnd[kHeFSBlockCount]{}; - std::uint64_t blockRecoveryStart[kHeFSBlockCount]{}; - std::uint64_t blockRecoveryEnd[kHeFSBlockCount]{}; + std::uint64_t block[kHeFSBlockCount]{}; + char pad[62]{}; }; -// Directory Node (Red-Black Tree Node) +// Index Node Directory (Red-Black Tree Node) struct alignas(8) IndexNodeDirectory { - char16_t name[kHeFSFileNameLen]{}; + char8_t name[kHeFSFileNameLen]{}; std::uint32_t flags{}; std::uint16_t kind{}; std::uint32_t entryCount{}; std::uint32_t checksum{}; std::uint32_t indexNodeChecksum{}; - char16_t dim[kHeFSFileNameLen]{}; ATime created{}; ATime accessed{}; ATime modified{}; @@ -153,13 +144,13 @@ struct alignas(8) IndexNodeDirectory { std::uint32_t uid{}; std::uint32_t gid{}; std::uint32_t mode{}; - std::uint64_t indexNodeStart[kHeFSBlockCount]{}; - std::uint64_t indexNodeEnd[kHeFSBlockCount]{}; + std::uint64_t indexNode[kHeFSBlockCount]{}; std::uint8_t color{}; std::uint64_t next{}; std::uint64_t prev{}; std::uint64_t child{}; std::uint64_t parent{}; + char pad[32]{}; }; } // namespace mkfs::hefs |
