aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/pre/include
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-04-29 09:36:43 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-04-29 09:36:43 +0200
commitd6ef2153fb32ee7ba04acdf37e7a535a855229db (patch)
treed2cd3275797208b1f78c44baa63739fa8645146f /arch/x86_64/pre/include
parentd906d70c94c2a40d5fc6fd26056c7bc57d540002 (diff)
parentc3d5a155025b445ab9213f131681afe9410b4e66 (diff)
downloadteachos-d6ef2153fb32ee7ba04acdf37e7a535a855229db.tar.xz
teachos-d6ef2153fb32ee7ba04acdf37e7a535a855229db.zip
Merge branch 'fmorgner/develop-BA-FS26/x86-64-use-p1204-layout' into 'develop-BA-FS26'
chore: migrate 'arch' to p1204 project layout See merge request teachos/kernel!28
Diffstat (limited to 'arch/x86_64/pre/include')
-rw-r--r--arch/x86_64/pre/include/arch/context_switching/main.hpp51
-rw-r--r--arch/x86_64/pre/include/arch/context_switching/syscall/main.hpp91
-rw-r--r--arch/x86_64/pre/include/arch/context_switching/syscall/syscall_enable.hpp18
-rw-r--r--arch/x86_64/pre/include/arch/context_switching/syscall/syscall_handler.hpp18
-rw-r--r--arch/x86_64/pre/include/arch/kernel/halt.hpp13
-rw-r--r--arch/x86_64/pre/include/arch/kernel/main.hpp13
-rw-r--r--arch/x86_64/pre/include/arch/user/main.hpp16
7 files changed, 0 insertions, 220 deletions
diff --git a/arch/x86_64/pre/include/arch/context_switching/main.hpp b/arch/x86_64/pre/include/arch/context_switching/main.hpp
deleted file mode 100644
index 07e00e8..0000000
--- a/arch/x86_64/pre/include/arch/context_switching/main.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_MAIN_HPP
-#define TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_MAIN_HPP
-
-#include <arch/context_switching/interrupt_descriptor_table/interrupt_descriptor_table.hpp>
-#include <arch/context_switching/segment_descriptor_table/global_descriptor_table.hpp>
-
-namespace teachos::arch::context_switching
-{
- /**
- * @brief Contains the references to the tables required for context switching
- */
- struct descriptor_tables
- {
- segment_descriptor_table::global_descriptor_table & gdt; ///< Reference to the global descriptor table.
- interrupt_descriptor_table::interrupt_descriptor_table & idt; ///< Reference to the interrupt descriptor table.
- };
-
- /**
- * @brief Creates the Interrupt Descriptor Table and Global Descriptor Table as a static variable the first time this
- * method is called and update IDTR and GDTR registers values.
- *
- * @note Subsequent calls after the first one, will simply return the previously created tables, but not update the
- * registers again.
- *
- * @return References to the statically created Interrupt Descriptor and Global Descriptor Table.
- */
- auto initialize_descriptor_tables() -> descriptor_tables;
-
- /**
- * @brief Switches from the current Kernel Mode (Level 0) to User Mode (Level 3). Will simply use predefined Segment
- * Selectors for the User Data and User Code Segment, which are Index 3 and 4 in the GDT respectively.
- */
- auto switch_to_user_mode() -> void;
-
- /**
- * @brief Switches from the current Code and Data Segment to the given Code and Data Segment.
- *
- * @note This method will additionally call initialize_descriptor_tables, to ensure the GDTR and IDTR have been setup
- * correctly before attempting to switch the context. This switch is achieved using a far return, which will once
- * executed call the given void function.
- *
- * @param data_segment Data Segment that the SS, DS; ES, FS and GS register will be set too.
- * @param code_segment Code Segment that the CS register will be set too.
- * @param return_function Function that will be called once the switch has been achieved.
- */
- auto switch_context(interrupt_descriptor_table::segment_selector data_segment,
- interrupt_descriptor_table::segment_selector code_segment, void (*return_function)()) -> void;
-
-} // namespace teachos::arch::context_switching
-
-#endif // TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_MAIN_HPP
diff --git a/arch/x86_64/pre/include/arch/context_switching/syscall/main.hpp b/arch/x86_64/pre/include/arch/context_switching/syscall/main.hpp
deleted file mode 100644
index f507c61..0000000
--- a/arch/x86_64/pre/include/arch/context_switching/syscall/main.hpp
+++ /dev/null
@@ -1,91 +0,0 @@
-#ifndef TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_SYSCALL_MAIN_HPP
-#define TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_SYSCALL_MAIN_HPP
-
-#include <cstdint>
-
-namespace teachos::arch::context_switching::syscall
-{
- /**
- * @brief Possible syscall implementation that should actually be called.
- *
- * @note Attempts to reflect the Linux interface partially. See https://filippo.io/linux-syscall-table/ for more
- * information.
- */
- enum class type : uint64_t
- {
- WRITE = 1U, ///< Loads the arg_0 parameter as an address pointing to a const char array, which will then be printed
- ///< onto the VGA buffer screen.
- EXPAND_HEAP = 2U, /// Expands the User Heap by additonally mapping 100 KiB of virtual page memory. Ignores the
- /// parameters and uses them as out parameters instead, where arg_0 is the start of the newly
- /// mapped heap area and arg_1 is the size of the entire area. Can be less than 100 KiB if less
- /// space remains.
- ASSERT = 3U, /// Loads the arg_0 parameter as a boolean which needs to be true or it will print the message in
- /// arg_1 parameter onto the VGA buffer screen, keep it as a nullptr if it shouldn't print anything
- /// and then it halts the further execution of the application.
- };
-
- /**
- * @brief Possible error codes that can be returned by the different syscall methods called depending on the type
- * enum.
- */
- enum class error : uint8_t
- {
- OK = 0U, ///< No error occured in syscall.
- OUT_OF_MEMORY = 1U, ///< Expanding heap failed because we have run out of mappable virtual address space.
- };
-
- /**
- * @brief Allows to convert the error enum type into a boolean directly. Where any code besides 0 being no error, will
- * return true. The remaining errors return true.
- *
- * @param e Error code that was returned by the syscall.
- * @return Return true if there was no error and false otherwise.
- */
- constexpr bool operator!(error e)
- {
- return e == error::OK;
- }
-
- /**
- * @brief Maximum amount of arguments that can be passed to a syscall. Default value is 0 and arguments are only ever
- * used depending on the actual enum type and if the method requires thoose parameters.
- */
- struct arguments
- {
- uint64_t arg_0{}; ///< First optional paramter to the syscall representing the RDI register.
- uint64_t arg_1{}; ///< Second optional paramter to the syscall representing the RSI register.
- uint64_t arg_2{}; ///< Third optional paramter to the syscall representing the RDX register.
- uint64_t arg_3{}; ///< Fourth optional paramter to the syscall representing the R10 register.
- uint64_t arg_4{}; ///< Fifth optional paramter to the syscall representing the R8 register.
- uint64_t arg_5{}; ///< Sixth optional paramter to the syscall representing the R9 register.
- };
-
- /**
- * @brief Response of a systemcall always containin an error code, signaling if the syscall even succeeded or not.
- * Additionally it may contain up to 6 return values in the values struct.
- */
- struct response
- {
- error error_code; ///< Error code returned by the syscall. If it failed all the values will be 0.
- arguments values = {}; ///< Optional return values of the syscall implementation.
- };
-
- /**
- * @brief Calls the method associated with the given syscall number and passes the given optional arguments to it,
- * over the RDI, RSI, RDX, R10, R8 and R9 register.
- *
- * @param syscall_number Syscall method that should be called. See enum values in type for possible implemented
- * methods.
- * @param args Optional arguments passable to the different syscall methods, called depending on the syscall_number.
- * Not passing the required parameters to the method, will result in passing 0 instead, which might make the fail or
- * not function correctly.
- * @return The syscall implementation always returns a bool-convertable error code converting to true if the syscall
- * failed or false if it didn't. Additionally it might pase additional values besides the error code, they will be set
- * in the arguments struct. So the value can be read and used for further processing.
- */
- [[gnu::section(".user_text")]]
- auto syscall(type syscall_number, arguments args = {}) -> response;
-
-} // namespace teachos::arch::context_switching::syscall
-
-#endif // TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_SYSCALL_MAIN_HPP
diff --git a/arch/x86_64/pre/include/arch/context_switching/syscall/syscall_enable.hpp b/arch/x86_64/pre/include/arch/context_switching/syscall/syscall_enable.hpp
deleted file mode 100644
index 8cb468a..0000000
--- a/arch/x86_64/pre/include/arch/context_switching/syscall/syscall_enable.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_SYSCALL_SYSCALL_ENABLE_HPP
-#define TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_SYSCALL_SYSCALL_ENABLE_HPP
-
-namespace teachos::arch::context_switching::syscall
-{
- /**
- * @brief Enables and sets up internal CPU registers to allow for syscall to function correctly and switch context
- * temporarily back to the kernel level.
- *
- * @note Configures the Model Specific Register required by syscall (LSTAR, FMASK, STAR) with the correct values so
- * that the syscall_handler is called and sets the System Call Extension bit on the EFER flags to allow for syscall
- * to be used.
- */
- auto enable_syscall() -> void;
-
-} // namespace teachos::arch::context_switching::syscall
-
-#endif // TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_SYSCALL_SYSCALL_ENABLE_HPP
diff --git a/arch/x86_64/pre/include/arch/context_switching/syscall/syscall_handler.hpp b/arch/x86_64/pre/include/arch/context_switching/syscall/syscall_handler.hpp
deleted file mode 100644
index 2e7bcd1..0000000
--- a/arch/x86_64/pre/include/arch/context_switching/syscall/syscall_handler.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#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
-{
- /**
- * @brief Handler for SYSCALL instruction. Calls a specific implementation based
- * on the register RAX.
- *
- * @return Returns with LEAVE, 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/pre/include/arch/kernel/halt.hpp b/arch/x86_64/pre/include/arch/kernel/halt.hpp
deleted file mode 100644
index 377acc0..0000000
--- a/arch/x86_64/pre/include/arch/kernel/halt.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef TEACHOS_ARCH_X86_64_KERNEL_HALT_HPP
-#define TEACHOS_ARCH_X86_64_KERNEL_HALT_HPP
-
-namespace teachos::arch::kernel
-{
- /**
- * @brief Halts the kernel execution, meaning any code after a call to this will not run anymore.
- */
- extern "C" [[noreturn]] auto halt() -> void;
-
-} // namespace teachos::arch::kernel
-
-#endif // TEACHOS_ARCH_X86_64_KERNEL_HALT_HPP
diff --git a/arch/x86_64/pre/include/arch/kernel/main.hpp b/arch/x86_64/pre/include/arch/kernel/main.hpp
deleted file mode 100644
index a13e5f4..0000000
--- a/arch/x86_64/pre/include/arch/kernel/main.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef TEACHOS_ARCH_X86_64_KERNEL_MAIN_HPP
-#define TEACHOS_ARCH_X86_64_KERNEL_MAIN_HPP
-
-namespace teachos::arch::kernel
-{
- /**
- * @brief Initalizes the kernel system.
- */
- auto main() -> void;
-
-} // namespace teachos::arch::kernel
-
-#endif // TEACHOS_ARCH_X86_64_KERNEL_MAIN_HPP
diff --git a/arch/x86_64/pre/include/arch/user/main.hpp b/arch/x86_64/pre/include/arch/user/main.hpp
deleted file mode 100644
index c168a1f..0000000
--- a/arch/x86_64/pre/include/arch/user/main.hpp
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef TEACHOS_ARCH_X86_64_USER_MAIN_HPP
-#define TEACHOS_ARCH_X86_64_USER_MAIN_HPP
-
-namespace teachos::arch::user
-{
- /**
- * @brief User Main method. If this method finishes there is no code left to run and the whole OS will shut down.
- * Additionally this main method is executed at Ring 3 and accessing CPU Registers or Kernel level functionality can
- * only be done over syscalls and not directly anymore.
- */
- [[gnu::section(".user_text")]]
- auto main() -> void;
-
-} // namespace teachos::arch::user
-
-#endif // TEACHOS_ARCH_X86_64_USER_MAIN_HPP