summaryrefslogtreecommitdiffhomepage
path: root/dev/Kernel/ArchKit
diff options
context:
space:
mode:
authorAmlal EL Mahrouss <amlalelmahrouss@icloud.com>2024-08-15 18:35:34 +0200
committerAmlal EL Mahrouss <amlalelmahrouss@icloud.com>2024-08-15 18:35:34 +0200
commitf3d931aa7cfaf96baef8383b59a8938779541ee7 (patch)
treefdb9fc51badb3dbd03e46ab0766a49d9522e13e2 /dev/Kernel/ArchKit
parent86640816e8b1d3595365f1fcc8a2a9e61fb40ff1 (diff)
[IMP] Moved source code into dev/ folder.
Signed-off-by: Amlal EL Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'dev/Kernel/ArchKit')
-rw-r--r--dev/Kernel/ArchKit/ArchKit.hxx105
-rw-r--r--dev/Kernel/ArchKit/compile_flags.txt8
2 files changed, 113 insertions, 0 deletions
diff --git a/dev/Kernel/ArchKit/ArchKit.hxx b/dev/Kernel/ArchKit/ArchKit.hxx
new file mode 100644
index 00000000..a3fd81a6
--- /dev/null
+++ b/dev/Kernel/ArchKit/ArchKit.hxx
@@ -0,0 +1,105 @@
+/* -------------------------------------------
+
+ Copyright ZKA Technologies.
+
+------------------------------------------- */
+
+#pragma once
+
+#include <NewKit/Array.hxx>
+#include <NewKit/Defines.hxx>
+#include <NewKit/Function.hxx>
+
+#include <FirmwareKit/Handover.hxx>
+
+#ifdef __NEWOS_AMD64__
+#include <HALKit/AMD64/HalPageAlloc.hxx>
+#include <HALKit/AMD64/Hypervisor.hxx>
+#include <HALKit/AMD64/Processor.hxx>
+#elif defined(__NEWOS_POWER64__)
+#include <HALKit/POWER/Processor.hxx>
+#elif defined(__NEWOS_ARM64__)
+#include <HALKit/ARM64/Processor.hxx>
+#else
+#error !!! unknown architecture !!!
+#endif
+
+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.
+ inline Void ke_dma_write(UInt32 base, UInt32 reg, UInt32 value) noexcept
+ {
+ *(volatile UInt32*)((UInt64)base + reg) = value;
+ }
+
+ /// @brief read from mapped memory register.
+ /// @param base base address
+ /// @param reg the register.
+ /// @return the value inside the register.
+ inline UInt32 ke_dma_read(UInt32 base, UInt32 reg) noexcept
+ {
+ return *(volatile UInt32*)((UInt64)base + reg);
+ }
+
+ /// @brief Print a region of memory.
+ /// @param start
+ /// @param length
+ inline Void ke_print_raw_memory(const void* start, Size length)
+ {
+ const UInt8* ptr = (const UInt8*)start;
+
+ for (Size i = 0; i < length; i++)
+ {
+ if (i % 16 == 0)
+ {
+ kcout << hex_number((UIntPtr)ptr + i);
+ }
+ else
+ {
+ kcout << hex_number(ptr[i]);
+ }
+
+ kcout << " ";
+ }
+
+ kcout << "\r";
+ }
+} // namespace Kernel
+
+#define kKernelMaxSystemCalls (256)
+
+typedef Kernel::Void (*rt_syscall_proc)(Kernel::VoidPtr);
+
+struct HAL_SYSCALL_RECORD final
+{
+ Kernel::Int64 fHash;
+ Kernel::Bool fHooked;
+ rt_syscall_proc fProc;
+};
+
+inline Kernel::Array<HAL_SYSCALL_RECORD,
+ kKernelMaxSystemCalls>
+ kSyscalls;
+
+inline Kernel::Array<HAL_SYSCALL_RECORD,
+ kKernelMaxSystemCalls>
+ kKerncalls;
+
+EXTERN_C Kernel::HAL::StackFramePtr rt_get_current_context();
+EXTERN_C Kernel::Void rt_do_context_switch(Kernel::HAL::StackFramePtr stack_frame);
diff --git a/dev/Kernel/ArchKit/compile_flags.txt b/dev/Kernel/ArchKit/compile_flags.txt
new file mode 100644
index 00000000..c15efc77
--- /dev/null
+++ b/dev/Kernel/ArchKit/compile_flags.txt
@@ -0,0 +1,8 @@
+-nostdlib
+-ffreestanding
+-std=c++20
+-I./
+-I../
+-I$(HOME)/
+-D__NEWOS_AMD64__
+-D__ED__