summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <zka-holder@mahrouss-logic.com>2024-10-20 07:07:08 +0000
committerAmlal El Mahrouss <zka-holder@mahrouss-logic.com>2024-10-20 07:07:08 +0000
commit704879ab7f080ce60bcffda02e3dda6330a4f1fd (patch)
tree3970ff78405684f08f01e9e68ebb77a038c28e57
parent9d092dd8a9bff165d6159e9fbedb2e361ff54987 (diff)
NeFS: Officialize minimum disk size into the specs.
HPFS: Start implementing it. UPS: Check PTime, and decrementing it when it isn't our time yet, also added new Subsystem entries. FSKit: Better documentation and provide 256U instead of only 256. EBS: Fixed HPFS magic number, which wasn't correctly bound to 8 bytes. BUILD: Fixed blob.json for epm.asm
-rw-r--r--dev/hpfs/ReadMe.md2
-rw-r--r--dev/hpfs/epm/blob.json4
-rw-r--r--dev/hpfs/epm/ebs.i2
-rw-r--r--dev/hpfs/hpfs_specs.hxx19
-rw-r--r--dev/hpfs/src/hpfs_main.cxx11
-rw-r--r--dev/udf/.keep0
-rw-r--r--dev/zba/BootKit/BootKit.hxx4
-rw-r--r--dev/zka/FSKit/HPFS.hxx10
-rw-r--r--dev/zka/FSKit/NeFS.hxx2
-rw-r--r--dev/zka/HALKit/ARM64/HalKernelMain.cxx9
-rw-r--r--dev/zka/KernelKit/UserProcessScheduler.hxx16
-rw-r--r--dev/zka/src/IndexableProperty.cxx12
-rw-r--r--dev/zka/src/UserProcessScheduler.cxx12
13 files changed, 74 insertions, 29 deletions
diff --git a/dev/hpfs/ReadMe.md b/dev/hpfs/ReadMe.md
index 21fcc961..53778988 100644
--- a/dev/hpfs/ReadMe.md
+++ b/dev/hpfs/ReadMe.md
@@ -1,4 +1,4 @@
-# High Performance File System
+# High Performance File System.
Filesystem driver for the HPFS specification.
diff --git a/dev/hpfs/epm/blob.json b/dev/hpfs/epm/blob.json
index 4ce4fc1c..4b1905b5 100644
--- a/dev/hpfs/epm/blob.json
+++ b/dev/hpfs/epm/blob.json
@@ -1,6 +1,6 @@
{
"compiler_path": "nasm",
- "sources_path": ["EPM.asm"],
- "output_name": "hpfs.bin",
+ "sources_path": ["epm.asm"],
+ "output_name": "bl.bin",
"compiler_flags": ["-f bin"]
}
diff --git a/dev/hpfs/epm/ebs.i b/dev/hpfs/epm/ebs.i
index c137b6f4..c486f463 100644
--- a/dev/hpfs/epm/ebs.i
+++ b/dev/hpfs/epm/ebs.i
@@ -7,7 +7,7 @@
;; DUMP THIS BLOB TO DISK, WHEN FORMATTING THE SSD.
HPFS_EBS_HEADER:
- db " HPFS" ;; MAGIC NUMBER OF FILESYSTEM
+ db " HPFS", 0 ;; MAGIC NUMBER OF FILESYSTEM
dw 8 ;; MAGIC NUMBER LENGTH.
dq 0 ;; RESERVED 4
dw 0x0100 ;; VERSION
diff --git a/dev/hpfs/hpfs_specs.hxx b/dev/hpfs/hpfs_specs.hxx
index f04ce63f..851623a4 100644
--- a/dev/hpfs/hpfs_specs.hxx
+++ b/dev/hpfs/hpfs_specs.hxx
@@ -9,4 +9,21 @@
#pragma once
-#define cHPFSVersion 0x0100
+#include <ddk/ddk.h>
+
+#define kHPFSVersion 0x01000
+#define kHPFSMagic " HPFS"
+#define kHPFSMagicLen 8
+
+/** @brief Drive type enum. */
+enum
+{
+ kHPFSInvalidDrive,
+ kHPFSCDROMDrive,
+ kHPFSHDDDrive,
+ kHPFSSSDDrive,
+ kHPFSUSBDrive,
+};
+
+/** @brief Explicit Boot Sector structure. */
+struct HPFS_EXPLICIT_BOOT_SECTOR;
diff --git a/dev/hpfs/src/hpfs_main.cxx b/dev/hpfs/src/hpfs_main.cxx
index 1ab6c653..ce712f2c 100644
--- a/dev/hpfs/src/hpfs_main.cxx
+++ b/dev/hpfs/src/hpfs_main.cxx
@@ -8,15 +8,20 @@
------------------------------------------- */
#include <hpfs/hpfs_specs.hxx>
-#include <ddk/ddk.h>
static DDK_OBJECT_MANIFEST* kIfsObject = nullptr;
/** @brief HPFS IFS main module function. */
-int32_t ModuleMain(void)
+DK_EXTERN int32_t ModuleMain(void)
{
auto ifs_handle = KernelGetObject(0, "IFS_OBJECT");
- // TODO: Register this IFS with necessary I/O functions...
+
+ if (ifs_handle == nil)
+ {
+ return 1;
+ }
+
+ /// TODO: Register this IFS with necessary I/O functions...
kIfsObject = ifs_handle;
diff --git a/dev/udf/.keep b/dev/udf/.keep
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/dev/udf/.keep
diff --git a/dev/zba/BootKit/BootKit.hxx b/dev/zba/BootKit/BootKit.hxx
index a29316e2..5c2805fc 100644
--- a/dev/zba/BootKit/BootKit.hxx
+++ b/dev/zba/BootKit/BootKit.hxx
@@ -315,11 +315,11 @@ namespace Boot
/// @note A catalog roughly equal to a sector.
- constexpr auto cMinimumDiskSize = 4; // at minimum.
+ constexpr auto cMinimumDiskSize = kNeFSMinimumDiskSize; // at minimum.
/// @note also look at EPM headers, for free part blocks.
- if (GIB(fDiskDev.GetDiskSize()) < cMinimumDiskSize)
+ if (fDiskDev.GetDiskSize() < cMinimumDiskSize)
{
EFI::ThrowError(L"Drive-Too-Tiny", L"Can't format a New Filesystem partition here.");
return false;
diff --git a/dev/zka/FSKit/HPFS.hxx b/dev/zka/FSKit/HPFS.hxx
index b8aebd71..6ff49f1f 100644
--- a/dev/zka/FSKit/HPFS.hxx
+++ b/dev/zka/FSKit/HPFS.hxx
@@ -9,4 +9,12 @@
#include <NewKit/Defines.hxx>
/// @file HPFS.hxx
-/// @brief HPFS support.
+/// @brief HPFS filesystem support.
+
+#define kHPFSVersion 0x01000
+#define kHPFSMagic " HPFS"
+#define kHPFSMagicLen 8
+
+#define kHPFSMinimumDiskSize (gib_cast(64))
+
+struct HPFS_EXPLICIT_BOOT_SECTOR;
diff --git a/dev/zka/FSKit/NeFS.hxx b/dev/zka/FSKit/NeFS.hxx
index d391f5b5..4696df57 100644
--- a/dev/zka/FSKit/NeFS.hxx
+++ b/dev/zka/FSKit/NeFS.hxx
@@ -30,6 +30,8 @@ default.
#define kNeFSInvalidCatalog (-1)
#define kNeFSNodeNameLen (256)
+#define kNeFSMinimumDiskSize (gib_cast(4))
+
#define kNeFSSectorSz (512)
#define kNeFSForkDataSz (mib_cast(16))
diff --git a/dev/zka/HALKit/ARM64/HalKernelMain.cxx b/dev/zka/HALKit/ARM64/HalKernelMain.cxx
index 706106c0..4e445a21 100644
--- a/dev/zka/HALKit/ARM64/HalKernelMain.cxx
+++ b/dev/zka/HALKit/ARM64/HalKernelMain.cxx
@@ -23,6 +23,11 @@ EXTERN_C Kernel::Void ke_dll_entrypoint(Kernel::Void);
EXTERN_C void hal_init_platform(
Kernel::HEL::HANDOVER_INFO_HEADER* HandoverHeader)
{
+
+ /************************************************** */
+ /* INITIALIZE AND VALIDATE HEADER. */
+ /************************************************** */
+
kHandoverHeader = HandoverHeader;
if (kHandoverHeader->f_Magic != kHandoverMagic &&
@@ -31,5 +36,9 @@ EXTERN_C void hal_init_platform(
return;
}
+ /************************************** */
+ /* INITIALIZE BIT MAP. */
+ /************************************** */
+
while (Yes) {}
}
diff --git a/dev/zka/KernelKit/UserProcessScheduler.hxx b/dev/zka/KernelKit/UserProcessScheduler.hxx
index a83027b2..bd07a88e 100644
--- a/dev/zka/KernelKit/UserProcessScheduler.hxx
+++ b/dev/zka/KernelKit/UserProcessScheduler.hxx
@@ -99,12 +99,14 @@ namespace Kernel
// end of operator overloading.
- enum ProcessSubsystemEnum
+ enum ProcessSubsystemEnum : Int32
{
- eProcessSubsystemSecurity,
- eProcessSubsystemNative,
- eProcessSubsystemInvalid,
- eProcessSubsystemCount,
+ kProcessSubsystemSecurity = 100,
+ kProcessSubsystemApplication,
+ kProcessSubsystemService,
+ kProcessSubsystemDriver,
+ kProcessSubsystemInvalid = 255,
+ kProcessSubsystemCount = 4,
};
using ProcessSubsystem = ProcessSubsystemEnum;
@@ -144,8 +146,8 @@ namespace Kernel
const UInt32& GetExitCode() noexcept;
public:
- Char Name[kProcessLen] = {"PROCESS #0 (TEAM 0)"};
- ProcessSubsystem SubSystem{ProcessSubsystem::eProcessSubsystemInvalid};
+ Char Name[kProcessLen] = {"ZKA Process"};
+ ProcessSubsystem SubSystem{ProcessSubsystem::kProcessSubsystemInvalid};
User* Owner{nullptr};
HAL::StackFramePtr StackFrame{nullptr};
AffinityKind Affinity{AffinityKind::kStandard};
diff --git a/dev/zka/src/IndexableProperty.cxx b/dev/zka/src/IndexableProperty.cxx
index fb3a6313..7595291c 100644
--- a/dev/zka/src/IndexableProperty.cxx
+++ b/dev/zka/src/IndexableProperty.cxx
@@ -4,17 +4,15 @@
------------------------------------------- */
-//! @brief Filesystem Indexer.
-
#include <CompilerKit/CompilerKit.hxx>
#include <FSKit/IndexableProperty.hxx>
#include <NewKit/MutableArray.hxx>
#include <NewKit/Utils.hxx>
-/// @brief File Indexer.
+/// @brief File indexer API for fast path access.
/// BUGS: 0
-#define kMaxLenIndexer 256
+#define kMaxLenIndexer (256U)
namespace Kernel
{
@@ -41,10 +39,10 @@ namespace Kernel
}
/// @brief Index a file into the indexer instance.
- /// @param filename path
+ /// @param filename filesystem path to access.
/// @param filenameLen used bytes in path.
/// @param indexer the filesystem indexer.
- /// @return none.
+ /// @return none, check before if indexer can be claimed (using indexer.HasFlag(kIndexerClaimed)).
Void fs_index_file(const Char* filename, SizeT filenameLen, IndexableProperty& indexer)
{
if (!indexer.HasFlag(kIndexerClaimed))
@@ -52,7 +50,7 @@ namespace Kernel
indexer.AddFlag(kIndexerClaimed);
rt_copy_memory((VoidPtr)indexer.Leak().Path, (VoidPtr)filename, filenameLen);
- kcout << "filesystem: index new file: " << filename << endl;
+ kcout << "FSKit: Indexed new file: " << filename << endl;
}
}
} // namespace Indexer
diff --git a/dev/zka/src/UserProcessScheduler.cxx b/dev/zka/src/UserProcessScheduler.cxx
index ed2cfa17..d0236578 100644
--- a/dev/zka/src/UserProcessScheduler.cxx
+++ b/dev/zka/src/UserProcessScheduler.cxx
@@ -441,6 +441,10 @@ namespace Kernel
continue;
}
}
+ else
+ {
+ --process.PTime;
+ }
}
kcout << "Scheduled Process Count: " << number(process_index) << endl;
@@ -476,9 +480,9 @@ namespace Kernel
/// @param process the process reference.
/// @retval true can be schedulded.
/// @retval false cannot be schedulded.
- bool UserProcessHelper::CanBeScheduled(const UserProcess& process)
+ Bool UserProcessHelper::CanBeScheduled(const UserProcess& process)
{
- kcout << "Checking process status...\r";
+ kcout << "Checking UserProcess status...\r";
if (process.Status == ProcessStatusKind::kFrozen ||
process.Status == ProcessStatusKind::kDead)
@@ -488,7 +492,7 @@ namespace Kernel
process.Kind == UserProcess::kExectuableKind)
return No;
- return Yes;
+ return process.PTime < 1 && process.Status == ProcessStatusKind::kRunning;
}
/***********************************************************************************/
@@ -502,7 +506,7 @@ namespace Kernel
if (!cProcessScheduler)
{
cProcessScheduler = mm_new_class<UserProcessScheduler>();
- return cProcessScheduler;
+ return Yes;
}
return No;