aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src/context_switching
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64/src/context_switching')
-rw-r--r--arch/x86_64/src/context_switching/interrupt_descriptor_table/interrupt_descriptor_table.cpp22
-rw-r--r--arch/x86_64/src/context_switching/main.cpp5
2 files changed, 10 insertions, 17 deletions
diff --git a/arch/x86_64/src/context_switching/interrupt_descriptor_table/interrupt_descriptor_table.cpp b/arch/x86_64/src/context_switching/interrupt_descriptor_table/interrupt_descriptor_table.cpp
index 0555e4c..ddc098e 100644
--- a/arch/x86_64/src/context_switching/interrupt_descriptor_table/interrupt_descriptor_table.cpp
+++ b/arch/x86_64/src/context_switching/interrupt_descriptor_table/interrupt_descriptor_table.cpp
@@ -9,22 +9,12 @@ namespace teachos::arch::context_switching::interrupt_descriptor_table
{
auto create_interrupt_descriptor_table() -> interrupt_descriptor_table
{
- interrupt_descriptor_table idt{};
-
- // Define basic exception handlers (at least for CPU exceptions 0x00-0x1F)
- for (uint8_t vector = 0; vector < 32; ++vector)
- {
- uint64_t offset = reinterpret_cast<uint64_t>(default_exception_handler); // Use a real handler function
- segment_selector selector{0U, segment_selector::REQUEST_LEVEL_KERNEL};
- ist_offset ist{0U}; // Default stack offset (can be updated for IST)
- idt_flags flags{idt_flags::DESCRIPTOR_LEVEL_KERNEL | idt_flags::TRAP_GATE};
-
- idt.push_back(gate_descriptor{selector, ist, flags, offset});
- }
-
- // Additional entries for hardware interrupts (IRQs) and syscalls can be added here
-
- return idt;
+ uint64_t offset = 0U;
+ segment_selector selector{0U, segment_selector::REQUEST_LEVEL_KERNEL};
+ ist_offset ist{0U};
+ idt_flags flags{idt_flags::DESCRIPTOR_LEVEL_KERNEL};
+ gate_descriptor gate_descriptor{selector, ist, flags, offset};
+ return interrupt_descriptor_table{gate_descriptor};
}
} // namespace
diff --git a/arch/x86_64/src/context_switching/main.cpp b/arch/x86_64/src/context_switching/main.cpp
index 95a25e0..c3c0cf0 100644
--- a/arch/x86_64/src/context_switching/main.cpp
+++ b/arch/x86_64/src/context_switching/main.cpp
@@ -13,7 +13,10 @@ namespace teachos::arch::context_switching
decltype(auto) global_descriptor_table = segment_descriptor_table::initialize_global_descriptor_table();
decltype(auto) interrupt_descriptor_table = interrupt_descriptor_table::initialize_interrupt_descriptor_table();
- kernel::cpu::jmp((uint64_t)&global_descriptor_table.at(1), boot::segment_register_reload_pointer);
+ interrupt_descriptor_table::segment_selector segment_selector{
+ 1U, interrupt_descriptor_table::segment_selector::REQUEST_LEVEL_KERNEL};
+ kernel::cpu::far_pointer pointer{boot::segment_register_reload_pointer, segment_selector};
+ kernel::cpu::jmp(pointer);
// Load task state segment descriptor from the last element in the global descriptor table, done by calculating
// offset in bytes to the start of the segment descriptor (5 * 16) = 80