summaryrefslogtreecommitdiffhomepage
path: root/Private/HALKit/PowerPC
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-01-26 22:26:48 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-01-26 22:27:09 +0100
commiteba8b7ddd0a455d9e49f32dcae712c5612c0093c (patch)
tree749a3d34546d055507a920bce4ab10e8a9945719 /Private/HALKit/PowerPC
parentdd192787a70a973f2474720aea49af3f6ddabb7a (diff)
Kernel: Major repository refactor.
Rework the repo into Private and Public modules. Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'Private/HALKit/PowerPC')
-rw-r--r--Private/HALKit/PowerPC/.gitkeep0
-rw-r--r--Private/HALKit/PowerPC/CoreContextSwitchPowerPC.s20
-rw-r--r--Private/HALKit/PowerPC/CorePowerPCStart.s6
-rw-r--r--Private/HALKit/PowerPC/CoreSyscallHandlerPowerPC.cpp21
-rw-r--r--Private/HALKit/PowerPC/PCI/.gitkeep0
-rw-r--r--Private/HALKit/PowerPC/PCI/Device.cxx0
-rw-r--r--Private/HALKit/PowerPC/Processor.cpp68
-rw-r--r--Private/HALKit/PowerPC/Processor.hpp50
8 files changed, 165 insertions, 0 deletions
diff --git a/Private/HALKit/PowerPC/.gitkeep b/Private/HALKit/PowerPC/.gitkeep
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/Private/HALKit/PowerPC/.gitkeep
diff --git a/Private/HALKit/PowerPC/CoreContextSwitchPowerPC.s b/Private/HALKit/PowerPC/CoreContextSwitchPowerPC.s
new file mode 100644
index 00000000..a33ff931
--- /dev/null
+++ b/Private/HALKit/PowerPC/CoreContextSwitchPowerPC.s
@@ -0,0 +1,20 @@
+/*
+ * ========================================================
+ *
+ * hCore
+ * Copyright 2024 Mahrouss Logic, all rights reserved.
+ *
+ * ========================================================
+ */
+
+.align 4
+.type name, @function
+.text
+.globl rt_do_context_switch
+
+/* r3 = assigner stack, r4 = assignee stack */
+rt_do_context_switch:
+
+ lwz %r4, 0(%r3)
+
+ blr
diff --git a/Private/HALKit/PowerPC/CorePowerPCStart.s b/Private/HALKit/PowerPC/CorePowerPCStart.s
new file mode 100644
index 00000000..f0c5ae2b
--- /dev/null
+++ b/Private/HALKit/PowerPC/CorePowerPCStart.s
@@ -0,0 +1,6 @@
+.globl __AssemblerStart
+.align 4
+.text
+
+__AssemblerStart:
+ b __AssemblerStart \ No newline at end of file
diff --git a/Private/HALKit/PowerPC/CoreSyscallHandlerPowerPC.cpp b/Private/HALKit/PowerPC/CoreSyscallHandlerPowerPC.cpp
new file mode 100644
index 00000000..6a723cba
--- /dev/null
+++ b/Private/HALKit/PowerPC/CoreSyscallHandlerPowerPC.cpp
@@ -0,0 +1,21 @@
+/*
+ * ========================================================
+ *
+ * hCore
+ * Copyright 2024 Mahrouss Logic, all rights reserved.
+ *
+ * ========================================================
+ */
+
+#include <ArchKit/Arch.hpp>
+#include <NewKit/Array.hpp>
+
+hCore::Array<void (*)(hCore::Int32 id, hCore::HAL::StackFrame *), kMaxSyscalls> kSyscalls;
+
+extern "C" void rt_syscall_handle(hCore::HAL::StackFrame *stack)
+{
+ for (hCore::SizeT index = 0UL; index < kMaxSyscalls; ++index)
+ {
+ (kSyscalls[index].Leak().Leak())(stack->ID, stack);
+ }
+}
diff --git a/Private/HALKit/PowerPC/PCI/.gitkeep b/Private/HALKit/PowerPC/PCI/.gitkeep
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/Private/HALKit/PowerPC/PCI/.gitkeep
diff --git a/Private/HALKit/PowerPC/PCI/Device.cxx b/Private/HALKit/PowerPC/PCI/Device.cxx
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/Private/HALKit/PowerPC/PCI/Device.cxx
diff --git a/Private/HALKit/PowerPC/Processor.cpp b/Private/HALKit/PowerPC/Processor.cpp
new file mode 100644
index 00000000..b134cf92
--- /dev/null
+++ b/Private/HALKit/PowerPC/Processor.cpp
@@ -0,0 +1,68 @@
+/*
+* ========================================================
+*
+* hCore
+* Copyright 2024 Mahrouss Logic, all rights reserved.
+*
+* ========================================================
+*/
+
+#include <HALKit/PowerPC/Processor.hpp>
+#include <KernelKit/DebugOutput.hpp>
+
+extern "C" void flush_tlb() {}
+extern "C" void rt_wait_for_io() {}
+extern "C" hCore::HAL::StackFrame* rt_get_current_context() { }
+
+namespace hCore
+{
+namespace HAL
+{
+ UIntPtr hal_create_page(bool rw, bool user)
+ {
+ return 0;
+ }
+
+ UIntPtr hal_alloc_page(UIntPtr offset, bool rw, bool user)
+ {
+ return 0;
+ }
+}
+
+// @brief wakes up thread.
+// wakes up thread from hang.
+void rt_wakeup_thread(HAL::StackFrame* stack)
+{
+
+}
+
+// @brief makes thread sleep.
+// hooks and hangs thread to prevent code from executing.
+void rt_hang_thread(HAL::StackFrame* stack)
+{
+
+}
+
+// @brief main HAL entrypoint
+void initialize_hardware_components()
+{
+
+}
+
+void system_io_print(const char *bytes)
+{
+ if (!bytes)
+ return;
+
+ SizeT index = 0;
+ SizeT len = string_length(bytes, 256);
+
+ while (index < len)
+ {
+ // TODO
+ ++index;
+ }
+}
+
+TerminalDevice kcout(hCore::system_io_print, nullptr);
+} \ No newline at end of file
diff --git a/Private/HALKit/PowerPC/Processor.hpp b/Private/HALKit/PowerPC/Processor.hpp
new file mode 100644
index 00000000..58de1aa6
--- /dev/null
+++ b/Private/HALKit/PowerPC/Processor.hpp
@@ -0,0 +1,50 @@
+/*
+ * ========================================================
+ *
+ * hCore
+ * Copyright 2024 Mahrouss Logic, all rights reserved.
+ *
+ * ========================================================
+ */
+
+#pragma once
+
+#include <NewKit/Defines.hpp>
+#include <NewKit/Utils.hpp>
+
+#define __aligned __attribute__((aligned(4)))
+
+namespace hCore::HAL
+{
+ typedef UIntPtr Reg;
+
+ struct __aligned StackFrame
+ {
+ Reg R0;
+ Reg R1;
+ Reg R2;
+ Reg R3;
+ Reg R4;
+ Reg R5;
+ Reg R6;
+ Reg R7;
+ Reg ID; // R8
+ };
+
+ typedef StackFrame* StackFramePtr;
+
+ inline void rt_halt()
+ {
+ while (1)
+ {}
+ }
+
+ inline void rt_cli()
+ {
+
+ }
+}
+
+extern "C" void int_handle_math(hCore::UIntPtr sp);
+extern "C" void int_handle_pf(hCore::UIntPtr sp);
+extern "C" void* __ppc_alloca(size_t sz); \ No newline at end of file