/* ------------------------------------------- Copyright (C) 2024-2025, Amlal EL Mahrouss, all rights reserved. ------------------------------------------- */ #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 kKernelMaxSystemCalls (512U) namespace Kernel { inline SSizeT rt_hash_seed(const Char* seed, int mul) { SSizeT 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); } namespace HAL { auto mm_is_bitmap(VoidPtr ptr) -> Bool; } } // namespace Kernel typedef Kernel::Void (*rt_syscall_proc)(Kernel::VoidPtr); struct HalSyscallEntry final { Kernel::Int64 fHash; Kernel::Bool fHooked; rt_syscall_proc fProc; operator bool() { return fHooked; } }; inline Kernel::Array kSyscalls; inline Kernel::Array kKerncalls; EXTERN_C Kernel::HAL::StackFramePtr mp_get_current_context(Kernel::Int64 pid);