diff options
Diffstat (limited to 'dev')
| -rw-r--r-- | dev/kernel/ArchKit/ArchKit.h | 13 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc | 4 | ||||
| -rw-r--r-- | dev/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc | 6 |
3 files changed, 16 insertions, 7 deletions
diff --git a/dev/kernel/ArchKit/ArchKit.h b/dev/kernel/ArchKit/ArchKit.h index a9dca240..04af0918 100644 --- a/dev/kernel/ArchKit/ArchKit.h +++ b/dev/kernel/ArchKit/ArchKit.h @@ -77,9 +77,20 @@ struct HAL_DISPATCH_ENTRY final { operator bool() { return fHooked; } }; + +typedef Kernel::Void (*rt_kerncall_proc)(Kernel::SizeT, Kernel::VoidPtr, Kernel::SizeT); + +struct HAL_KERNEL_DISPATCH_ENTRY final { + Kernel::UInt64 fHash; + Kernel::Bool fHooked; + rt_kerncall_proc fProc; + + operator bool() { return fHooked; } +}; + inline Kernel::Array<HAL_DISPATCH_ENTRY, kMaxDispatchCallCount> kSysCalls; -inline Kernel::Array<HAL_DISPATCH_ENTRY, kMaxDispatchCallCount> kKernCalls; +inline Kernel::Array<HAL_KERNEL_DISPATCH_ENTRY, kMaxDispatchCallCount> kKernCalls; #ifdef __NE_VIRTUAL_MEMORY_SUPPORT__ diff --git a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc index be6d0af5..c2988767 100644 --- a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc +++ b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc @@ -149,7 +149,7 @@ EXTERN_C Kernel::Void hal_system_call_enter(Kernel::UIntPtr rcx_hash, /// @param stack the stack pushed from assembly routine. /// @return nothing. EXTERN_C Kernel::Void hal_kernel_call_enter(Kernel::UIntPtr rcx_hash, - Kernel::UIntPtr rdx_kerncall_arg) { + Kernel::SizeT cnt, Kernel::UIntPtr arg, Kernel::SizeT sz) { hal_idt_send_eoi(51); if (!Kernel::kRootUser) return; @@ -159,7 +159,7 @@ EXTERN_C Kernel::Void hal_kernel_call_enter(Kernel::UIntPtr rcx_hash, 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); + (kKernCalls[i].fProc)(cnt, (Kernel::VoidPtr) arg, sz); } } } diff --git a/dev/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc b/dev/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc index e6f70f0e..4c02e8cc 100644 --- a/dev/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc +++ b/dev/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc @@ -144,9 +144,7 @@ EXTERN_C Kernel::Void hal_system_call_enter(Kernel::UIntPtr rcx_hash, /// @param stack the stack pushed from assembly routine. /// @return nothing. EXTERN_C Kernel::Void hal_kernel_call_enter(Kernel::UIntPtr rcx_hash, - Kernel::UIntPtr rdx_kerncall_arg) { - hal_int_send_eoi(51); - + Kernel::SizeT cnt, Kernel::UIntPtr arg, Kernel::SizeT sz) { if (!Kernel::kRootUser) return; if (Kernel::kCurrentUser != Kernel::kRootUser) return; if (!Kernel::kCurrentUser->IsSuperUser()) return; @@ -154,7 +152,7 @@ EXTERN_C Kernel::Void hal_kernel_call_enter(Kernel::UIntPtr rcx_hash, 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); + (kKernCalls[i].fProc)(cnt, (Kernel::VoidPtr) arg, sz); } } } |
