summaryrefslogtreecommitdiffhomepage
path: root/src/kernel/HALKit/ARM64/Processor.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/HALKit/ARM64/Processor.h')
-rw-r--r--src/kernel/HALKit/ARM64/Processor.h78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/kernel/HALKit/ARM64/Processor.h b/src/kernel/HALKit/ARM64/Processor.h
new file mode 100644
index 00000000..716d317b
--- /dev/null
+++ b/src/kernel/HALKit/ARM64/Processor.h
@@ -0,0 +1,78 @@
+/* ========================================
+
+ Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license.
+
+======================================== */
+
+#pragma once
+
+#ifdef __NE_ARM64__
+
+#include <FirmwareKit/Handover.h>
+#include <NeKit/Array.h>
+#include <NeKit/Defines.h>
+#include <NeKit/Utils.h>
+
+#define kCPUBackendName "aarch64"
+
+namespace Kernel::HAL {
+struct PACKED Register64 final {
+ UShort Limit;
+ UIntPtr Base;
+};
+
+/// @brief Memory Manager mapping flags.
+enum {
+ kMMFlagsInvalid = 1 << 0,
+ kMMFlagsPresent = 1 << 1,
+ kMMFlagsWr = 1 << 2,
+ kMMFlagsUser = 1 << 3,
+ kMMFlagsNX = 1 << 4,
+ kMMFlagsCount = 4,
+};
+
+/// @brief Set a PTE from pd_base.
+/// @param virt_addr a valid virtual address.
+/// @param phys_addr point to physical address.
+/// @param flags the flags to put on the page.
+/// @return Status code of page manip.
+EXTERN_C Int32 mm_map_page(VoidPtr virtual_address, VoidPtr physical_address, UInt32 flags,
+ UInt32 level = 2);
+
+EXTERN_C UIntPtr mm_get_page_addr(VoidPtr virtual_address);
+
+typedef UIntPtr Reg;
+typedef Register64 Register;
+
+/// @note let's keep the same name as AMD64 HAL.
+struct PACKED StackFrame {
+ Reg IP;
+ Reg SP;
+ Reg R8;
+ Reg R9;
+ Reg R10;
+ Reg R11;
+ Reg R12;
+ Reg R13;
+ Reg R14;
+ Reg R15;
+};
+
+typedef StackFrame* StackFramePtr;
+
+inline Void rt_halt() noexcept {
+ while (Yes) {
+ }
+}
+
+inline Void hal_wfi(Void) {
+ asm volatile("wfi");
+}
+} // namespace Kernel::HAL
+
+inline Kernel::VoidPtr kKernelBitMpStart = nullptr;
+inline Kernel::UIntPtr kKernelBitMpSize = 0UL;
+
+#include <HALKit/ARM64/Paging.h>
+
+#endif // __NE_ARM64__ \ No newline at end of file