NeKernel dev
Loading...
Searching...
No Matches
openhefs.h
Go to the documentation of this file.
1/* ========================================
2
3 Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license.
4
5======================================== */
6
7#pragma once
8
9#include <cstdint>
10#include <cstring>
11
12#define kOpenHeFSVersion (0x0101)
13#define kOpenHeFSMagic "OpenHeFS"
14#define kOpenHeFSMagicLen (9U)
15
16#define kOpenHeFSFileNameLen (256U)
17#define kOpenHeFSPartNameLen (128U)
18
19#define kOpenHeFSDefaultVolumeName u8"OpenHeFS Volume"
20
21namespace mkfs::hefs {
22
23// Drive kinds
24enum {
25 kOpenHeFSHardDrive = 0xC0, // Hard Drive
26 kOpenHeFSSolidStateDrive = 0xC1, // Solid State Drive
27 kOpenHeFSOpticalDrive = 0x0C, // Blu-Ray/DVD
29 kOpenHeFSScsiDrive = 0xC4, // SCSI Hard Drive
31 kOpenHeFSUnknown = 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 kOpenHeFSFileKindRegular = 0x00;
71inline constexpr uint16_t kOpenHeFSFileKindDirectory = 0x01;
72inline constexpr uint16_t kOpenHeFSFileKindBlock = 0x02;
73inline constexpr uint16_t kOpenHeFSFileKindCharacter = 0x03;
74inline constexpr uint16_t kOpenHeFSFileKindFIFO = 0x04;
75inline constexpr uint16_t kOpenHeFSFileKindSocket = 0x05;
76inline constexpr uint16_t kOpenHeFSFileKindSymbolicLink = 0x06;
77inline constexpr uint16_t kOpenHeFSFileKindUnknown = 0x07;
78inline constexpr uint16_t kOpenHeFSFileKindCount = 0x08;
79
80// Red-black tree colors
81enum {
86};
87
88// Time constants
89inline constexpr ATime kOpenHeFSTimeInvalid = 0x0000000000000000;
90inline constexpr ATime kOpenHeFSTimeMax = 0xFFFFFFFFFFFFFFFF - 1;
91
92// Boot Node
93struct __attribute__((packed)) BootNode {
94 char magic[kOpenHeFSMagicLen]{};
95 char8_t volumeName[kOpenHeFSPartNameLen]{};
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
Definition openhefs.h:21
@ kOpenHeFSEncodingFlagsUTF8LE
Definition openhefs.h:54
@ kOpenHeFSEncodingFlagsCount
Definition openhefs.h:56
@ kOpenHeFSEncodingFlagsBinary
Definition openhefs.h:55
@ kOpenHeFSEncodingFlagsUTF32LE
Definition openhefs.h:52
@ kOpenHeFSFlagsSystem
Definition openhefs.h:60
@ kOpenHeFSFlagsDevice
Definition openhefs.h:62
@ kOpenHeFSFlagsReadOnly
Definition openhefs.h:58
@ kOpenHeFSFlagsNone
Definition openhefs.h:57
@ kOpenHeFSEncodingFlagsUTF16
Definition openhefs.h:47
@ kOpenHeFSFlagsHidden
Definition openhefs.h:59
@ kOpenHeFSEncodingFlagsUTF16BE
Definition openhefs.h:49
@ kOpenHeFSFlagsCount
Definition openhefs.h:63
@ kOpenHeFSFlagsArchive
Definition openhefs.h:61
@ kOpenHeFSEncodingFlagsUTF32BE
Definition openhefs.h:51
@ kOpenHeFSEncodingFlagsUTF8
Definition openhefs.h:46
@ kOpenHeFSEncodingFlagsUTF16LE
Definition openhefs.h:50
@ kOpenHeFSEncodingFlagsUTF32
Definition openhefs.h:48
@ kOpenHeFSEncodingFlagsUTF8BE
Definition openhefs.h:53
struct __attribute__((packed)) BootNode
Definition openhefs.h:93
constexpr uint16_t kOpenHeFSFileKindRegular
Definition openhefs.h:70
constexpr uint16_t kOpenHeFSFileKindBlock
Definition openhefs.h:72
constexpr uint16_t kOpenHeFSFileKindDirectory
Definition openhefs.h:71
constexpr uint16_t kOpenHeFSFileKindUnknown
Definition openhefs.h:77
@ kOpenHeFSRed
Definition openhefs.h:83
@ kOpenHeFSBlack
Definition openhefs.h:84
@ kOpenHeFSColorCount
Definition openhefs.h:85
@ kOpenHeFSInvalidColor
Definition openhefs.h:82
constexpr ATime kOpenHeFSTimeMax
Definition openhefs.h:90
constexpr uint16_t kOpenHeFSFileKindSocket
Definition openhefs.h:75
constexpr uint16_t kOpenHeFSFileKindCharacter
Definition openhefs.h:73
constexpr uint16_t kOpenHeFSFileKindFIFO
Definition openhefs.h:74
@ kOpenHeFSStatusInvalid
Definition openhefs.h:40
@ kOpenHeFSStatusUnlocked
Definition openhefs.h:37
@ kOpenHeFSStatusLocked
Definition openhefs.h:38
@ kOpenHeFSStatusError
Definition openhefs.h:39
@ kOpenHeFSStatusCount
Definition openhefs.h:41
constexpr ATime kOpenHeFSTimeInvalid
Definition openhefs.h:89
constexpr uint16_t kOpenHeFSFileKindCount
Definition openhefs.h:78
constexpr uint16_t kOpenHeFSFileKindSymbolicLink
Definition openhefs.h:76
std::uint64_t ATime
Definition openhefs.h:67
@ kOpenHeFSMassStorageDevice
Definition openhefs.h:28
@ kOpenHeFSScsiDrive
Definition openhefs.h:29
@ kOpenHeFSUnknown
Definition openhefs.h:31
@ kOpenHeFSSolidStateDrive
Definition openhefs.h:26
@ kOpenHeFSHardDrive
Definition openhefs.h:25
@ kOpenHeFSOpticalDrive
Definition openhefs.h:27
@ kOpenHeFSDriveCount
Definition openhefs.h:32
@ kOpenHeFSFlashDrive
Definition openhefs.h:30
#define kOpenHeFSPartNameLen
Definition OpenHeFS.h:26
#define kOpenHeFSMagicLen
Definition OpenHeFS.h:22