summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/src
diff options
context:
space:
mode:
authorAmlal <amlal@nekernel.org>2025-04-26 13:44:35 +0200
committerAmlal <amlal@nekernel.org>2025-04-26 13:44:35 +0200
commit9c33e844d76f9db6d7110de4f05cbe2084cdbca1 (patch)
tree9875059712c6e819ae9a3dbbccda7ba105708326 /dev/kernel/src
parenta02a39e77abf2a71bcd023c33c63d405ef1c3081 (diff)
dev, kernel and user: codebase additions and work in progress 'tactical pause'
why? - HeFS's Formating needs some thought before being layed out, that's the kind of thing that bites hard in the ass. - Alongside those changes I improved parts of the kernel too. Signed-off-by: Amlal <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/src')
-rw-r--r--dev/kernel/src/DriveMgr.cc2
-rw-r--r--dev/kernel/src/FS/HeFS.cc51
-rw-r--r--dev/kernel/src/Gfx/FBDeviceInterface.cc10
-rw-r--r--dev/kernel/src/Storage/AHCIDeviceInterface.cc2
-rw-r--r--dev/kernel/src/Storage/ATADeviceInterface.cc2
-rw-r--r--dev/kernel/src/Storage/NVMEDeviceInterface.cc2
6 files changed, 51 insertions, 18 deletions
diff --git a/dev/kernel/src/DriveMgr.cc b/dev/kernel/src/DriveMgr.cc
index 17c6c8cc..46a5c588 100644
--- a/dev/kernel/src/DriveMgr.cc
+++ b/dev/kernel/src/DriveMgr.cc
@@ -25,7 +25,7 @@ STATIC UInt8 kATAMaster = 0U;
#endif
#if defined(__AHCI__)
-STATIC UInt16 kAHCIPortsImplemented = 0UL;
+STATIC UInt16 kAHCIPortsImplemented [[maybe_unused]] = 0UL;
#endif
/// @brief reads from an ATA drive.
diff --git a/dev/kernel/src/FS/HeFS.cc b/dev/kernel/src/FS/HeFS.cc
index 1da886c4..81316ba5 100644
--- a/dev/kernel/src/FS/HeFS.cc
+++ b/dev/kernel/src/FS/HeFS.cc
@@ -756,7 +756,7 @@ namespace Kernel::HeFS {
/// @param drive The drive to write on.
/// @return If it was sucessful, see err_local_get().
_Output Bool HeFileSystemParser::Format(_Input _Output DriveTrait* drive, _Input const Int32 flags,
- const Utf16Char* part_name) {
+ _Input const Utf16Char* part_name) {
NE_UNUSED(drive);
NE_UNUSED(flags);
NE_UNUSED(part_name);
@@ -779,6 +779,34 @@ _Output Bool HeFileSystemParser::Format(_Input _Output DriveTrait* drive, _Input
rt_set_memory(root, 0, sizeof(HEFS_BOOT_NODE));
+ drive->fPacket.fPacketLba = drive->fLbaStart;
+ drive->fPacket.fPacketSize = sizeof(HEFS_BOOT_NODE);
+ drive->fPacket.fPacketContent = root;
+
+ drive->fInput(drive->fPacket);
+
+ if (!drive->fPacket.fPacketGood) {
+ delete root;
+ root = nullptr;
+
+ err_global_get() = kErrorDiskIsCorrupted;
+
+ return NO;
+ }
+
+ // Check if the disk is already formatted.
+
+ if (KStringBuilder::Equals(root->fMagic, kHeFSMagic)) {
+ delete root;
+ root = nullptr;
+
+ err_global_get() = kErrorSuccess;
+
+ return YES;
+ }
+
+ rt_set_memory(root, 0, sizeof(HEFS_BOOT_NODE));
+
rt_copy_memory((VoidPtr) "fs/hefs-packet", drive->fPacket.fPacketMime,
rt_string_len("fs/hefs-packet"));
@@ -836,9 +864,10 @@ _Output Bool HeFileSystemParser::Format(_Input _Output DriveTrait* drive, _Input
rt_set_memory(root_dir, 0, sizeof(HEFS_INDEX_NODE_DIRECTORY));
wrt_copy_memory((VoidPtr) u"/", root_dir->fName, wrt_string_len(u"/"));
+ wrt_copy_memory((VoidPtr) kHeFSDIMBootDir, root_dir->fDim, wrt_string_len(kHeFSDIMBootDir));
root_dir->fKind = kHeFSFileKindDirectory;
- root_dir->fColor = kHeFSBlack;
+ root_dir->fColor = kHeFSBlack; // Every RB-Tree root starts black. (a condition of the algorithm)
root_dir->fParent = 0; // No parent (it's the real root)
root_dir->fChild = 0; // No children yet
root_dir->fNext = 0; // No next
@@ -858,6 +887,19 @@ _Output Bool HeFileSystemParser::Format(_Input _Output DriveTrait* drive, _Input
root = nullptr;
root_dir = nullptr;
+ // Create the directories, something UNIX inspired but more explicit and forward looking.
+
+ this->CreateDirectory(drive, kHeFSEncodingUTF16, u"/boot");
+ this->CreateDirectory(drive, kHeFSEncodingUTF16, u"/netdevices");
+ this->CreateDirectory(drive, kHeFSEncodingUTF16, u"/binaries");
+ this->CreateDirectory(drive, kHeFSEncodingUTF16, u"/users");
+ this->CreateDirectory(drive, kHeFSEncodingUTF16, u"/config");
+ this->CreateDirectory(drive, kHeFSEncodingUTF16, u"/config/xml");
+ this->CreateDirectory(drive, kHeFSEncodingUTF16, u"/config/json");
+ this->CreateDirectory(drive, kHeFSEncodingUTF16, u"/devices");
+ this->CreateDirectory(drive, kHeFSEncodingUTF16, u"/media");
+ this->CreateFile(drive, kHeFSEncodingBinary, u"/", u"mk.hefs");
+
if (drive->fPacket.fPacketGood) return YES;
err_global_get() = kErrorDiskIsCorrupted;
@@ -1036,7 +1078,7 @@ _Output Bool HeFileSystemParser::CreateFile(_Input DriveTrait* drive, _Input con
}
Boolean fs_init_hefs(Void) noexcept {
- kout << "Creating main disk...\r";
+ kout << "Creating main disk with HeFS in it...\r";
auto drv = io_construct_main_drive();
@@ -1047,9 +1089,6 @@ Boolean fs_init_hefs(Void) noexcept {
parser.Format(&drv, kHeFSEncodingUTF16, kHeFSDefaultVoluneName);
- parser.CreateDirectory(&drv, kHeFSEncodingUTF16, u"boot");
- parser.CreateFile(&drv, kHeFSEncodingUTF16, u"boot", u".hefs");
-
return YES;
}
} // namespace Kernel::HeFS
diff --git a/dev/kernel/src/Gfx/FBDeviceInterface.cc b/dev/kernel/src/Gfx/FBDeviceInterface.cc
index 185b22b0..be52655d 100644
--- a/dev/kernel/src/Gfx/FBDeviceInterface.cc
+++ b/dev/kernel/src/Gfx/FBDeviceInterface.cc
@@ -27,9 +27,6 @@ FBDeviceInterface& FBDeviceInterface::operator<<(FBDevicePacket* pckt) {
if (pckt->fHeight == 0 || pckt->fWidth == 0) return *this;
- if (pckt->fX > kHandoverHeader->f_GOP.f_Width || pckt->fY > kHandoverHeader->f_GOP.f_Height)
- return *this;
-
this->fOut(this, pckt);
return *this;
@@ -40,10 +37,7 @@ FBDeviceInterface& FBDeviceInterface::operator<<(FBDevicePacket* pckt) {
/// @return the class itself after operation.
FBDeviceInterface& FBDeviceInterface::operator>>(FBDevicePacket* pckt) {
if (!pckt) return *this;
-
- if (pckt->fX > kHandoverHeader->f_GOP.f_Width || pckt->fY > kHandoverHeader->f_GOP.f_Height)
- return *this;
-
+
this->fIn(this, pckt);
return *this;
@@ -52,5 +46,5 @@ FBDeviceInterface& FBDeviceInterface::operator>>(FBDevicePacket* pckt) {
/// @brief Returns the name of the device interface.
/// @return it's name as a string.
const Char* FBDeviceInterface::Name() const {
- return "/dev/fb{}";
+ return "/devices/fb{}";
} \ No newline at end of file
diff --git a/dev/kernel/src/Storage/AHCIDeviceInterface.cc b/dev/kernel/src/Storage/AHCIDeviceInterface.cc
index d5c1e5c6..2d97eee7 100644
--- a/dev/kernel/src/Storage/AHCIDeviceInterface.cc
+++ b/dev/kernel/src/Storage/AHCIDeviceInterface.cc
@@ -24,7 +24,7 @@ AHCIDeviceInterface::~AHCIDeviceInterface() = default;
/// @brief Returns the name of the device interface.
/// @return it's name as a string.
const Char* AHCIDeviceInterface::Name() const {
- return "/dev/sda{}";
+ return "/devices/sda{}";
}
/// @brief Output operator.
diff --git a/dev/kernel/src/Storage/ATADeviceInterface.cc b/dev/kernel/src/Storage/ATADeviceInterface.cc
index f38d5359..a66d812b 100644
--- a/dev/kernel/src/Storage/ATADeviceInterface.cc
+++ b/dev/kernel/src/Storage/ATADeviceInterface.cc
@@ -22,7 +22,7 @@ ATADeviceInterface::~ATADeviceInterface() = default;
/// @brief Returns the name of the device interface.
/// @return it's name as a string.
const Char* ATADeviceInterface::Name() const {
- return "/dev/hda{}";
+ return "/devices/hda{}";
}
/// @brief Output operator.
diff --git a/dev/kernel/src/Storage/NVMEDeviceInterface.cc b/dev/kernel/src/Storage/NVMEDeviceInterface.cc
index edec6d6d..cff776c9 100644
--- a/dev/kernel/src/Storage/NVMEDeviceInterface.cc
+++ b/dev/kernel/src/Storage/NVMEDeviceInterface.cc
@@ -18,6 +18,6 @@ NVMEDeviceInterface::~NVMEDeviceInterface() {
}
const Char* NVMEDeviceInterface::Name() const {
- return ("/dev/nvme{}");
+ return ("/devices/nvme{}");
}
} // namespace Kernel