diff options
| author | Bobby <[email protected]> | 2026-02-24 06:56:58 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2026-02-24 06:56:58 +0530 |
| commit | 5fe89e6f5b6fd6f5b5589b9e5d4714e0f4fbe5e8 (patch) | |
| tree | 2ae2a13678844b82b43583ca28eed4d4b6223ec0 /mirai.old/kata/shift.zig | |
| parent | 297c66b480a238dad5ce7f03405fe6f5b9123701 (diff) | |
| download | akiba-5fe89e6f5b6fd6f5b5589b9e5d4714e0f4fbe5e8.tar.xz akiba-5fe89e6f5b6fd6f5b5589b9e5d4714e0f4fbe5e8.zip | |
Bunch of stuff moved as .old for new arch change
Diffstat (limited to 'mirai.old/kata/shift.zig')
| -rw-r--r-- | mirai.old/kata/shift.zig | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/mirai.old/kata/shift.zig b/mirai.old/kata/shift.zig new file mode 100644 index 0000000..52e87fb --- /dev/null +++ b/mirai.old/kata/shift.zig @@ -0,0 +1,53 @@ +//! Context shifting + +const context = @import("../asm/context.zig"); +const gdt = @import("../boot/gdt/gdt.zig"); +const paging = @import("../memory/paging.zig"); +const serial = @import("../drivers/serial/serial.zig"); +const tss = @import("../boot/tss/tss.zig"); +const types = @import("types.zig"); + +var current_context: ?*types.Context = null; + +pub fn to_kata(kata: *types.Kata) void { + // Validate that the target RIP is mapped in the page table + if (paging.virt_to_phys(kata.page_table, kata.context.rip) == null) { + serial.printf("shift: FATAL - kata {d} rip {x} not mapped!\n", .{ kata.id, kata.context.rip }); + paging.dump_pt_structure(kata.page_table, "corrupted"); + while (true) {} + } + + tss.set_kernel_stack(kata.stack_top); + current_context = &kata.context; + + context.switch_to_context( + &kata.context, + kata.page_table, + kata.stack_top, + ); +} + +pub fn save_current(int_ctx: *const types.InterruptContext) void { + if (current_context) |ctx| { + ctx.rax = int_ctx.rax; + ctx.rbx = int_ctx.rbx; + ctx.rcx = int_ctx.rcx; + ctx.rdx = int_ctx.rdx; + ctx.rsi = int_ctx.rsi; + ctx.rdi = int_ctx.rdi; + ctx.rbp = int_ctx.rbp; + ctx.rsp = int_ctx.rsp; + ctx.r8 = int_ctx.r8; + ctx.r9 = int_ctx.r9; + ctx.r10 = int_ctx.r10; + ctx.r11 = int_ctx.r11; + ctx.r12 = int_ctx.r12; + ctx.r13 = int_ctx.r13; + ctx.r14 = int_ctx.r14; + ctx.r15 = int_ctx.r15; + ctx.rip = int_ctx.rip; + ctx.rflags = int_ctx.rflags; + ctx.cs = int_ctx.cs; + ctx.ss = int_ctx.ss; + } +} |
