NeKernel dev
Loading...
Searching...
No Matches
hefs.h
Go to the documentation of this file.
1/* -------------------------------------------
2
3 Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
4
5------------------------------------------- */
6
7#pragma once
8
9#include <cstdint>
10#include <cstring>
11
12#define kHeFSVersion (0x0101)
13#define kHeFSMagic " HeFS"
14#define kHeFSMagicLen (8)
15
16#define kHeFSFileNameLen (256U)
17#define kHeFSPartNameLen (128U)
18
19#define kHeFSDefaultVolumeName u8"HeFS Volume"
20
21namespace mkfs::hefs {
22
23// Drive kinds
24enum {
25 kHeFSHardDrive = 0xC0, // Hard Drive
26 kHeFSSolidStateDrive = 0xC1, // Solid State Drive
27 kHeFSOpticalDrive = 0x0C, // Blu-Ray/DVD
29 kHeFSScsiDrive = 0xC4, // SCSI Hard Drive
31 kHeFSUnknown = 0xFF, // Unknown device.
33};
34
35// Disk status
36enum {
42};
43
44// Encodings
45enum {
64};
65
66// Time type
67using ATime = std::uint64_t;
68
69// File kinds
70inline constexpr uint16_t kHeFSFileKindRegular = 0x00;
71inline constexpr uint16_t kHeFSFileKindDirectory = 0x01;
72inline constexpr uint16_t kHeFSFileKindBlock = 0x02;
73inline constexpr uint16_t kHeFSFileKindCharacter = 0x03;
74inline constexpr uint16_t kHeFSFileKindFIFO = 0x04;
75inline constexpr uint16_t kHeFSFileKindSocket = 0x05;
76inline constexpr uint16_t kHeFSFileKindSymbolicLink = 0x06;
77inline constexpr uint16_t kHeFSFileKindUnknown = 0x07;
78inline constexpr uint16_t kHeFSFileKindCount = 0x08;
79
80// Red-black tree colors
81enum {
83 kHeFSRed = 100,
86};
87
88// Time constants
89inline constexpr ATime kHeFSTimeInvalid = 0x0000000000000000;
90inline constexpr ATime kHeFSTimeMax = 0xFFFFFFFFFFFFFFFF - 1;
91
92// Boot Node
93struct __attribute__((packed)) BootNode {
94 char magic[kHeFSMagicLen]{};
95 char8_t volumeName[kHeFSPartNameLen]{};
96 std::uint32_t version{};
97 std::uint64_t badSectors{};
98 std::uint64_t sectorCount{};
99 std::uint64_t sectorSize{};
100 std::uint32_t checksum{};
101 std::uint8_t diskKind{};
102 std::uint8_t encoding{};
103 std::uint64_t startIND{};
104 std::uint64_t endIND{};
105 std::uint64_t indCount{};
106 std::uint64_t diskSize{};
107 std::uint16_t diskStatus{};
108 std::uint16_t diskFlags{};
109 std::uint16_t vid{};
110 std::uint64_t startIN{};
111 std::uint64_t endIN{};
112 std::uint64_t startBlock{};
113 std::uint64_t endBlock{};
114 char pad[272]{};
115};
116} // namespace mkfs::hefs
#define kHeFSMagicLen
Definition HeFS.h:22
#define kHeFSPartNameLen
Definition HeFS.h:26
Definition hefs.h:21
struct __attribute__((packed)) BootNode
Definition hefs.h:93
constexpr uint16_t kHeFSFileKindFIFO
Definition hefs.h:74
@ kHeFSRed
Definition hefs.h:83
@ kHeFSBlack
Definition hefs.h:84
@ kHeFSInvalidColor
Definition hefs.h:82
@ kHeFSColorCount
Definition hefs.h:85
@ kHeFSStatusLocked
Definition hefs.h:38
@ kHeFSStatusError
Definition hefs.h:39
@ kHeFSStatusUnlocked
Definition hefs.h:37
@ kHeFSStatusCount
Definition hefs.h:41
@ kHeFSStatusInvalid
Definition hefs.h:40
constexpr uint16_t kHeFSFileKindDirectory
Definition hefs.h:71
constexpr ATime kHeFSTimeMax
Definition hefs.h:90
constexpr uint16_t kHeFSFileKindUnknown
Definition hefs.h:77
constexpr uint16_t kHeFSFileKindRegular
Definition hefs.h:70
constexpr ATime kHeFSTimeInvalid
Definition hefs.h:89
@ kHeFSSolidStateDrive
Definition hefs.h:26
@ kHeFSHardDrive
Definition hefs.h:25
@ kHeFSScsiDrive
Definition hefs.h:29
@ kHeFSUnknown
Definition hefs.h:31
@ kHeFSFlashDrive
Definition hefs.h:30
@ kHeFSMassStorageDevice
Definition hefs.h:28
@ kHeFSOpticalDrive
Definition hefs.h:27
@ kHeFSDriveCount
Definition hefs.h:32
constexpr uint16_t kHeFSFileKindSocket
Definition hefs.h:75
constexpr uint16_t kHeFSFileKindCount
Definition hefs.h:78
constexpr uint16_t kHeFSFileKindSymbolicLink
Definition hefs.h:76
constexpr uint16_t kHeFSFileKindCharacter
Definition hefs.h:73
std::uint64_t ATime
Definition hefs.h:67
constexpr uint16_t kHeFSFileKindBlock
Definition hefs.h:72
@ kHeFSEncodingFlagsUTF8LE
Definition hefs.h:54
@ kHeFSEncodingFlagsUTF32BE
Definition hefs.h:51
@ kHeFSEncodingFlagsCount
Definition hefs.h:56
@ kHeFSFlagsSystem
Definition hefs.h:60
@ kHeFSFlagsArchive
Definition hefs.h:61
@ kHeFSEncodingFlagsUTF8BE
Definition hefs.h:53
@ kHeFSEncodingFlagsUTF16BE
Definition hefs.h:49
@ kHeFSFlagsCount
Definition hefs.h:63
@ kHeFSFlagsReadOnly
Definition hefs.h:58
@ kHeFSEncodingFlagsUTF16LE
Definition hefs.h:50
@ kHeFSEncodingFlagsUTF8
Definition hefs.h:46
@ kHeFSEncodingFlagsBinary
Definition hefs.h:55
@ kHeFSFlagsDevice
Definition hefs.h:62
@ kHeFSEncodingFlagsUTF32LE
Definition hefs.h:52
@ kHeFSFlagsNone
Definition hefs.h:57
@ kHeFSEncodingFlagsUTF16
Definition hefs.h:47
@ kHeFSEncodingFlagsUTF32
Definition hefs.h:48
@ kHeFSFlagsHidden
Definition hefs.h:59