aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/include
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64/include')
-rw-r--r--arch/x86_64/include/arch/context_switching/syscall/main.hpp28
-rw-r--r--arch/x86_64/include/arch/context_switching/syscall/syscall_handler.hpp23
-rw-r--r--arch/x86_64/include/arch/interrupt_handling/generic_interrupt_handler.hpp8
3 files changed, 51 insertions, 8 deletions
diff --git a/arch/x86_64/include/arch/context_switching/syscall/main.hpp b/arch/x86_64/include/arch/context_switching/syscall/main.hpp
new file mode 100644
index 0000000..c75268a
--- /dev/null
+++ b/arch/x86_64/include/arch/context_switching/syscall/main.hpp
@@ -0,0 +1,28 @@
+#ifndef TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_SYSCALL_MAIN_HPP
+#define TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_SYSCALL_MAIN_HPP
+
+#include "arch/context_switching/syscall/syscall_handler.hpp"
+
+#include <array>
+#include <cstdint>
+#include <optional>
+
+namespace teachos::arch::context_switching::syscall
+{
+ struct arguments
+ {
+ uint64_t arg_0{};
+ uint64_t arg_1{};
+ uint64_t arg_2{};
+ uint64_t arg_3{};
+ uint64_t arg_4{};
+ uint64_t arg_5{};
+ };
+
+ auto enable_syscall() -> void;
+
+ auto syscall(type syscall_number, arguments args = {}) -> uint64_t;
+
+} // namespace teachos::arch::context_switching::syscall
+
+#endif // TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_SYSCALL_MAIN_HPP
diff --git a/arch/x86_64/include/arch/context_switching/syscall/syscall_handler.hpp b/arch/x86_64/include/arch/context_switching/syscall/syscall_handler.hpp
new file mode 100644
index 0000000..e076995
--- /dev/null
+++ b/arch/x86_64/include/arch/context_switching/syscall/syscall_handler.hpp
@@ -0,0 +1,23 @@
+#ifndef TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_SYSCALL_SYSCALL_HANDLER_HPP
+#define TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_SYSCALL_SYSCALL_HANDLER_HPP
+
+#include <cstdint>
+
+namespace teachos::arch::context_switching::syscall
+{
+ enum type : uint64_t
+ {
+ WRITE = 1U
+ };
+
+ /**
+ * @brief Handler for SYSCALL instruction. Calls a specific implementation based
+ * on the register RAX.
+ *
+ * @return Returns with SYSRETQ
+ */
+ auto syscall_handler() -> void;
+
+} // namespace teachos::arch::context_switching::syscall
+
+#endif // TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_SYSCALL_SYSCALL_HANDLER_HPP
diff --git a/arch/x86_64/include/arch/interrupt_handling/generic_interrupt_handler.hpp b/arch/x86_64/include/arch/interrupt_handling/generic_interrupt_handler.hpp
index 866d15d..8091a58 100644
--- a/arch/x86_64/include/arch/interrupt_handling/generic_interrupt_handler.hpp
+++ b/arch/x86_64/include/arch/interrupt_handling/generic_interrupt_handler.hpp
@@ -29,14 +29,6 @@ namespace teachos::arch::interrupt_handling
[[gnu::interrupt]] [[gnu::section(".interrupt_text")]]
auto generic_interrupt_handler(interrupt_frame * frame) -> void;
- /**
- * @brief Interrupt handler function for syscalls (INT 0x80).
- *
- * @param frame Pointer to the interrupt frame containing CPU state.
- */
- [[gnu::interrupt]] [[gnu::section(".interrupt_text")]]
- auto syscall_interrupt_handler(interrupt_frame * frame) -> void;
-
} // namespace teachos::arch::interrupt_handling
#endif // TEACHOS_ARCH_X86_64_INTERRUPT_HANDLING_GENERIC_INTERRUPT_HANDLER_HPP