summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/src
diff options
context:
space:
mode:
Diffstat (limited to 'dev/kernel/src')
-rw-r--r--dev/kernel/src/BinaryMutex.cc2
-rw-r--r--dev/kernel/src/DriveMgr+IO.cc22
-rw-r--r--dev/kernel/src/FS/HeFS+FileSystemParser.cc23
-rw-r--r--dev/kernel/src/KernelTaskScheduler.cc (renamed from dev/kernel/src/KernelProcessScheduler.cc)10
4 files changed, 33 insertions, 24 deletions
diff --git a/dev/kernel/src/BinaryMutex.cc b/dev/kernel/src/BinaryMutex.cc
index 8bf1432e..bbf7a477 100644
--- a/dev/kernel/src/BinaryMutex.cc
+++ b/dev/kernel/src/BinaryMutex.cc
@@ -12,7 +12,7 @@ namespace Kernel {
/// @brief Unlocks the binary mutex.
/***********************************************************************************/
Bool BinaryMutex::Unlock() noexcept {
- if (fLockingProcess) {
+ if (fLockingProcess.Status == ProcessStatusKind::kRunning) {
fLockingProcess = USER_PROCESS();
fLockingProcess.Status = ProcessStatusKind::kFrozen;
diff --git a/dev/kernel/src/DriveMgr+IO.cc b/dev/kernel/src/DriveMgr+IO.cc
index 4c9b20e0..9137c91e 100644
--- a/dev/kernel/src/DriveMgr+IO.cc
+++ b/dev/kernel/src/DriveMgr+IO.cc
@@ -17,10 +17,10 @@
*
*************************************************************/
-/// Useful macros.
+/// Useful macros regarding the IFS.
-#define rtl_nefs_write(DRV, TRAITS, MP) (MP->DRV()).fOutput(TRAITS)
-#define rtl_nefs_read(DRV, TRAITS, MP) (MP->DRV()).fInput(TRAITS)
+#define fsi_ifs_write(DRV, TRAITS, MP) (MP->DRV()).fOutput(TRAITS)
+#define fsi_ifs_read(DRV, TRAITS, MP) (MP->DRV()).fInput(TRAITS)
namespace Kernel {
/// @brief Read from newfs disk.
@@ -35,19 +35,19 @@ Int32 fs_ifs_read(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvIndex
switch (DrvIndex) {
case MountpointInterface::kDriveIndexA: {
- rtl_nefs_read(A, DrvTrait.fPacket, Mnt);
+ fsi_ifs_read(A, DrvTrait.fPacket, Mnt);
break;
}
case MountpointInterface::kDriveIndexB: {
- rtl_nefs_read(B, DrvTrait.fPacket, Mnt);
+ fsi_ifs_read(B, DrvTrait.fPacket, Mnt);
break;
}
case MountpointInterface::kDriveIndexC: {
- rtl_nefs_read(C, DrvTrait.fPacket, Mnt);
+ fsi_ifs_read(C, DrvTrait.fPacket, Mnt);
break;
}
case MountpointInterface::kDriveIndexD: {
- rtl_nefs_read(D, DrvTrait.fPacket, Mnt);
+ fsi_ifs_read(D, DrvTrait.fPacket, Mnt);
break;
}
}
@@ -67,19 +67,19 @@ Int32 fs_ifs_write(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvInde
switch (DrvIndex) {
case MountpointInterface::kDriveIndexA: {
- rtl_nefs_write(A, DrvTrait.fPacket, Mnt);
+ fsi_ifs_write(A, DrvTrait.fPacket, Mnt);
break;
}
case MountpointInterface::kDriveIndexB: {
- rtl_nefs_write(B, DrvTrait.fPacket, Mnt);
+ fsi_ifs_write(B, DrvTrait.fPacket, Mnt);
break;
}
case MountpointInterface::kDriveIndexC: {
- rtl_nefs_write(C, DrvTrait.fPacket, Mnt);
+ fsi_ifs_write(C, DrvTrait.fPacket, Mnt);
break;
}
case MountpointInterface::kDriveIndexD: {
- rtl_nefs_write(D, DrvTrait.fPacket, Mnt);
+ fsi_ifs_write(D, DrvTrait.fPacket, Mnt);
break;
}
}
diff --git a/dev/kernel/src/FS/HeFS+FileSystemParser.cc b/dev/kernel/src/FS/HeFS+FileSystemParser.cc
index a324da2a..d66c4a53 100644
--- a/dev/kernel/src/FS/HeFS+FileSystemParser.cc
+++ b/dev/kernel/src/FS/HeFS+FileSystemParser.cc
@@ -422,6 +422,8 @@ namespace Detail {
else
--root->fINDCount;
+ root->fChecksum = ke_calculate_crc32((Char*) root, sizeof(HEFS_BOOT_NODE));
+
mnt->fPacket.fPacketLba = mnt->fLbaStart;
mnt->fPacket.fPacketSize = sizeof(HEFS_BOOT_NODE);
mnt->fPacket.fPacketContent = root;
@@ -584,9 +586,9 @@ namespace Detail {
SizeT cnt = 0ULL;
while (cnt < kHeFSSliceCount) {
- HEFS_INODE_SLICE& slice = node->fSlices[cnt];
- slice.fBase = offset;
- slice.fLength = kHeFSBlockLen;
+ HEFS_SLICE_NODE& slice = node->fSlices[cnt];
+ slice.fBase = offset;
+ slice.fLength = kHeFSBlockLen;
offset += kHeFSBlockLen;
++cnt;
@@ -601,10 +603,14 @@ namespace Detail {
root->fStartIN += sizeof(HEFS_INDEX_NODE);
root->fStartBlock += (kHeFSSliceCount * kHeFSBlockLen);
+ root->fChecksum = ke_calculate_crc32((Char*) root, sizeof(HEFS_BOOT_NODE));
+
mnt->fPacket.fPacketLba = mnt->fLbaStart;
mnt->fPacket.fPacketSize = sizeof(HEFS_BOOT_NODE);
mnt->fPacket.fPacketContent = root;
+ mnt->fOutput(mnt->fPacket);
+
mm_delete_heap(dir);
return YES;
@@ -626,6 +632,8 @@ namespace Detail {
root->fStartIN -= sizeof(HEFS_INDEX_NODE);
root->fStartBlock -= (kHeFSSliceCount * kHeFSBlockLen);
+ root->fChecksum = ke_calculate_crc32((Char*) root, sizeof(HEFS_BOOT_NODE));
+
mnt->fPacket.fPacketLba = mnt->fLbaStart;
mnt->fPacket.fPacketSize = sizeof(HEFS_BOOT_NODE);
mnt->fPacket.fPacketContent = root;
@@ -1004,11 +1012,9 @@ _Output Bool HeFileSystemParser::INodeManip(_Input DriveTrait* mnt, VoidPtr bloc
if (!KStringBuilder::Equals(root->fMagic, kHeFSMagic) || root->fVersion != kHeFSVersion) {
err_global_get() = kErrorDisk;
- return YES;
+ return NO;
}
- if (root->fStartBlock > root->fEndBlock) return NO;
-
SizeT cnt = block_sz / sizeof(HEFS_INDEX_NODE);
auto nodes = Detail::hefsi_fetch_in(root, mnt, dir, name, kind, &cnt);
@@ -1021,7 +1027,7 @@ _Output Bool HeFileSystemParser::INodeManip(_Input DriveTrait* mnt, VoidPtr bloc
SizeT cnt_slice = 0;
while (cnt_slice < kHeFSSliceCount) {
- struct HEFS_INODE_SLICE& slice = start.fSlices[cnt_slice];
+ HEFS_SLICE_NODE& slice = start.fSlices[cnt_slice];
mnt->fPacket.fPacketLba = slice.fBase + start.fOffsetSlices;
mnt->fPacket.fPacketSize = kHeFSBlockLen;
@@ -1175,6 +1181,9 @@ Boolean fs_init_hefs(Void) {
Utf8Char contents_1[kHeFSBlockLen] = u8"ロケットにはジエットエンジン\r";
MUST_PASS(parser.INodeManip(&kMountPoint, contents_1, kHeFSBlockLen, u8"/boot",
+ kHeFSFileKindRegular, u8"ジェット警察.txt", NO));
+
+ MUST_PASS(parser.INodeManip(&kMountPoint, contents_1, kHeFSBlockLen, u8"/boot",
kHeFSFileKindRegular, u8"ジェット警察.txt", YES));
return YES;
diff --git a/dev/kernel/src/KernelProcessScheduler.cc b/dev/kernel/src/KernelTaskScheduler.cc
index d0abfce0..1997c175 100644
--- a/dev/kernel/src/KernelProcessScheduler.cc
+++ b/dev/kernel/src/KernelTaskScheduler.cc
@@ -2,16 +2,16 @@
Copyright (C) 2025, Amlal El Mahrouss, all rights reserved.
- FILE: KernelProcessScheduler.cc
- PURPOSE: Privileged/Ring-0 process scheduler.
+ FILE: KernelTaskScheduler.cc
+ PURPOSE: Kernel Task scheduler.
------------------------------------------- */
-#include <KernelKit/ProcessScheduler.h>
+#include <KernelKit/KernelTaskScheduler.h>
/***********************************************************************************/
-/// @file KernelProcessScheduler.cc
-/// @brief Privileged/Ring-0 process scheduler.
+/// @file KernelTaskScheduler.cc
+/// @brief Kernel Task scheduler.
/// @author Amlal El Mahrouss (amlal@nekernel.org)
/***********************************************************************************/