aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src/kernel
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2025-07-24 16:35:34 +0000
committerFelix Morgner <felix.morgner@ost.ch>2025-07-24 16:35:34 +0000
commit2d3399ab6072acd85811a54fce8eff50628888b6 (patch)
treebb6f63b58861938c6e15492732b440459dd22d62 /arch/x86_64/src/kernel
parent1b65136a11453fe7e89320dfe6170a0cd75e60dd (diff)
downloadteachos-2d3399ab6072acd85811a54fce8eff50628888b6.tar.xz
teachos-2d3399ab6072acd85811a54fce8eff50628888b6.zip
x86_64: move files out of the way
Diffstat (limited to 'arch/x86_64/src/kernel')
-rw-r--r--arch/x86_64/src/kernel/cpu/call.cpp9
-rw-r--r--arch/x86_64/src/kernel/cpu/gdtr.cpp19
-rw-r--r--arch/x86_64/src/kernel/cpu/idtr.cpp18
-rw-r--r--arch/x86_64/src/kernel/cpu/if.cpp7
-rw-r--r--arch/x86_64/src/kernel/cpu/msr.cpp31
-rw-r--r--arch/x86_64/src/kernel/cpu/segment_register.cpp98
-rw-r--r--arch/x86_64/src/kernel/cpu/tr.cpp16
-rw-r--r--arch/x86_64/src/kernel/main.cpp71
8 files changed, 0 insertions, 269 deletions
diff --git a/arch/x86_64/src/kernel/cpu/call.cpp b/arch/x86_64/src/kernel/cpu/call.cpp
deleted file mode 100644
index 98fa248..0000000
--- a/arch/x86_64/src/kernel/cpu/call.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "arch/kernel/cpu/call.hpp"
-
-namespace teachos::arch::kernel::cpu
-{
- auto call(far_pointer pointer) -> void
- {
- asm volatile("rex64 lcall *%[input]" : /* no output from call */ : [input] "m"(pointer));
- }
-} // namespace teachos::arch::kernel::cpu
diff --git a/arch/x86_64/src/kernel/cpu/gdtr.cpp b/arch/x86_64/src/kernel/cpu/gdtr.cpp
deleted file mode 100644
index 74a4e1c..0000000
--- a/arch/x86_64/src/kernel/cpu/gdtr.cpp
+++ /dev/null
@@ -1,19 +0,0 @@
-#include "arch/kernel/cpu/gdtr.hpp"
-
-#include "arch/context_switching/segment_descriptor_table/global_descriptor_table_pointer.hpp"
-
-namespace teachos::arch::kernel::cpu
-{
- auto store_global_descriptor_table() -> context_switching::segment_descriptor_table::global_descriptor_table_pointer
- {
- context_switching::segment_descriptor_table::global_descriptor_table_pointer current_value{};
- asm("sgdt %[output]" : [output] "=m"(current_value));
- return current_value;
- }
-
- auto load_global_descriptor_table(
- context_switching::segment_descriptor_table::global_descriptor_table_pointer const & gdt_pointer) -> void
- {
- asm volatile("lgdt %[input]" : /* no output from call */ : [input] "m"(gdt_pointer));
- }
-} // namespace teachos::arch::kernel::cpu
diff --git a/arch/x86_64/src/kernel/cpu/idtr.cpp b/arch/x86_64/src/kernel/cpu/idtr.cpp
deleted file mode 100644
index 7aa20c1..0000000
--- a/arch/x86_64/src/kernel/cpu/idtr.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "arch/kernel/cpu/idtr.hpp"
-
-namespace teachos::arch::kernel::cpu
-{
- auto store_interrupt_descriptor_table()
- -> context_switching::interrupt_descriptor_table::interrupt_descriptor_table_pointer
- {
- context_switching::interrupt_descriptor_table::interrupt_descriptor_table_pointer current_value{};
- asm("sidt %[output]" : [output] "=m"(current_value));
- return current_value;
- }
-
- auto load_interrupt_descriptor_table(
- context_switching::interrupt_descriptor_table::interrupt_descriptor_table_pointer const & idt_pointer) -> void
- {
- asm volatile("lidt %[input]" : /* no output from call */ : [input] "m"(idt_pointer));
- }
-} // namespace teachos::arch::kernel::cpu
diff --git a/arch/x86_64/src/kernel/cpu/if.cpp b/arch/x86_64/src/kernel/cpu/if.cpp
deleted file mode 100644
index 60a90a3..0000000
--- a/arch/x86_64/src/kernel/cpu/if.cpp
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace teachos::arch::kernel::cpu
-{
- auto set_interrupt_flag() -> void { asm volatile("sti"); }
-
- auto clear_interrupt_flag() -> void { asm volatile("cli"); }
-
-} // namespace teachos::arch::kernel::cpu
diff --git a/arch/x86_64/src/kernel/cpu/msr.cpp b/arch/x86_64/src/kernel/cpu/msr.cpp
deleted file mode 100644
index 9c474a1..0000000
--- a/arch/x86_64/src/kernel/cpu/msr.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "arch/kernel/cpu/msr.hpp"
-
-namespace teachos::arch::kernel::cpu
-{
- namespace
- {
- auto constexpr IA32_EFER_ADDRESS = 0xC0000080;
- }
-
- auto read_msr(uint32_t msr) -> uint64_t
- {
- uint32_t low, high;
- asm volatile("rdmsr" : "=a"(low), "=d"(high) : "c"(msr));
- return (static_cast<uint64_t>(high) << 32) | low;
- }
-
- auto write_msr(uint32_t msr, uint64_t value) -> void
- {
- uint32_t low = value;
- uint32_t high = value >> 32;
- asm volatile("wrmsr"
- : /* no output from call */
- : "c"(msr), "a"(low), "d"(high));
- }
-
- auto set_efer_bit(efer_flags flag) -> void
- {
- auto const efer = read_msr(IA32_EFER_ADDRESS);
- write_msr(IA32_EFER_ADDRESS, static_cast<std::underlying_type<efer_flags>::type>(flag) | efer);
- }
-} // namespace teachos::arch::kernel::cpu
diff --git a/arch/x86_64/src/kernel/cpu/segment_register.cpp b/arch/x86_64/src/kernel/cpu/segment_register.cpp
deleted file mode 100644
index b08c9c4..0000000
--- a/arch/x86_64/src/kernel/cpu/segment_register.cpp
+++ /dev/null
@@ -1,98 +0,0 @@
-#include "arch/kernel/cpu/segment_register.hpp"
-
-#include "arch/context_switching/interrupt_descriptor_table/segment_selector.hpp"
-#include "arch/exception_handling/assert.hpp"
-
-namespace teachos::arch::kernel::cpu
-{
- auto reload_data_segment_registers() -> void
- {
- asm volatile("xor %%rax, %%rax\n"
- "mov %%rax, %%ss\n"
- "mov %%rax, %%ds\n"
- "mov %%rax, %%es\n"
- "mov %%rax, %%fs\n"
- "mov %%rax, %%gs\n"
- : /* no output from call */
- : /* no input to call */
- : "rax");
- }
-
- auto set_data_segment_registers(context_switching::interrupt_descriptor_table::segment_selector data_segment) -> void
- {
- asm volatile("xor %%rax, %%rax\n"
- "mov %[input], %%ax\n"
- "mov %%rax, %%ds\n"
- "mov %%rax, %%es\n"
- "mov %%rax, %%fs\n"
- "mov %%rax, %%gs\n"
- : /* no output from call */
- : [input] "m"(data_segment)
- : "rax");
- }
-
- auto read_code_segment_register() -> context_switching::interrupt_descriptor_table::segment_selector
- {
- context_switching::interrupt_descriptor_table::segment_selector current_value{};
- asm volatile("mov %%cs, %[output]" : [output] "=r"(current_value));
- return current_value;
- }
-
- auto validate_data_segment_registers(context_switching::interrupt_descriptor_table::segment_selector data_segment)
- -> void
- {
- context_switching::interrupt_descriptor_table::segment_selector ss{};
- context_switching::interrupt_descriptor_table::segment_selector ds{};
- context_switching::interrupt_descriptor_table::segment_selector es{};
- context_switching::interrupt_descriptor_table::segment_selector fs{};
- context_switching::interrupt_descriptor_table::segment_selector gs{};
-
- asm volatile(
- "mov %%ss, %[ss_output]\n"
- "mov %%ds, %[ds_output]\n"
- "mov %%es, %[es_output]\n"
- "mov %%fs, %[fs_output]\n"
- "mov %%gs, %[gs_output]\n"
- : [ss_output] "=r"(ss), [ds_output] "=r"(ds), [es_output] "=r"(es), [fs_output] "=r"(fs), [gs_output] "=r"(gs));
-
- auto result = (ss == ds && ss == es && ss == fs && ss == gs);
- exception_handling::assert(result, "[Segment Register] Values in data register are not the same.");
- result = (ss == data_segment);
- exception_handling::assert(
- result, "[Segment Register] Expected Data Segment is not the same as the value in the Stack Segment register.");
- }
-
- auto validate_code_segment_register(context_switching::interrupt_descriptor_table::segment_selector code_segment)
- -> void
- {
- auto const cs = read_code_segment_register();
- exception_handling::assert(
- cs == code_segment,
- "[Segment Register] Expected Code Segment is not the same as the value in the Code Segment register.");
- }
-
- auto validate_segment_registers(context_switching::interrupt_descriptor_table::segment_selector data_segment,
- context_switching::interrupt_descriptor_table::segment_selector code_segment) -> void
- {
- validate_data_segment_registers(data_segment);
- validate_code_segment_register(code_segment);
- }
-
- auto set_code_segment_register(context_switching::interrupt_descriptor_table::segment_selector data_segment,
- context_switching::interrupt_descriptor_table::segment_selector code_segment,
- uint64_t address) -> void
- {
- asm volatile("mov %%rsp, %%rax\n"
- "push %[data_segment]\n"
- "push %%rax\n"
- "pushfq\n"
- "push %[code_segment]\n"
- "mov %[return_function], %%rax\n"
- "push %%rax\n"
- "iretq\n"
- : /* no output from call */
- : [data_segment] "m"(data_segment), [code_segment] "m"(code_segment), [return_function] "r"(address)
- : "rax");
- }
-
-} // namespace teachos::arch::kernel::cpu
diff --git a/arch/x86_64/src/kernel/cpu/tr.cpp b/arch/x86_64/src/kernel/cpu/tr.cpp
deleted file mode 100644
index a435540..0000000
--- a/arch/x86_64/src/kernel/cpu/tr.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-#include "arch/kernel/cpu/tr.hpp"
-
-namespace teachos::arch::kernel::cpu
-{
- auto store_task_register() -> uint16_t
- {
- uint16_t current_value{};
- asm("str %[output]" : [output] "=r"(current_value));
- return current_value;
- }
-
- auto load_task_register(uint16_t gdt_offset) -> void
- {
- asm volatile("ltr %[input]" : /* no output from call */ : [input] "m"(gdt_offset));
- }
-} // namespace teachos::arch::kernel::cpu
diff --git a/arch/x86_64/src/kernel/main.cpp b/arch/x86_64/src/kernel/main.cpp
deleted file mode 100644
index 43b5f90..0000000
--- a/arch/x86_64/src/kernel/main.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-#include "arch/kernel/main.hpp"
-
-#include "arch/boot/pointers.hpp"
-#include "arch/context_switching/interrupt_descriptor_table/segment_selector.hpp"
-#include "arch/context_switching/main.hpp"
-#include "arch/kernel/cpu/if.hpp"
-#include "arch/kernel/cpu/segment_register.hpp"
-#include "arch/memory/heap/bump_allocator.hpp"
-#include "arch/memory/heap/global_heap_allocator.hpp"
-#include "arch/memory/main.hpp"
-#include "arch/memory/multiboot/reader.hpp"
-#include "arch/stl/vector.hpp"
-#include "arch/video/vga/text.hpp"
-
-namespace teachos::arch::kernel
-{
- auto stack_overflow_test(int count) -> int
- {
- int test[5000] = {};
- if (test[0] == 0xFFFF)
- {
- return count;
- }
- count = stack_overflow_test(count);
- return count++;
- }
-
- auto heap_test() -> void
- {
- auto test2 = new memory::multiboot::memory_information{};
- auto test3 = new memory::multiboot::memory_information{};
- auto test4 = *test2;
- auto test5 = *test3;
- test4.kernel_end = 5000;
- test5.kernel_end = 3000;
- auto test6 = test4.kernel_end;
- auto test7 = test5.kernel_end;
- auto test8 = memory::multiboot::read_multiboot2();
- if (test6 && test7 && test8.kernel_end)
- {
- video::vga::text::write("Heap test successful", video::vga::text::common_attributes::green_on_black);
- }
- test2->kernel_end = 2000;
- test2->kernel_start = 1000;
- test2->multiboot_start = 2000;
- delete test2;
- delete test3;
-
- auto test9 = new int(50);
- delete test9;
- }
-
- auto main() -> void
- {
- video::vga::text::clear();
- video::vga::text::cursor(false);
- video::vga::text::write("TeachOS is starting up...", video::vga::text::common_attributes::green_on_black);
- video::vga::text::newline();
-
- memory::initialize_memory_management();
- // stack_overflow_test(0);
-
- memory::heap::global_heap_allocator::register_heap_allocator(memory::heap::heap_allocator_type::LINKED_LIST);
- // heap_test();
-
- auto address = memory::heap::global_heap_allocator::kmalloc(8U);
- (void)address;
-
- context_switching::switch_to_user_mode();
- }
-} // namespace teachos::arch::kernel