diff options
| author | Richard Qin <richard.qin.x@gmail.com> | 2026-04-17 01:05:31 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.x@gmail.com> | 2026-04-17 01:05:31 +0800 |
| commit | e2564d112ba03b432f9f44f445cbc4a3ed85751a (patch) | |
| tree | 1541ee010bfd9c0e614fc91c2de5c9aa741418ae /na/arch/riscv/trap/swtch.S | |
| parent | 81563cb415d8214f1d1e34f73d49a404424f8f2c (diff) | |
| download | lume-e2564d112ba03b432f9f44f445cbc4a3ed85751a.tar.gz lume-e2564d112ba03b432f9f44f445cbc4a3ed85751a.tar.xz | |
feat: add initial RISC-V architecture support and core kernel functionality
- Implement MMU hardware primitives for RISC-V SV39 in mmu.h
- Create trap vector control primitives in trap.h
- Define trap frame structure for RISC-V in trapframe.h
- Add assembly routines for context switching in swtch.S
- Implement trap vector entry/exit in trap_vector.S
- Introduce basic error number definitions in errno.h
- Provide placement new/delete operators in new.h
- Define kernel panic handler in panic.h and implement in panic.cc
- Establish basic type definitions in types.h
- Create the kernel main entry point in main.cc with global initialization
- Add synchronization primitives using spinlocks in spinlock.h and spinlock.cc
- Define per-CPU state tracking for interrupts in cpu_state.h
- Create a linker script for the kernel in linker.ld
- Update module makefiles for kernel and library components
Diffstat (limited to 'na/arch/riscv/trap/swtch.S')
| -rw-r--r-- | na/arch/riscv/trap/swtch.S | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/na/arch/riscv/trap/swtch.S b/na/arch/riscv/trap/swtch.S new file mode 100644 index 0000000..4393505 --- /dev/null +++ b/na/arch/riscv/trap/swtch.S @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* Copyright (C) 2026 Richard Qin */ + + .section .text + .globl context_switch + .align 2 +# void context_switch(Context* old_ctx, Context* next_ctx); +# a0 = old_ctx_ptr, a1 = next_ctx_ptr +context_switch: + sd ra, 0(a0) + sd sp, 8(a0) + sd s0, 16(a0) + sd s1, 24(a0) + sd s2, 32(a0) + sd s3, 40(a0) + sd s4, 48(a0) + sd s5, 56(a0) + sd s6, 64(a0) + sd s7, 72(a0) + sd s8, 80(a0) + sd s9, 88(a0) + sd s10, 96(a0) + sd s11, 104(a0) + + ld ra, 0(a1) + ld sp, 8(a1) + ld s0, 16(a1) + ld s1, 24(a1) + ld s2, 32(a1) + ld s3, 40(a1) + ld s4, 48(a1) + ld s5, 56(a1) + ld s6, 64(a1) + ld s7, 72(a1) + ld s8, 80(a1) + ld s9, 88(a1) + ld s10, 96(a1) + ld s11, 104(a1) + + ret
\ No newline at end of file |
