summaryrefslogtreecommitdiffhomepage
path: root/src/kernel/HALKit/POWER/Processor.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/HALKit/POWER/Processor.h')
-rw-r--r--src/kernel/HALKit/POWER/Processor.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/kernel/HALKit/POWER/Processor.h b/src/kernel/HALKit/POWER/Processor.h
new file mode 100644
index 00000000..46cda33e
--- /dev/null
+++ b/src/kernel/HALKit/POWER/Processor.h
@@ -0,0 +1,60 @@
+/* ========================================
+
+ Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license.
+
+ Purpose: POWER processor header.
+
+======================================== */
+
+#pragma once
+
+#include <NeKit/Defines.h>
+#include <NeKit/Utils.h>
+
+#define rtl_nop_op() asm volatile("mr 0, 0")
+#define kHalPPCAlignment __attribute__((aligned(4)))
+
+namespace Kernel::HAL {
+typedef UIntPtr Reg;
+
+/// @brief Stack frame (as retrieved from assembly.)
+struct PACKED StackFrame final {
+ Reg R8{0};
+ Reg R9{0};
+ Reg R10{0};
+ Reg R11{0};
+ Reg R12{0};
+ Reg R13{0};
+ Reg R14{0};
+ Reg R15{0};
+ Reg SP{0};
+ Reg IP{0};
+};
+
+typedef StackFrame* StackFramePtr;
+
+inline void rt_halt() {
+ while (true) {
+ NoOp(); // no oop.
+ }
+}
+
+inline void rt_cli() {
+ NoOp(); // no oop
+}
+} // namespace Kernel::HAL
+
+EXTERN_C Kernel::Void int_handle_math(Kernel::UIntPtr sp);
+EXTERN_C Kernel::Void int_handle_pf(Kernel::UIntPtr sp);
+
+/// @brief Set TLB.
+Kernel::Bool hal_set_tlb(Kernel::UInt8 tlb, Kernel::UInt32 epn, Kernel::UInt64 rpn,
+ Kernel::UInt8 perms, Kernel::UInt8 wimge, Kernel::UInt8 ts,
+ Kernel::UInt8 esel, Kernel::UInt8 tsize, Kernel::UInt8 iprot);
+
+/// @brief Write TLB.
+Kernel::Void hal_write_tlb(Kernel::UInt32 mas0, Kernel::UInt32 mas1, Kernel::UInt32 mas2,
+ Kernel::UInt32 mas3, Kernel::UInt32 mas7);
+
+/// @brief Flush TLB.
+EXTERN_C Kernel::Void hal_flush_tlb();