From 83d870e58457a1d335a1d9b9966a6a1887cc297b Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Mon, 24 Nov 2025 03:02:43 +0100 Subject: feat! breaking changes on kernel sources. Signed-off-by: Amlal El Mahrouss --- src/kernel/ArchKit/ArchKit.h | 108 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 src/kernel/ArchKit/ArchKit.h (limited to 'src/kernel/ArchKit/ArchKit.h') diff --git a/src/kernel/ArchKit/ArchKit.h b/src/kernel/ArchKit/ArchKit.h new file mode 100644 index 00000000..626f1e0b --- /dev/null +++ b/src/kernel/ArchKit/ArchKit.h @@ -0,0 +1,108 @@ +/* ======================================== + + Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. + +======================================== */ + +#pragma once + +#include +#include +#include + +#include + +#ifdef __NE_AMD64__ +#include +#include +#include +#elif defined(__NE_POWER64__) +#include +#elif defined(__NE_ARM64__) +#include +#elif defined(__NE_SDK__) +#include +#else +#error !!! unknown architecture !!! +#endif + +#define kMaxDispatchCallCount (512U) + +namespace Kernel { +inline SizeT rt_hash_seed(const Char* seed, UInt32 mul) { + SizeT hash = 0; + + for (SSizeT idx = 0; seed[idx] != 0; ++idx) { + hash += seed[idx]; + hash ^= mul; + } + + return hash; +} + +/// @brief write to mapped memory register +/// @param base the base address. +/// @param reg the register. +/// @param value the write to write on it. +template +inline Void ke_dma_write(UIntPtr base, DataKind reg, DataKind value) noexcept { + *(volatile DataKind*) (base + reg) = value; +} + +/// @brief read from mapped memory register. +/// @param base base address +/// @param reg the register. +/// @return the value inside the register. +template +inline UInt32 ke_dma_read(UIntPtr base, DataKind reg) noexcept { + return *(volatile DataKind*) (base + reg); +} + +/// @brief Hardware Abstraction Layer +namespace HAL { + /// @brief Check whether this pointer is a bitmap object. + /// @param ptr argument to verify. + /// @param whether successful or not. + auto mm_is_bitmap(VoidPtr ptr) -> Bool; +} // namespace HAL +} // namespace Kernel + +typedef Kernel::Void (*rt_syscall_proc)(Kernel::VoidPtr); + +/// @brief System Call Dispatch. +struct HAL_DISPATCH_ENTRY final { + Kernel::UInt64 fHash; + Kernel::Bool fHooked; + rt_syscall_proc fProc; + + BOOL IsKernCall() { return NO; } + BOOL IsSysCall() { return YES; } + + operator bool() { return fHooked; } +}; + +typedef Kernel::Void (*rt_kerncall_proc)(Kernel::SizeT, Kernel::VoidPtr, Kernel::SizeT); + +/// @brief Kernel Call Dispatch. +struct HAL_KERNEL_DISPATCH_ENTRY final { + Kernel::UInt64 fHash; + Kernel::Bool fHooked; + rt_kerncall_proc fProc; + + BOOL IsKernCall() { return YES; } + BOOL IsSysCall() { return NO; } + + operator bool() { return fHooked; } +}; + +inline Kernel::Array kSysCalls; + +inline Kernel::Array kKernCalls; + +#ifdef __NE_VIRTUAL_MEMORY_SUPPORT__ + +inline Kernel::VoidPtr kKernelVM = nullptr; + +#endif // __NE_VIRTUAL_MEMORY_SUPPORT__ + +inline Kernel::SizeT kBitMapCursor = 0UL; -- cgit v1.2.3