aboutsummaryrefslogtreecommitdiff
path: root/mirai.old/kata/shift.zig
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-02-24 06:56:58 +0530
committerBobby <[email protected]>2026-02-24 06:56:58 +0530
commit5fe89e6f5b6fd6f5b5589b9e5d4714e0f4fbe5e8 (patch)
tree2ae2a13678844b82b43583ca28eed4d4b6223ec0 /mirai.old/kata/shift.zig
parent297c66b480a238dad5ce7f03405fe6f5b9123701 (diff)
downloadakiba-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.zig53
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;
+ }
+}