summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-06-12 02:54:29 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-06-12 02:55:14 +0200
commita5851dfaa65d15f44f52b2aed1aa0179291b46fc (patch)
tree8d49a65a7d273cdaf9dfa4f56c9ffba5999633ff /dev/kernel
parent1ba9d3b0756d2d101906296cbcfeeecc39144cac (diff)
feat: libSystem, kernel: finalizing the hash and routing system of libSystem's handlers.
feat: Rework TTY, and CD-ROM API too. Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel')
-rw-r--r--dev/kernel/ArchKit/ArchKit.h2
-rw-r--r--dev/kernel/FirmwareKit/CoreBoot/BootNet.h10
-rw-r--r--dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc28
-rw-r--r--dev/kernel/src/FS/HeFS+FileSystemParser.cc5
4 files changed, 24 insertions, 21 deletions
diff --git a/dev/kernel/ArchKit/ArchKit.h b/dev/kernel/ArchKit/ArchKit.h
index 09839d98..a9dca240 100644
--- a/dev/kernel/ArchKit/ArchKit.h
+++ b/dev/kernel/ArchKit/ArchKit.h
@@ -70,7 +70,7 @@ namespace HAL {
typedef Kernel::Void (*rt_syscall_proc)(Kernel::VoidPtr);
struct HAL_DISPATCH_ENTRY final {
- Kernel::Int64 fHash;
+ Kernel::UInt64 fHash;
Kernel::Bool fHooked;
rt_syscall_proc fProc;
diff --git a/dev/kernel/FirmwareKit/CoreBoot/BootNet.h b/dev/kernel/FirmwareKit/CoreBoot/BootNet.h
index c42c98db..3ed11363 100644
--- a/dev/kernel/FirmwareKit/CoreBoot/BootNet.h
+++ b/dev/kernel/FirmwareKit/CoreBoot/BootNet.h
@@ -18,11 +18,11 @@
/// sent (if m_preflight = 0)
/// @note Can be used to patch ROMs too (if ImpliesProgram = 1)
typedef struct BOOTNET_INTERNET_HEADER {
- Kernel::Char NB1; /// magic char 1 'O'
- Kernel::Char NB2; /// magic char 2 'N'
- Kernel::Char NB3; /// magic char 3 'E'
- Kernel::Char NB4; /// magic char 4 'T'
- Kernel::UInt16 Version;
+ Kernel::Char NB1; /// magic char 1 'O'
+ Kernel::Char NB2; /// magic char 2 'N'
+ Kernel::Char NB3; /// magic char 3 'E'
+ Kernel::Char NB4; /// magic char 4 'T'
+ Kernel::UInt16 Version;
Kernel::Char Name[kBootNetNameLen]; /// example: Modjo
Kernel::Int32 Length; /// the patch length.
Kernel::Char Target[kBootNetNameLen]; /// the target file.
diff --git a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc
index 98e1ed61..be6d0af5 100644
--- a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc
+++ b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc
@@ -127,39 +127,39 @@ EXTERN_C void idt_handle_ud(Kernel::UIntPtr rsp) {
process.Leak().Signal.Status = process.Leak().Status;
}
-/// @brief Enter syscall from assembly.
+/// @brief Enter syscall from assembly (libSystem only)
/// @param stack the stack pushed from assembly routine.
/// @return nothing.
-EXTERN_C Kernel::Void hal_system_call_enter(Kernel::UIntPtr rcx_syscall_index,
- Kernel::UIntPtr rdx_syscall_struct) {
+EXTERN_C Kernel::Void hal_system_call_enter(Kernel::UIntPtr rcx_hash,
+ Kernel::UIntPtr rdx_syscall_arg) {
hal_idt_send_eoi(50);
if (!Kernel::kCurrentUser) return;
- if (rcx_syscall_index < kSysCalls.Count()) {
- if (kSysCalls[rcx_syscall_index].fHooked) {
- if (kSysCalls[rcx_syscall_index].fProc) {
- (kSysCalls[rcx_syscall_index].fProc)((Kernel::VoidPtr) rdx_syscall_struct);
+ for (SizeT i = 0UL; i < kMaxDispatchCallCount; ++i) {
+ if (kSysCalls[i].fHooked && rcx_hash == kSysCalls[i].fHash) {
+ if (kSysCalls[i].fProc) {
+ (kSysCalls[i].fProc)((Kernel::VoidPtr) rdx_syscall_arg);
}
}
}
}
-/// @brief Enter Kernel call from assembly (DDK only).
+/// @brief Enter Kernel call from assembly (libDDK only).
/// @param stack the stack pushed from assembly routine.
/// @return nothing.
-EXTERN_C Kernel::Void hal_kernel_call_enter(Kernel::UIntPtr rcx_kerncall_index,
- Kernel::UIntPtr rdx_kerncall_struct) {
+EXTERN_C Kernel::Void hal_kernel_call_enter(Kernel::UIntPtr rcx_hash,
+ Kernel::UIntPtr rdx_kerncall_arg) {
hal_idt_send_eoi(51);
if (!Kernel::kRootUser) return;
if (Kernel::kCurrentUser != Kernel::kRootUser) return;
if (!Kernel::kCurrentUser->IsSuperUser()) return;
- if (rcx_kerncall_index < kKernCalls.Count()) {
- if (kKernCalls[rcx_kerncall_index].fHooked) {
- if (kKernCalls[rcx_kerncall_index].fProc) {
- (kKernCalls[rcx_kerncall_index].fProc)((Kernel::VoidPtr) rdx_kerncall_struct);
+ for (SizeT i = 0UL; i < kMaxDispatchCallCount; ++i) {
+ if (kKernCalls[i].fHooked && rcx_hash == kKernCalls[rcx_hash].fHash) {
+ if (kKernCalls[i].fProc) {
+ (kKernCalls[i].fProc)((Kernel::VoidPtr) rdx_kerncall_arg);
}
}
}
diff --git a/dev/kernel/src/FS/HeFS+FileSystemParser.cc b/dev/kernel/src/FS/HeFS+FileSystemParser.cc
index bfd38f69..39f8c0a1 100644
--- a/dev/kernel/src/FS/HeFS+FileSystemParser.cc
+++ b/dev/kernel/src/FS/HeFS+FileSystemParser.cc
@@ -759,7 +759,10 @@ _Output Bool HeFileSystemParser::Format(_Input _Output DriveTrait* mnt, _Input c
if (drv_std_get_size() < kHeFSMinimumDiskSize) {
(Void)(kout << "OpenHeFS recommends at least 128 GiB of free space." << kendl);
- (Void)(kout << "The OS will still try to format a HeFS disk here anyway, don't expect perfect geometry." << kendl);
+ (Void)(
+ kout
+ << "The OS will still try to format a HeFS disk here anyway, don't expect perfect geometry."
+ << kendl);
}
HEFS_BOOT_NODE* boot = (HEFS_BOOT_NODE*) RTL_ALLOCA(sizeof(HEFS_BOOT_NODE));